镜像克隆导致虚拟机启动时获取IP失败

CentOS中,udev会在系统引导的过程中识别网卡,将mac地址和网卡名称对应起来记录在udev的规则脚本中。但是通过镜像进行克隆,qemu(vmware也是一个德行)在启动新的镜像时会再自动重新生成虚拟机的MAC地址。这样,由于基本系统的虚拟机已经记录了原始虚拟机的网卡mac地址对应于网卡eth0,而在克隆出的虚拟机中由于mac地址发生改变,udev会自动将该mac对应于网卡eth1(累加的原则)。

[root@localhost ~]# vim /etc/udev/rules.d/70-persistent-net.rules

镜像克隆导致虚拟机启动时获取IP失败

以此类推,udev会记录所有已经识别的mac与网卡名的关系,所以每次克隆网卡名称会自动加1,而其实虚拟机xml中真实的只配置了一张网卡,kernel也仅仅只能识别到一张网卡,跟网卡名相关的网络配置也未发生任何变化。所以系统起来后,network或者networkmanager只会通过dhclint来调用ifcfg-eth0(ifcfg-ens30)来获取IP,但是配置文件中的mac地址和网卡名与kernel真实识别到的mac地址网卡名又不一致,so克隆的虚拟机就没法获取到IP;

[root@localhost ~]# grep HWADDR /etc/sysconfig/network-scripts/ifcfg-eth*

镜像克隆导致虚拟机启动时获取IP失败

所以这个问题要彻底解决,还是要从udev规则这里下手

 

简单的死板方法:

1. 克隆的虚拟机镜像,解开他,删除udev规则,这样kernel每次启动通过systemd-udevd来重新识别所有扫描到的设备,并构建最新的udev规则,识别的新的第一个设备的mac地址还是会对应到ifcfg-eth0(ifcfg-ens30)命名,以后以此类推;

2. 修改ifcfg-eth0(ifcfg-ens30)配置文件,注释掉mac地址这一行(如果有UUID,也请删除或注释掉),这样只要系统识别到的eth0,network或者networkmanager就会用ifcfg-eth0(ifcfg-ens30)来请求IP;

 

如果是系统已经起来了发现这个问题,又不像重启系统,那就通过VNC(或者串口)先登录到环境,也是删除udev规则,修改ifcfg-ethx文件(如上一样修改),然后systemctl restart systemd-udevd来重建udev规则,之后再systemctl restart network(NetworkManager);

 

最灵活的方式,我其实是推荐自定义udev规则,这个就要自己重新做镜像了;

 

 

 

 

上一篇:Contos6和Contos7网卡区别


下一篇:Linux 6 本地网络配置方法