一、问题描述
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冲突问题。