将临时服务器的硬盘驱动器移动到另一个兼容硬件(64 位、同一处理器“一代”、笔记本电脑 -> 台式机)配置后,网络无法启动。
具体来说:
ifconfig
只显示lo
sudo service networking restart
显示:
-
stop: unknown instance:
networking stop/waiting
很明显,系统和/或内核中的某些内容对于新的硬件设置配置错误。
如何检测到底出了什么问题并启用eth0
?
有问题的系统是 Ubuntu 14.04 Server 发行版,但我怀疑问题是普遍存在的。
答案1
克隆 Linux 系统时需要注意的事情之一是 udev 的持久网络设备命名规则。
udev 可以创建并更新该文件/etc/udev/rules.d/70-persistent-net.rules
以将 MAC 地址映射到接口名称。它通过脚本执行此操作/lib/udev/write_net_rules
。每个 MAC 地址(有一些例外;请参阅 参考资料/lib/udev/rules.d/75-persistent-net-generator.rules
)都映射到名为(默认情况下)eth 的接口n, 在哪里n从 0 开始并上升。一个例子:
# 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 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:de:ad:be:ef",ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
如果您想更改映射,可以编辑条目,并且不是自动从此文件中删除。所以接口名称是稳定的即使您添加额外的 NIC 或删除不需要的 NIC。另一方面,正如您所发现的,如果您通过克隆将此文件复制到另一个系统,新硬件的接口将是添加对此文件,使用第一个可用的接口名称,例如 eth1、eth2 等,并且 eth0 将引用新系统上不存在的 MAC 地址。
在您移植磁盘的情况下,您可以注释掉包含旧硬件接口的行,并编辑由于新硬件而添加的错误条目以具有所需的接口名称(或仅删除它们),然后重新启动。我最初建议将它们注释掉,以便当您将磁盘移回旧硬件时很容易恢复,但 @Guido van Steen 提供了一个更简单的解决方案:将文件 mv70-persistent-net.rules
到其他内容(但如果它位于新名称中,请小心新名称)同一目录!)并重新启动。
答案2
基于 @mark-plotnick 的评论:新硬件具有不同的 mac 地址。旧的 mac 地址仍然硬编码在/etc/udev/rules.d/70-persistent-net.rules
.您只需重命名该文件即可。在这种情况下,重新启动将使用新的 MAC 地址重新创建该文件。