Describe linux/RHEL6/CentOS6/Scientific Linux 6虚拟机克隆导致的网卡问题解决方法 here.

刚才在VM虚拟机里测试Scientific Linux 6(RHEL6的重编译版,相当于CentOS 6),看看是否可用于生产环境。因为镜像是在家里的电脑安装的,复制过来启动系统发现网卡启动失败,提示:

Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization. [FAILED]

Google了一下,发现是网卡mac地址写入硬件问题导致。

环境:Virtualbox+RHEL 6 x64
VirtualBoxvboxmanager克隆的虚拟机,操作系统RHEL6,启动后发现网卡不能用了。重启网络服务,报以下错误:
Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization. [FAILED]

RHEL5里也发生类似事情,因为复制虚拟机MAC会重新生成,但是操作系统的MAC却写在ifcfg-ethx里,造成了不一致,所以不能启动网络接口,在RHEL5里可以使用kudzu或者注释网卡配置文件的MAC字段来解决这个问题。但是在RHEL6里,kudzu已经被hal服务取代了。虽然lspci能够正常认到网卡,但是却无法使用/etc/init.d/network restart来启动服务。尝试注释ifcfg-eth0MAC字段,还是报错。查看了下udev的规则,发现了问题的所在。

{{{ [root@Oracle ~]# cat /etc/udev/rules.d/70-persistent-net.rules # This file was automatically generated by the /lib/udev/write_net_rules # program, run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single # line, and change only the value of the NAME= key.

# net device () (custom name provided by external tool)
SUBSYSTEM==net, ACTION==add, DRIVERS==?*, ATTR{address}==08:00:27:16:31:11, ATTR{type}==1, KERNEL==eth*, NAME=eth0

# net device ()
SUBSYSTEM==net, ACTION==add, DRIVERS==?*, ATTR{address}==08:00:27:32:66:63, ATTR{type}==1, KERNEL==eth*, NAME=eth1
[root@Oracle ~]#

}}} 原来UDEV这里把克隆前的MAC当成了当前虚拟机的eth0 MAC,而重新生成的08:00:27:32:66:63是eth1的MAC。

解决这个问题,只要删除旧的UDEV配置,修改为:

{{{ [root@Oracle ~]# cat /etc/udev/rules.d/70-persistent-net.rules # This file was automatically generated by the /lib/udev/write_net_rules # program, run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single # line, and change only the value of the NAME= key.

# net device () (custom name provided by external tool)
SUBSYSTEM==net, ACTION==add, DRIVERS==?*, ATTR{address}==08:00:27:32:66:63, ATTR{type}==1, KERNEL==eth*, NAME=eth0

重启network服务有时可以有时不行,重启系统就一切OK!试过多次!
[root@Oracle ~]# /etc/init.d/network restart
Shutting down interface eth0: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: [ OK ]
[root@Oracle ~]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 08:00:27:32:66:63
inet addr:172.16.100.3 Bcast:172.16.100.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe32:6663/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:206 errors:0 dropped:0 overruns:0 frame:0
TX packets:203 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:21157 (20.6 KiB) TX bytes:24515 (23.9 KiB)

}}} 参考:http://bbs.chinaunix.net/viewthread.php?tid=1918368

我的测试环境是VMware Workstation 7.1 + SL 6 x64 最简单的解决办法是直接删除70-persistent-net.rules配置文件 {{{ rm -fr /etc/udev/rules.d/70-persistent-net.rules reboot }}} 重启系统就ok了,系统会自动生成一个新的。

Comments !