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

一、问题描述
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 系统搞定;

补充:

网络接口(网卡设备device)网络连接(connection)的区分

[root@centos4 network-scripts]# nmcli dev status
DEVICE  TYPE      STATE      CONNECTION   
ens33   ethernet  connected  ens33        
ens37   ethernet  connected  System ens37 
lo      loopback  unmanaged  --

实例分析:

[root@centos4 network-scripts]# ls
ifcfg-ens33  ifdown-eth   ifdown-routes    ifup-aliases  ifup-plip    ifup-Team          network-functions-ipv6
ifcfg-ens37  ifdown-ippp  ifdown-sit       ifup-bnep     ifup-plusb   ifup-TeamPort
ifcfg-eth0   ifdown-ipv6  ifdown-Team      ifup-eth      ifup-post    ifup-tunnel
ifcfg-lo     ifdown-isdn  ifdown-TeamPort  ifup-ippp     ifup-ppp     ifup-wireless
ifdown       ifdown-post  ifdown-tunnel    ifup-ipv6     ifup-routes  init.ipv6-global
ifdown-bnep  ifdown-ppp   ifup             ifup-isdn     ifup-sit     network-functions
[root@centos4 network-scripts]# mv ifcfg-eth0 ifcfg
[root@centos4 network-scripts]# cat ifcfg
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes

[root@centos4 network-scripts]# systemctl restart network
[root@centos4 network-scripts]# ls
ifcfg        ifdown-eth   ifdown-routes    ifup-aliases  ifup-plip    ifup-Team          network-functions-ipv6
ifcfg-ens33  ifdown-ippp  ifdown-sit       ifup-bnep     ifup-plusb   ifup-TeamPort
ifcfg-ens37  ifdown-ipv6  ifdown-Team      ifup-eth      ifup-post    ifup-tunnel
ifcfg-lo     ifdown-isdn  ifdown-TeamPort  ifup-ippp     ifup-ppp     ifup-wireless
ifdown       ifdown-post  ifdown-tunnel    ifup-ipv6     ifup-routes  init.ipv6-global
ifdown-bnep  ifdown-ppp   ifup             ifup-isdn     ifup-sit     network-functions
[root@centos4 network-scripts]# 

主要是ifcfg-eth0配置文件中重复

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes

NetworkManager能正常启动,但network不能正常启动;虽然network不能正常启动,但是ifcfg-ens33和ifcfg-ens37对应网卡配置文件的网络已经能够正常启动了

总结:网络配置中注意网卡接口设备配置网卡是否存在,迁移后虚拟机vmware迁移后网卡MAC地址是否已经改变。注意网络接口配置文件UUID每一个设备都是唯一的。network和NetworkManager冲突问题。

你可能感兴趣的:(Linux网络)