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

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

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

echo '#' > /etc/udev/rules.d/75-persistent-net-generator.rules

但是我读到过“我也可以编写自己的规则文件来为接口命名 - 如果已经设置了名称,持久规则生成器将忽略该接口”(/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

答案1

要回答您的具体问题,请将其添加到 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"

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

答案2

通常,在命名接口方面,我想要做的就是交换 eth0 和 eth1。我让系统创建文件/etc/udev/rules.d/70-persistent-net-rules,然后通过切换名称对其进行编辑,重新启动,然后在网络配置文件中配置接口节。虽然很繁琐,但可以完成。文件顶部有关于此内容的提示:

/etc/udev/rules.d/70-persistent-net.rules 
# 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:0x108c (e1000e) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:25:90:22:74:24", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

相关内容