VMWare克隆或复制Linux虚拟机后eth0找不到的解决方案

原文链接:
http://user.qzone.qq.com/554170166/blog/1304862080#!app=2&via=QZ.HashRefresh&pos=1304862080
http://www.heiqu.com/show-72766-1.html


1.遇到什么的问题(What)
在Vmware装了Ubuntu 9.04 Server,今天在启动的时候,发现找不到网卡eth0,
在输入ifconfig –a的时候,也没有任何Ethnet的信息,而输入eth0 down 的时候,提示我no device found(设备没法找到),我检查了VMware的EtherNET配置的时候,仍旧是NAT网络设置,和我原来的一样
没有了网卡,我就无法通过SecureCRT来连接Ubuntu,如果每次都要来到VMware来输入命令,很麻烦
2.怎样解决(How)
回想了在启动VMware的时候,系统提示我的Ubuntu文件被移动(位置被改变了),让我确认是moved还是copy的,我当时候选择了默认的(copy)

(This virtual machine may have been moved or copied. 
In order to configure certain management and networking features VMware Workstation needs to know which. 
Did you move this virtual machine, or did you copy it? 
If you don''t know, answer "I copied it".)
根据这个信息,在google 搜索了 copy or moved vmware linux,在VMware的官方论坛找到了这个帖子 
lost eth0 when using a copied ubuntu-server vm
,里面提到了多种解决方案,我最终是选择了sudo rm /etc/udev/rules.d/70-persistent-net.rules ,执行该命令后,重启ubuntu (sudo reboot),然后ifconfig ,出现了ip地址,问题得到解决
3.为什么会出现这样的错误,这样做的原因是什么(Why?)
为什么会产生这个问题呢,还需要从UUID谈起(UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成UUID的API ),虚拟机同样会有一个UUID,而且这个UUID是唯一的。 
虚拟机的UUID一般和虚拟机配置文件的位置和物理主机有关。当我们对一个虚拟机系统做移动操作的时候,我们不需要新建一个UUID。让我们复制一个虚拟机的时候我们应该选择建立一个新的UUID,来保证此虚拟机的唯一性

而当我选择了I copied it的时候,VM自然会为我新建一个UUID,一些新的Linux版本是把以太网与Mac地址绑定,当新的UUID建立的时候,Mac地址就被改变了,但由于eth0设备所装载的配置与读取默认配置的Mac地址不一致。
另外的解决方案:进入 /etc/sysconfig/network 或者/etc/sysconfig/network-scripts ,编辑eth0配置文件。比较在配置文件里面的Mac地址与输入ifconfig 输出的mac地址,如果两者不一致,统一为ifconfig输出的mac地址,然后重启

sudo rm /etc/udev/rules.d/70-persistent-net.rules 能够成功的原因:
该文件的内容:
# This file was automatically generated by the /lib/udev/write_net_rules
# program run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single line.
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rule written by anaconda)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:d2:3f:2c", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:87:43:18", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:87:43:22", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"
# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:c8:3a:15", ATTR{type}=="1", KERNEL=="eth*", NAME="eth3"

将这个/etc/udev/rules.d/70-persistent-net.rules删除,重启,网卡eth0成功启动,并重新生成/etc/udev/rules.d/70-persistent-net.rules文件


VMWare克隆或复制Linux虚拟机后eth0找不到的解决方案

现象描述:

最近装了虚拟机系统是 Fedora,为了以后使用方便对虚拟机进行克隆或复制。当使用克隆后的虚拟机时发现原来在基本系统中的网 卡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 0×1022:0×2000(pcnet32)SUBSYSTEM==”net”,DRIVERS==”?*”,ATTRS{address}==
“00:0c:29:4c:46:01″,NAME=”eth0″

在我的Fedora 下修改/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!





我拷贝了过来的Linux虚拟机无法上网,我用ifconfig命令查询了一下发现只有eth1和lo设备,没有eth0。于是我在Google上搜索了一下,找到了下面这篇文章(http://blog.chinaunix.net/u3/97076/showart_2015984.html)。
VMWare克隆或复制Linux虚拟机后eth0找不到的解决方案
现象描述:
最近装了虚拟机系统是 fedora9,为了以后使用方便对虚拟机进行克隆或复制。当使用克隆后的虚拟机时发现原来在基本系统中的网卡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"即可。
另外一种方法是:把里面的内容都删除,然后重新启动,系统也会重新发现网卡硬件,重新产生该文件。

这里补充一点:
用下面命令来实现上述第二种方法也是一样的:
cd /etc/udev/rules.d
sudo rm *-net.rules    //删除
sudo reboot
本人在用上述方法操作之后,再用ifconfig查看,确实找到了eth0设备,但没有ip地址。
接下来用ifconfig命令设置ip地址,一些相关命令如下:
ifconfig eth0 192.168.0.10 将采用默认子网掩码
ifconfig eth0 192.168.0.10 netmask 255.255.255.252 (手动定义子网掩码)(重启后无效)
ifconfig eth0 down(停用网卡)
ifconfig eth0 up(激活网卡)
service network restart(重启网络服务)
/etc/rc.d/init.d/network restart(同上)
我用ifconfig eth0 192.168.0.10 netmask 255.255.255.252 设置完ip,然后执行service network restart。
系统提示:eth0已有的MAC地址和系统要设置的不符,设置MAC地址失败。
因为网卡配置信息保存在/etc/sysconfig/network-scripts/ifcfg-eth0配置文件中,所以就去看看它吧。
文件的基本内容如下:
DEVICE=eth0(哪张网卡)
ONBOOT=yes
BOOTPROTO=static(静态ip状态设置)
BOOTPROTO=dhcp(dhcp获取)
IPADDR=192.168.1.8(静态ip地址)
NETMASK=255.255.255.0
GATEWAY=192.168.1.1(网关)
HWADDR=00:0C:29:96:38:F8(修改mac地址)(永久有效)
我把文件的内容进行了删减,只留下
DEVICE=eth0
BOOTPROTO=dhcp
HWADDR=00:0C:29:96:38:F8(修改为提示信息中指出的系统期望赋给eth0的MAC)
ONBOOT=yes
重启Linux后可以正常上网了。


©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页