使用 NFS 根和可预测网络接口,我发现以太网接口名称有所不同:内核配置的一个接口名为 eth0,其他接口根据网络设备命名方案命名。所以,同一个Image在本地启动和通过网络启动时,相同接口的最终名称是不同的。这些似乎会干扰某些配置,例如我有一个使用 [eth0] 的 ptp4l.service 配置,因此我必须使用 [end0] 和 [eth0] 创建单独的配置以进行本地和网络启动,这似乎很不方便。
使用 NFS root 时,您有一个 NFS root 所依赖的以太网接口。所以它是由Kernel配置和命名的,并且不能被设置下来。
使用 NFS root systemd-udevd.service 显示它无法重命名 eth0:
systemd-udevd[180]: eth0: Network interface 'eth0' is already up, refusing to rename to 'end0'.
但 eth0 已经有 ID_NET_NAME_ONBOARD
# udevadm test-builtin net_id /sys/class/net/eth0 2> /dev/null
ID_NET_NAMING_SCHEME=v252
ID_NET_NAME_MAC=xxxxxxxxxxxxx
ID_NET_NAME_ONBOARD=end0
我不考虑禁用可预测的网络接口名称。
那么,有没有办法在内核启动期间设置以太网接口名称或强制 systemd-udevd 使用 ID_NET_NAME_ONBOARD 重命名已配置的接口?
答案1
或强制 systemd-udevd 使用 ID_NET_NAME_ONBOARD 重命名已配置的接口
你可以很容易地做到这一点,但你会看到内核拒绝更改名称,并且当 systemd-udevd 不是错误的一方时,试图击败 systemd-udevd 是没有意义的。
“可预测的网络接口名称”并没有什么魔力。这只是一个 udev 规则,udev 使用与ip link set
重命名接口相同的方法。
也许可预测的网络接口名称已使用 NFS 根进行了测试,并且针对这种情况有正确的解决方案
systemd/udev 推荐的通常解决方案是开始使用 initramfs – initramfs 会在用户空间中执行此操作(然后也会挂载 NFS 根),而不是让内核在任何进程启动之前配置网络,这意味着initramfs 可以在继续进行网络配置之前启动 systemd-udevd 或执行任何其他重命名。
最新版本的 systemd-networkd 甚至可以识别内核命令行网络参数,以便更容易将其包含在 initramfs 中。