udev:即使在多用户目标开始后,也可能会重命名网卡名称?

udev:即使在多用户目标开始后,也可能会重命名网卡名称?

我正在调查 Linux 服务器(CentOS7.9 内核 5.4.179-1.el7.elrepo.x86_64)是否存在一个奇怪的问题:有一个非常正常的服务:

# /etc/systemd/system/test.service
[Unit]
Description=tet
Before=frr.service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/etc/test.sh

[Install]
WantedBy=multi-user.target

test.sh 只是配置网络,例如(简化的伪代码)

show nic name by mac

它输出现代网卡名称,例如enp1s0f0,而不是旧式名称eth1等,该服务在所有其他服务器上运行良好。

但似乎有一天输出了一个旧式的网卡名称,例如eth1,但我无法追溯到那个时间找到相关日志。

我确实从dmesg找到了网卡重命名日志,例如

[Fri Sep 15 00:38:24 2023] bnxt_en 0000:01:00.1 eth1: Broadcom BCM57414 NetXtreme-E 10Gb/25Gb Ethernet found at mem 4000200000, node addr 11:11:11:11:11:11
[Fri Sep 15 00:38:24 2023] bnxt_en 0000:01:00.1 enp1s0f1: renamed from eth1

所以我猜测网卡名称有可能是eth1。

我想知道即使在 multi-user.target 开始之后,网卡重命名也可能发生吗?(multi-user.target 是大多数服务所附加的)

网卡重命名发生在systemd-udevd.service中,它启动得比较早,但它不断监听硬件事件,因此看起来网卡出现的速度可能比预期慢,并且即使在test.service开始后也可能被重命名。

如果这是真的,那么似乎我必须使用

udevadm settle

确保没有挂起的 udev 事件,因此可以自动等待 nic 重命名。

相关内容