由于之前的服务器硬盘坏了,拿去恢复不了数据了,所以我把建站平台的数据迁移到新部署的机器上,星期五安装好的centos模板,今天复制一个,启动之后发现网卡找不到了,并且service network restart报错.
Device eth0 does not seem to be present, delaying initialization.[FAILED]
发现原来在基本系统中的网卡eth0到了新系统却没有了,使用ifconfig -a会发现只有lo.
因为基本系统的网络相关配置都是基于eth0的,如果基于此克隆虚拟机继续克隆或复制新的虚拟机,网卡的标识每一次都会自动加1变成eth1(第二次克隆会变成eth2),dmesg却显示内核只识别到网卡eth0。
原因分析:
很多Linux distribution使用udev动态管理设备文件,并根据设备的信息对其进行持久化命名。例如在centos中,udev会在系统引导的过程中识别网卡,将mac地址和网卡名称对应起来记录在udev的规则脚本中。而VMware会自动生成虚拟机的mac地址。
这样,由于基本系统的虚拟机已经记录了该虚拟机的网卡mac地址对应于网卡eth0,在克隆出的虚拟机中由于mac地址发生改变,udev会自动将该mac对应于网卡eth1。以此类推,udev会记录所有已经识别的mac与网卡名的关系,所以每次克隆网卡名称会自动加1,而其实kernel仅仅只识别到一张网卡,跟网卡名相关的网络配置也未发生任何变化。
解决方案:
udev将mac与网卡名称的对应关系保存在/etc/udev/rules.d/70-persistent-net.rules中,可以看到文件内容如下:
# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:7b:60:38", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:29:b9:c5", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
1.把上面第一行删除,把第二行name="eth1"修改成name="eth0",然后修改网卡配置文件
2.vi /etc/sysconfig/network-scripts/ifcfg-eth0 修改其中的HWADDR 地址为上面文件中对应的地址。
3.重启系统,一定要重启。
本文由 Mr Gu 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Aug 26, 2016 at 09:24 pm