systemd 的“可预测接口名称”不可预测

use*_*738 6 networking debian linux-networking systemd

我在 Mac Pro 上作为 NAS/VM 主机运行 Debian 测试(内核 5.10.0-2-amd64/systemd 247.2-5)。今天,我添加了一个 Thunderbolt 3 卡(技嘉 Titan Ridge) - 并注意到了一些奇怪的事情:Mac 内置以太网端口(enp9s0 / enp10s0)的网络标识符更改为 enp14s0/enp15s0,具体取决于我的 iMac 是否已连接并开启在启动时通过 Thunderbolt。

这是什么原因造成的?我认为“新”命名方案优于旧“ethX”的优势在于设备名称是可预测的。这尤其令人讨厌,因为我必须在 GRUB 命令行中对接口名称进行硬编码,以便预引导 DHCP 工作,以便我可以解锁加密的根磁盘,而且我还需要用于桥接配置的稳定接口名称。

(另外:boltctl 和 tbtadm 都无法识别卡或连接的设备,但内核可以识别,并且网络连接工作正常。为什么?)

Nik*_*nov 9

这意味着这台机器上的硬件路由取决于是否有任何东西插入 Thunderbolt 插座。请记住,Thunderbolt 的逻辑接口是 PCIe,因此您实际上是将另一个设备插入计算机的系统总线。在您的 Mac 中,碰巧您在系统总线中间插入了一些东西,因此它会将所有东西“推”得更远。这就是 Apple 布局硬件总线的方式;他们没有为每个 Thunderbolt 端口保留一些设备编号池,甚至没有将每个端口作为 PCI 总线单独计算,而是让这些“端口”在系统中出现或消失,在某些内部枚举中将所有内容移过它们。

我在 PC 上也遇到过同样的问题,其中网卡设备号取决于内置声卡的情况:如果在 BIOS 设置中启用了声卡,它会占用 NIC 设备号,然后依次接收 NIC 本身。这就是该机器上硬件的布局方式。向硬件设计人员提问,他们为什么不设置“虚拟插槽中的设备”的设置开关状态,并让插槽本身出现或消失。

Systemd 的方案有它的优势,但是它完全依赖于设备路径,对于 PCI 来说就是它的设备号和功能;因此,如果设备号发生变化,systemd 会认为这是另一张卡。因此,此方案与设备编号可能更改的环境无关,因此 USB 和 Thunderbolt 是可能失败的特定地方。