Hyper-V下Linux虚拟机网卡丢失的原因及解决方案
虚拟化是大势所趋。该公司已经实施了虚拟化,并且全部使用带有Hyper-V的微软Windows 2008 R2企业版作为集群来运行Hyper-V虚拟机。这是一件好事,节约资源,
集中管理,省电,超快速部署,关键是实时迁移。
我们使用Dell MD3000i盘柜作为群集的共享磁盘,这是基于iSCSI的千兆以太网网络存储,一台Dell PowerEdge R610服务器构成一个Windows群集。
交换设备为juniper EX22000-48t-4G全千兆交换机,启用巨型帧支持。众所周知,微软的Hyper-V非常支持自己的windows虚拟机,而且它还有一个专门的驱动程序。
即便如此,我们还是在linux上运行了许多虚拟机,主要是因为windows的Hyper-V比ESX更便宜。
先说说linux虚拟机和Hyper-V. 1的一些尴尬事。网卡应该是旧的,Hyper-V上刚刚发布了驱动,打开Linux虚拟机最致命的就是网卡驱动。当我们创建一个新的Linux虚拟机时,
改进linux系统后发现网卡不能用了,因为无论是RHEL还是Ubuntu还是狗屁Linux系统都不支持Hyper-V网卡驱动。
这就需要我们在Hyper-V Manager中删除附着在Linux虚拟机上的网卡,然后添加一个遗留的网卡,可以模拟成经典的老式网卡。
Linux一般集成了这个网卡的驱动,装了网络就可以用了。好消息是,微软刚刚在8月份发布了Hyper-V下的虚拟机驱动程序,可以支持RHEL和Ubuntu。有需要的朋友可以在网上google一下,才几百K,很小了。
2.天哪~我的网卡呢?集群化之后,迁移是不可避免的。有时候我们的一台服务器需要重启维护,上面运行的虚拟机需要实时迁移到其他服务器上。迁移很顺利,但是Linux系统迁移完之后,
我找不到网卡。ifconfig只能看到lo的本地环回网卡。eth0在哪里?
赶紧看看网络配置,sudo vi /etc/network/interfaces,发现配置都在。为什么eth0不见了?用ifconfig -a检查所有网卡,发现eth0没了。
但是eth1更多。我灵机一动,修改了接口文件。
Sudo VI/etc/network/interface replaces eth0 with eth1, and then restarts the network service sudo/etc/init. d/network restart.
哈哈,网卡准备好了~ ~
3.又悲剧了。后来迁移了一个64位版本的ubuntu 9.10后,这招就不管用了,因为eth1也没找到。后来手动删除了Ubuntu的网络配置文件,重新启动,就没事了。
sudo rm /etc/udev/rules.d/70-persistent-net.rules
总结一下,linux网卡之所以会丢失,是因为Hyper-V默认分配的创建新虚拟机的网卡MAC地址是动态的,每一次主机迁移都会导致重新分配一个新的MAC到ubuntu,然后你就找不到eth0了。
有时会自动生成eth1。如果能记住旧MAC地址,在Hyper-V Manager中迁移前手动指定MAC为旧MAC也能解决问题,但问题是谁他妈的会记住MAC地址~ ~ ~?
所以清除ubuntu的网络配置缓存文件,或者在Hyper-V Manager上将分配给Linux的MAC地址设置为静态才是王道。
Hyper-V 1下安装Linux虚拟机的注意事项。创建虚拟机时,不要担心修整系统和用传统网络适配器更换网卡2。不要使用网卡的动态MAC地址。
指定为静态。3.微软刚刚在Hyper-V下发布了新的linux驱动,赶紧安装吧。4.ifconfig -a会在网卡丢失后查看eth0是否没有,eth1是否多余。
然后更改接口配置。5.最终的解决方案是删除linux网络配置缓存sudor um/etc/udev/rules . d/70-persistent-net . rules。