最近在虚拟机上安装了CentOS 6.2。为了以后使用方便, 对虚拟机进行克隆。当使用克隆后的虚拟机时,发现原来在操作系统中的网卡eth0到了新系统却没有了,使用 ifconfig -a会发现只有eth1。因为源系统很多网络配置都是基于eth0的,eth1没有网络相关的配置。如果每次对虚拟机进行克隆后都要修改网卡配置,显示是非常不方便的。 而且还发现一个规律,基于此克隆虚拟机继续克隆新的虚拟机,网卡的标识会自动加1(即第二次克隆后会变成eth2)。但使用dmesg命令却显示内核只识别到网卡eth0。
原来很多Linux distribution使用udev来动态管理设备文件,并根据设备的信息对其进行持久化命名。例如在Debian eth中,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的文件中,例如在/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="eth1"
我们只需要把"eth1"修改为"eth0"即可;或者把/etc/udev/rules.d/z25_persistent-net.rules里面的内容全部删除,然后重新启动计算机,系统会重新产生该文件的内容。
PS: 如果你修改了虚拟机的网卡物理地址,系统也会在/etc/udev/rules.d/70-persistent-net.rules追加一条eth1的记录。
来源:oschina
链接:https://my.oschina.net/u/103999/blog/120416