Hyper-V下Linux虚拟机网卡丢失的原因及解决方案
虚拟化的总体趋势
该公司已经实施了虚拟化,所有这些都使用Microsoft Windows 2008 R2企业版和Hyper-V作为集群来运行Hyper-V虚拟机。这是好事。它可以节省资源、集中管理、节省电力、快速部署。关键是可以实时迁移。
我们使用戴尔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。需要的话可以在网上谷歌一下。才几百K,很小了。
2.圣牛~我的网卡呢?
集群化之后,迁移是不可避免的。有时候我们的一台服务器需要重启维护,运行在上面的虚拟机需要实时迁移到其他服务器上。迁移很顺利,但是Linux系统迁移后找不到网卡,ifconfig只能看到一个lo的本地环回网卡。eth0去哪了?
快速查看网络配置,sudo vi /etc/network/interfaces,发现配置都在。为什么eth0不见了?
用ifconfig -a检查所有网卡,发现eth0没了,eth1多了。我灵机一动,修改了接口文件
sudo VI/etc/网络/接口
用eth1替换eth0,然后重新启动网络服务。
sudo/etc/init . d/网络重启
哈哈,网卡准备好了~ ~
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下安装Linux虚拟机的注意事项
1.在创建虚拟机的时候,不用担心打扮系统,用旧版网卡替换网卡。
2.不要使用网卡的动态MAC地址,指定为静态。
3.微软刚刚在Hyper-V下发布了新的linux驱动,赶紧安装吧。
4.网卡丢失后,ifconfig -a将查看eth0是否消失,eth1是否退出,然后更改接口配置。
5.最终的解决方案是删除linux网络配置缓存sudor um/etc/udev/rules . d/70-persistent-net . rules。