我正在尝试为 Linux Mint 21.3 PC 上的网络接口分配永久名称。这台特定的 PC 经常添加和移除 PCIe 设备,因此“可预测”的命名方案enpXs0
很不方便。
这台 PC 有两个以太网控制器,一个在主板上,一个在 PCIe 附加卡上。我能够lan0
使用 udev 规则和 systemd 来定义主板以太网端口,但尝试使用相同方法定义 PCIe 附加卡lan1
失败,而是将其分配为enpXs0
。
这是 udev 规则文件:
#/etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="<mac for motherboard lan0>", NAME="lan0"
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="<mac for PCIe lan1>", NAME="lan1"
这是 systemd 链接。此示例适用于lan0
,但文件结构与 相同lan1
:
#/etc/systemd/network/10-persistent-lan0.link
[Match]
MACAddress=<mac for motherboard lan0>
[Link]
Name=lan0
我可以确定这两张卡之间唯一有意义的区别是它们的物理外形尺寸。这当然意味着它们也具有不同的 PCIe 地址。PCIe 附加卡 ( lan1
) 最终将配置静态 IP 并设置为响应小型专用网络上的 RARP 请求,但所有这些配置都设置了不同的接口名称(不是分配的或目标)——认为 RARP 是在 上设置的enp2s0
,并且卡最初被分配enp3s0
,然后尝试重命名为lan1
——所以我不明白为什么这会有所不同。
什么会导致附加卡的行为与集成卡不同?我查看了其他几个与 PC 上所有接口的命名问题有关的问题,但没有遇到任何专门处理这些问题的主题
答案1
根据@u1686_grawity,对日志进行一些挖掘后发现了来自 PCIe 以太网卡使用的 r8169 驱动程序的内核消息。
r8169 0000:02:00.0: can't read MAC address, setting random one
这是一个已知错误对于 kernel 中的此驱动程序5.15.x
,我的系统正在运行它,并且似乎已在 kernel 中修复5.16
。我不确定这是否完全解决了问题,因为随机 MAC 似乎通过重启保留(而不是关机和全新启动),但也许这种交互就是无法正确分配它的原因。
作为一种解决方法,我现在改为根据驱动程序设置接口,因为这是这台 PC 中唯一使用 r8169 驱动程序的设备。有效的 udev 规则是:
#/etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="<mac for motherboard lan0>", NAME="lan0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="r8169", NAME="lan1"
答案2
所引用的错误是在 5.16 中引入的,并在 5.16-rc 版本中修复。在这种情况下,供应商可能忘记使用有效的 MAC 地址对 NIC 进行编程。