我使用引导选项biosdevname=1 net.ifnames=1
以获得一致、可预测的设备名称。我开始注意到一个问题,在某些情况下,网络设备名称不一致。例如,如果我进入 dracut 调试 shell 并查看 rdsosreport.txt 的输出,我会看到:
+ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: p3p1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether a8:b4:56:50:97:08 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether a8:b4:56:50:97:09 brd ff:ff:ff:ff:ff:ff
请注意,混合了一致 (p3p1) 和传统风格 (eth1) 命名。但是,如果我查看 dracut 调试 shell 中的接口,我会看到:
initqueue:/run/initramfs# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: p3p1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether a8:b4:56:50:97:08 brd ff:ff:ff:ff:ff:ff
3: p3p2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether a8:b4:56:50:97:09 brd ff:ff:ff:ff:ff:ff
p3p1/p3p2 是正确的预期名称。出于某种原因,在 initrd 序列的早期,它们以混合格式出现。我的假设是这里正在进行某种比赛,并且给了更多时间,它(udev?)进入正确的状态,但我不确定它到底在哪里。不幸的是,这给我们的一些自动化服务器构建带来了问题,因为服务器在(安装后)首次启动之后出现,并试图eth1
在真正的接口名称为p3p2
.
我一直在挖掘 dracut 模块,试图找出问题所在,但还不能最终确定,所以寻找建议。
此外,这种行为并非一直发生。相同的服务器,启动相同的映像有时可以正常工作,而有时会出现这种混合命名行为。这也告诉我这是某种比赛——有时比赛赢了,有时输了。
在这里回答我自己的问题。事实证明,这个问题(部分)是自己造成的。
我们无法控制的部分:
使用引导选项
biosdevname=1
有可能在接口重命名阶段引起竞争。如果你可以没有它,那么简单地使用net.ifnames=1 biosdevname=0
可能会更可取,即使结果名称“不太漂亮”。我们可以控制的部分:
我们的网站使用自定义修改的 dracut
40network
模块。我们的版本所做的主要事情之一是它探索/sys/class/net/
寻找可行接口以自动添加到绑定的内容。(我们并不总是事先知道设备名称,这就是模块需要一些逻辑来自行识别它们的原因)。上面提到的竞争可能会导致/sys/class/net/
. 解决方案很简单:在探测之前向脚本添加 5 秒睡眠/sys/class/net/
。这给了biosdevname
(希望绰绰有余)时间来完成重命名设备。到目前为止的测试似乎 A-OK。