首页 > 代码库 > 克隆主机网卡配置

克隆主机网卡配置

环境:centos 6.7

最近在学习Linux下Spark集群的搭建,在用vmware虚拟了两台机器后,发现克隆机的网络无法使用,出现:VMware 下LINUX出现:Device eth0 does not seem to be present, delaying initialization.错误。在google了一下之后成功解决,在此记录下以便日后复习。
原因

google出的原因:

当使用克隆后的虚拟机时发现原来在基本系统中的网卡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 仅仅只识别到一张网卡,跟网卡名相关的网络配置也未发生任何变化。

解决方案
1. 识别eth0

修改/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对应的那一行的NAME=″eth0″修改为NAME=″eth0″即可。

注:也可以直接删除/etc/udev/rules.d下的70-persistent-net.rules文件,然后reboot此系统,系统重新发现网卡硬件,重新产生该文件。
2. 配置MAC地址

首先ifconfig -a命令看一下HWADDR的值和文件/etc/sysconfig/network-scripts/ifcfg-eth0中的HWADDR是否相同。如果不相同就改为ifconfig -a显示的值。

3. 重启机器

使用reboot命令重启机器,然后使用ifconfig -a查看网路状态,一切正常。

其他:

UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成UUID的API。虚拟机同样会有一个UUID,而且这个UUID是唯一的。虚拟机的UUID一般和虚拟机配置 文件的位置和物理主机有关。当我们对一个虚拟机系统做移动操作的时候,我们不需要新建一个UUID。让我们复制一个虚拟机的时候我们应该选择建立一个新的UUID,来保证此虚拟机的唯一性而当我选择了I copied it的时候,VM自然会为我新建一个UUID,一些新的Linux版本是把以太网与Mac地址绑定,当新的UUID建立的时候,Mac地址就被改变了,但由于eth0设备所装载的配置与读取默认配置的Mac地址不一致 。

克隆主机网卡配置