如何为持久网络名称编写规则?

nde*_*mou 4 networking linux udev

我知道一个进程会根据 /lib/udev/rules.d/75-persistent-net-generator.rules 中的规则生成持久网卡名称。我也知道如何用一个简单的方法完全禁用这个过程

echo '#' > /etc/udev/rules.d/75-persistent-net-generator.rules
Run Code Online (Sandbox Code Playgroud)

但我读到我“也可以编写自己的规则文件来为接口命名——如果已经设置了名称,持久性规则生成器将忽略该接口”(/etc/udev/rules.d/README 确认这个有可能)。

您能否提供有关如何编写此类规则的说明和/或示例?(我主要关心 Debian/Ubuntu,而对 CentOS 则不太关心)。就我而言,我想添加如下规则:

  • MAC A 或 B 的卡应命名为 eth0
  • MAC C 或 D 卡应命名为 eth1
  • 其他任何东西都遵循默认命名方案

作为我为什么要编写自定义规则的一个具体示例:我有两台相同的服务器,一个板载 LAN 和一个 PCI LAN。如果发生硬件故障,我希望能够将磁盘从 HW#1 移动到 HW#2,并且 eth0 继续指向板载卡并将 eth1 继续指向 PCI 卡(没有人想弄乱中间的布线)很重要硬件故障恐慌)。我目前的解决方法有效,但工作量很大 [1] 所以我想知道编写自定义规则是否可以让我表达上述规则


[1] 在 HW#1 中安装操作系统并保留 /etc/udev/rules.d/70-persistent-net.rules 的副本。将磁盘移动到 HW#2 并保留同一文件的第二个副本。连接两个副本并手动编辑 NAME="ethX" 部分。用我的版本替换 /etc/udev/rules.d/70-persistent-net.rules。最后使用禁用自动创建新的 70-persistent-net.rules

echo '#' > /etc/udev/rules.d/75-persistent-net-generator.rules
Run Code Online (Sandbox Code Playgroud)

And*_*orn 5

要回答您的具体问题,请将其添加到persistent-net.rules:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="AA:AA:AA:AA:AA:AA", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="BB:BB:BB:BB:BB:BB", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="CC:CC:CC:CC:CC:CC", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth1"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="DD:DD:DD:DD:DD:DD", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth1"
Run Code Online (Sandbox Code Playgroud)

不理会persistent-net-generator.rules。udev 不会覆盖您手动添加的规则,但生成器规则会像往常一样为新卡添加新规则。

  • András,最好删除规则中的 KERNEL="eth*" 部分,否则它们将不适用于在引导期间内核为接口提供的名称与 eth* 不同的情况(在我的情况下是 p9p1。我删除了内核约束并按预期应用了规则)。 (2认同)