如何解决Ubuntu或Fedora虚拟机重启网络时出现的“No such device eth0”或“Job failed”错误。
首先声明:下面是出现在Ubuntu和Fedora下面的问题,如果其它虚拟机也出现这样的问题,也可参看这些方法解决。
1. 错误症状
(1)Ubuntu下
用命令service networking restart重启网络或ifconfig eth0 up重启网卡时出现下面错误:
eth0: ERROR while getting interface flags: No such device
(2)Fedora下
用命令systemctl restart network.service重启网络时出现下面错误:
Job failed. See system journal and 'systemctl status' for details.
2. 探究原因
在本地为用VMware为Linux创建虚拟机后,可能有两个原因导致网卡启动无效,从而显示上面的错误:
(1)创建一个新的克隆镜像,将该虚拟机拷贝到别的机器上使用
(2)你本地机后来重装了主机系统(我是这种情形)
这是什么原因呢?
其实原因就在于:新克隆的或重装主机系统后的虚拟机镜像的网卡MAC地址已经变更。
打开虚拟机的.vmx文件,ethernet0.generatedAddress项记录了该虚拟机的mac地址。
(1)Ubuntu下
用ifconfig -a查看所有适配器信息,发现原来的eth0已经没了(有的),Ubuntu已经将新网卡重新命名为eth7(也可能命名为其它),怪不得出现“No such device eth0”错误了,eth0的确已经不在了。怎么解决?首先我们需要知道跟MAC地址相关的配置文件在哪?
a. Ubuntu保存网卡mac地址和设备名的配置文件在
/etc/udev/rules.d/70-persistent-net.rules
b. 网卡的网络配置文件大家都知道,在
/etc/network/interfaces
该配置文件中只有原来eth0的配置信息。
参考文献里给出了三种解决方案:
解决方案1 — 移动/删除rules文件
sudo mv /etc/udev/rules.d/70-persistent-net.rules /etc/udev/rules.d/70-persistent-net.rules.bak
重启后Ubuntu会创建新的rules文件,将新网卡辨认为eth0,沿用原eth0的网络配置。 如果网络配置是自动获取IP,则无需做其他修改。
解决方案2 — 修改rules文件
sudo vi /etc/udev/rules.d/70-persistent-net.rules
原内容如下:
# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:36:xx:xx", ATTR{type}=="1", NAME="eth7"
修改eth7的配置,将其改为eth0,如果原来已经有eth0,则删除eth7配置,用eth7的mac地址替代eth0的mac地址。
# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*",
ATTR{address}=="00:0c:29:36:xx:xx", ATTR{type}=="1", NAME="eth0"
重启后Ubuntu同样会将新网卡辨认为eth0,沿用原eth0的网络配置。 如果网络配置是自动获取IP,则无需做其他修改。
解决方案3 — 修改interfaces文件
sudo vi /etc/network/interfaces
将所有的eth0替换为eth7。 如果是静态地址则同时修改相应设置。
(2)Fedora下
根据错误信息,我们可以看下具体的错误提示是什么?
cat /var/log/messages | grep network