Linux启动网卡时出现RTNETLINK answers: File exists错误解决方

ppwnbo 2014-01-15

一、问题描述
VMware中克隆虚拟机是经常的事情,虽然如此,用到虚拟机时,本人还是喜欢新安装一个操作系统,针对服务器的应用,在安装操作系统时,一并安装好,并且也花不了多少时间。但最近需要大量的配置一样的虚拟机进行测试,故安装了一个模板虚拟机,然后直接复制模板虚拟机到不同的文件夹,然后使用VMware 直接打开使用,但问题出来了,打开这些复制(克隆)的虚拟机全部会出现网络无法启动的问题。使用 service network start  命令出现报错如下:

device eth0 does not seem to be present
RTNETLINK answers: File exists
RTNETLINK answers: File exists
RTNETLINK answers: File exists

玩Linux蛮多年了,自认为对linux网络配置很熟悉了,我第一直觉就是MAC地址的问题,怎么更改配置都不行,百度半天,网上很多处理方法都是说与NetworkManager服务冲突导致,只要把该服务停止即可,查半天,本人安装的操作系统根本就没这个服务,哪来的冲突?

直到今天才发现原来还有太多的东西需要学习。不过我相信只要肯钻研及善用谷歌与百度,还是找到了解决方法。
 
二、原因分析

使用VMware 打开复制过来的操作系统文件,VMware会为新产生的虚拟机配置一个与原始虚拟机网卡MAC地址不同的网卡。对于CentOS这样的Linux系统,会把运行时的网卡MAC地址记入到 /etc/udev/rules.d/70-persistent-net.rules 文件中。这样克隆好的新系统里也保存了这个记录。当新系统启动时,由于vmware已经为其配置了不同的MAC地址,因此系统会在启动扫描硬件时把这个新的MAC地址的网卡当做是eth1,并且增加记入上述文件中。而此时配置文件里的 /etc/sysconfig/network-scripts/ifcfg-eth0 里记录的还是原来的MAC地址,而这个MAC地址在新系统里是不存在的,所以无法启动。
 
三、解决方法
编辑/etc/udev/rules.d/70-persistent-net.rules
找到含name="eth0"的那行直接删除,如下:
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:ac:95:31", ATTR{type}=="1", KERNEL=="eth*", name="eth0"

--------------------------------------------------------------------------------
 
编辑含name="eth1"的那行:"eth1"更改为"eth0"

--------------------------------------------------------------------------------
 
编辑/etc/sysconfig/network-scripts/ifcfg-eth0
更改HWADDR地址跟上面rules文件的MAC地址一样。

--------------------------------------------------------------------------------
 
最后 init 6 或者reboot 系统搞定;

相关推荐