我在 Mac Pro 上作为 NAS / VM 主机运行 Debian 测试(内核 5.10.0-2-amd64 / systemd 247.2-5)。今天,我添加了一个 Thunderbolt 3 卡(Gigabyte Titan Ridge) - 并注意到一些奇怪的事情:Mac 的内置以太网端口(enp9s0 / enp10s0)的网络标识符更改为 enp14s0/enp15s0,具体取决于我的 iMac 是否已连接并打开电源在启动时通过 Thunderbolt。
这是什么原因造成的?我认为“新”命名方案优于旧“ethX”的优势在于设备名称是可预测的。特别烦人,因为我必须在 GRUB 命令行中对接口名称进行硬编码,以便预引导 DHCP 工作,以便我可以解锁加密的根磁盘,而且我还需要稳定的接口名称来配置网桥。
(另外:boltctl 和 tbtadm 都不识别卡或连接的设备,但内核可以识别,并且网络连接工作正常。为什么?)
这意味着这台机器上的硬件路由取决于是否有任何东西插入 Thunderbolt 插座。请记住,Thunderbolt 的逻辑接口是 PCIe,因此您实际上是将另一个设备插入计算机的系统总线。在你的 Mac 中,你碰巧在系统总线的中间插入了一些东西,所以它把所有东西都“推”到了更远的地方。这就是 Apple 布置硬件总线的方式;他们没有为每个 Thunderbolt 端口保留一些设备编号池,甚至没有将每个端口单独计算为 PCI 总线,而是让这些“端口”在系统中出现或消失,在一些内部枚举中将所有内容转移到它们之外。
我在PC上也遇到过同样的问题,网卡设备号取决于内置声卡的情况:如果在BIOS设置中启用了声卡,它需要网卡设备号,然后网卡本身依次接收。这就是硬件在该机器上的布局方式。向硬件设计人员提问,为什么他们没有设置“虚拟插槽中的设备”的切换状态,并让插槽本身出现或消失。
Systemd的方案有它的优点,但是它完全依赖于设备路径,对于PCI来说就是它的设备号和功能;所以,如果设备号发生变化,systemd 认为这是另一张卡。因此,此方案与设备编号可能发生变化的环境无关,因此 USB 和 Thunderbolt 是可能出现故障的特殊地方。