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

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

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

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

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

答案1

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

我在 PC 上也遇到过同样的问题,网卡设备号取决于内置声卡的状态:如果在 BIOS 设置中启用了声卡,则它会获取 NIC 的设备号,然后按顺序接收 NIC 本身。这就是该机器上的硬件布局方式。请问硬件设计师,为什么他们不将设置切换为“虚拟插槽中的设备”的状态,而是让插槽本身出现或消失。

Systemd 的方案有其优势,但它完全取决于设备路径,对于 PCI 来说,它是设备编号和功能;因此,如果设备编号发生变化,systemd 会认为这是另一张卡。因此,这种方案不适用于设备编号可能发生变化的环境,因此 USB 和 Thunderbolt 是它可能失败的特定地方。

相关内容