我有一个可启动的 Linux 记忆棒,可以在很多不同的 PC 上使用(但型号和配置都相同)。问题是 udev 正在重命名 eth 接口,因此eth0
最后一台 PC 上的内容突然变成了 ethX,其中 X=1..inf。这会导致 if-up (由 ifplugd 调用)失败,因为/etc/network/interfaces
只指定如何启动eth0
:
auto eth0
iface eth0 inet dhcp
这是一个众所周知的问题;我用谷歌搜索发现这是由于 MAC 地址更改引起的,可以通过删除/etc/udev/rules.d/70-persistent-net.rules
.但这只有在重新启动后才有效,这很不方便,而且应该是不必要的,因为我知道我想要什么行为。
我想要的是非持久net 规则,或者是一个/etc/network/interfaces
适应不断变化的 eth 名称的脚本,或者可以使用 ifplugd 来完成。实现这一目标的最佳方法是什么?
发行版:Ubuntu 8.04。
答案1
持久网络规则是由/lib/udev/rules.d/75-persistent-net-generator.rules
(或类似的东西,我正在寻找较新的 Debian 机器)生成的。
如果 Ubuntu 8.04 在 /etc/udev/rules.d 中仍然有该生成器脚本,您可以将其删除。
否则,我相信在 /etc/udev/rules.d 中放置一个空白文件将覆盖 /lib 中的文件。
您还可以编写自己的规则文件来为接口命名 - 如果已经设置了名称,持久规则生成器将忽略该接口。
答案2
我听从了 derobert 的建议,删除了/etc/udev/rules.d/75-persistent-net-generator.rules
,并且还编辑了已经生成的内容/etc/udev/rules.d/70-persistent-net.rules
,使这些行看起来像这样:
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{type}=="1", KERNEL=="eth*", NAME="%k"
请注意%k
in NAME
,这意味着使用内核名称。