官方论坛产品帮助刷图视频问题反馈

Hyper-V中的Linux虚拟机复制找不到网卡的解决过程

发表于 秦海传媒

    一、遇到什么问题
    由于需要多个基础环境,所以复制虚拟磁盘到一个新的目录PC-L142,并从该磁盘创建虚拟机。进入系统发现不能上网。ifconfig发现只有lo没有eth0;使用ifconfig -a会发现只有eth1。重新尝试从安装好的硬盘创建差异磁盘。同样不能上网,表现一样。
    二、怎样解决
    查找资料显示Vmware也有这个问题,所以解决方法为

    rm /etc/udev/rules.d/70-persistent-net.rules

    三、为什么会出现这样的错误,这样做的原因是什么
    为什么会产生这个问题呢,还需要从UUID谈起(UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成UUID的API ),虚拟机同样会有一个UUID,而且这个UUID是唯一的。
    虚拟机的UUID一般和虚拟机配置文件的位置和物理主机有关。当我们对一个虚拟机系统做移动操作的时候,我们不需要新建一个UUID。让我们复制一个虚拟机的时候我们应该选择建立一个新的UUID,来保证此虚拟机的唯一性

    而当我选择了I copied it的时候,VM自然会为我新建一个UUID,一些新的Linux版本是把以太网与Mac地址绑定,当新的UUID建立的时候,Mac地址就被改变了,但由于eth0设备所装载的配置与读取默认配置的Mac地址不一致。
    另外的解决方案:

    cd /etc/sysconfig/network 或者
    cd/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, and change only the value of the NAME= key.

    # PCI device 0x1011:0x0009 (tulip)
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:15:5d:07:68:27", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

    将这个/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″即可。
    另外一种方法是:把里面的内容都删除,然后重新启动,系统也会重新发现网卡硬件,重新产生该文件。

    VMWare克隆或复制Linux虚拟机后无法上网的解决

    我拷贝了过来的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后可以正常上网了。

  • 此条目发表在 服务器配置, 未分类 分类目录。将固定链接加入收藏夹。

Google ADs

除非另有声明,本站文章遵循知识共享署名-非商业性使用 2.5 中国大陆许可协议。 Copyright © 2008-2012 99288.NET.CN.