我有一个带有 4 个以太网端口的 systemd 主机。
一个端口是为隔离容器保留的。它设置为:
# /etc/systemd/network/20-eth3-reserved.network
[Match]
Name=eth3
[Link]
Unmanaged=yes
我还为端口设置了别名,每个端口都在其链接文件上,例如
# /etc/systemd/network/12-alias-eth3.link
[Match]
MACAddress=42:42:42:42:42:03
[Link]
Name=eth3
我稍后会在 systemd-nspawn 容器中使用非托管接口
# /etc/systemd/nspawn/container1.nspawn
...
[Network]
Private=yes
VirtualEthernet=no
Interface=eth3
在某个时候(9 月),它运行良好。但几个月前,带有非托管设置的界面突然从系统中消失了。
nspawn 无法启动容器,提示未找到接口。
ip link
没有显示 eth3,也没有显示 mac 地址。
lshw
奇怪的是显示了所有管理端口,但是没有列出serial
已禁用端口的 macaddress(字段)。
dmesg
显示所有端口,并列出所有端口的正确 mac 地址,包括已禁用的端口。稍后,它还会显示正在应用的别名!
[Wed Nov 10 11:44:31 2021] igb 0000:03:00.3 eth3: renamed from enps0f4
因此,即使问题开始后,systemd 仍能正常看到该设备。
networkclt
显示所有管理端口以及lo
。unmanaged
但没有 eth3 的迹象。
如果有更好的方法来“保留”一个物理接口用于 nspawn,而不是Unmanaged=yes
答案1
如果这不是 systemd 现状的一个悲哀亮点,那么这一切都太可笑了。
VM 没有启动,或者它已启动而我试图重新启动它?无论哪种情况均未machinectl list
显示容器启动。
我发现内核看到的接口消失的唯一原因是它被移动到另一个命名空间,并且只有当 nspawn 将接口分配给正在运行的容器时才会发生这种情况。
但是没有启动容器,也没有办法调试/调查发生了什么,或者强制发布。
遗憾的是,networkctl
它对命名空间和 cgroup 的了解甚至比传统系统还要少ps
。如果接口连接到某个地方,那么它就等于消失了。
最后我不知道发生了什么,但系统更新和重启暂时解决了这个问题。