HD移植后没有eth0

mik*_*łak 4 networking ubuntu configuration

将临时服务器的硬盘驱动器移动到另一个兼容硬件(64 位,相同的处理器“代”,笔记本电脑-> 台式机)配置后,网络无法启动。

具体来说:

  • ifconfig 只显示 lo
  • sudo service networking restart 显示:

——

stop: unknown instance:
networking stop/waiting
Run Code Online (Sandbox Code Playgroud)

很明显,系统和/或内核中的某些内容为新硬件设置配置错误。

如何检测到底出了什么问题并启用eth0

有问题的系统是 Ubuntu 14.04 服务器发行版,但我怀疑问题很普遍。

Mar*_*ick 7

克隆 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"
Run Code Online (Sandbox Code Playgroud)

如果您想更改映射,可以编辑条目,并且不会自动从该文件中删除条目。因此,即使您添加额外的 NIC 或删除不需要的 NIC,接口名称也是稳定的。另一方面,正如您所发现的,如果您通过克隆将此文件复制到另一个系统,新硬件的接口将添加到此文件中,使用第一个可用的接口名称,例如 eth1、eth2 等,而 eth0 将引用新系统上不存在的 MAC 地址。

在您移植磁盘的情况下,您可以注释掉包含旧硬件接口的行,并编辑由于新硬件而添加的错误条目以获得所需的接口名称(或只是删除它们),然后重新启动。我最初建议将它们注释掉,以便当您将磁盘移回旧硬件时很容易恢复,但 @Guido van Steen 提供了一个更简单的解决方案:将70-persistent-net.rules文件mv到其他内容(但如果新名称在相同的目录!)并重新启动。


Gui*_*een 5

基于@mark-plotnick 的评论:新硬件具有不同的 mac 地址。旧的 mac 地址仍然硬编码在/etc/udev/rules.d/70-persistent-net.rules. 您可以简单地重命名此文件。在这种情况下,重新启动将使用新的 mac 地址重新创建文件。