你的位置:首页 > 操作系统

[操作系统]Linux VMware 克隆后无法启动eth0网卡


 

引:    

VMware 下LINUX出现:Device eth0 does not seem to be present, delaying initialization.解决办法 VMWare 克隆 复制   eth0 be present 找不到 解决方案 vmware clone 网卡

VMware 下LINUX下使用ifconfig查看时无eth0网卡相应信息!

当使用克隆后的虚拟机时发现原来在基本系统中的网卡eth0到了新系统却没有了,使用 ifconfig -a会发现只有eth1。因为基本系统的网络相关配置都是基于eth0的,eth1没有网络相关的配置,此时要正常该虚拟机中的网络,只有添加eth1的 网络配置,这样每次都要修改网卡配置在做多Linux系统测试的时候很不方便。更进一步,如果基于此克隆虚拟机继续克隆或复制新的虚拟机,网卡的标识每一 次都会自动加1(第二次克隆会变eth2),dmesg却显示内核只识别到网卡eth0。

原因分析: 很多Linux distribution使用udev动态管理设备文件,并根据设备的信息对其进行持久化命名。例如在Debian etch中,udev会在系统引导的过程中识别网卡,将mac地址和网卡名称对应起来记录在udev的规则脚本中。而VMware会自动生成虚拟机的 mac地址。这样,由于基本系统的虚拟机已经记录了该虚拟机的网卡mac地址对应于网卡eth0,在克隆出的虚拟机中由于mac地址发生改变,udev会 自动将该mac对应于网卡eth1。以此类推,udev会记录所有已经识别的mac与网卡名的关系,所以每次克隆网卡名称会自动加1,而其实kernel 仅仅只识别到一张网卡,跟网卡名相关的网络配置也未发生任何变化。

解决方案: 网络搜索发现在Debian etch下,udev将mac与网卡名称的对应关系保存在/etc/udev/rules.d/z25_persistent-net.rules中,在 克隆出的虚拟机中只要删除跟NAME="eth0"相关的行并重启系统即可。

例如在Debian etch中删除如下两行:

# PCI device 0x1022:0x2000(pcnet32)SUBSYSTEM=="net",DRIVERS=="?*",ATTRS{address}

=="00:0c:29:4c:46:01",NAME="eth0" 在我的fedora9 下修改/etc/udev/rules.d 下的 70-persistent-net.rules 文件 删除下面的内容:

# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rule written by anaconda) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:ad:06:2a", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

然后把eth1对应的那一行的"eth1"修改为"eth0"即可。

另外一种方法是:把里面的内容删除,然后重新启动,系统也会重新发现网卡硬件,重新 产生该文件。 ok!

 

上面是从网上找的解决方法,其中有一个地方没有写明白,就是删除了/etc/udev/rules.d/70-persistent-net.rules后需要重新配置/etc/sysconfig/network-script/ifcfg-eth0。ifcfg-eth0文件内容如下(我的):

其中有两个地方需要修改: HWADDR(mac地址)、IPADDR(IP地址)。IPADDR根据自己需要修改,HWADDR根据网上说的应该是在VMware在启动虚拟机的时候自动生成硬件地址,并记录在/etc/udev/rules.d/70-persistent-net.rules文件中。所以当删除了/etc/udev/rules.d/70-persistent-net.rules文件后,修改ifcfg-eth0文件中的IPADDR为自己需要地址并删除UUID(删除UUID可选原因见http://www.zhihu.com/question/28670717),然后重启系统,这时候ifconfig无法看到eth0,下面需要操作的是将自动生成的70-persistent-net.rules中的eth1改成eth0,然后将其中记录的对应的硬件地址复制到ifcfg-eth0的HWADDR上。重启系统,ifconfig应该就正常了