因此,我遇到了使用 systemd 时 eth0 被命名为其他名称 (enpXsX) 的常见问题。因此,我尝试创建文件 /etc/udev/rules.d/10-network.rules。这很好用。问题是我需要获取我的服务器的精确副本,并使用 SD 卡定期将其移动到多个物理服务器之间进行测试。由于 10-network.rules 需要 MAC 地址,因此每次我将卡插入新设备时,它都会不断变化。我创建了一个可以自动更改它的脚本,并在启动时将其作为服务 (changeMAC.service) 运行。
此服务运行良好。不幸的是,尽管在 networking.service 启动之前更改了 MAC 地址,但网络始终失败。为了使其正常工作,我必须重新启动。我需要它在第一次启动时正确启动。
使用 systemd-analyze 图,我可以看出 changeMAC.service 实际上在 networking.service 之前完成。我认为问题可能是它需要更早启动。但是我目前有一张 SD 卡,它可以一次性启动。但是当我将该图像放在我的计算机上以在 VirtualBox 中运行时,它又需要重新启动。我找不到 SD 卡和 vhd 之间的区别。
我还尝试使用 ifup、ifdown、/etc/init.d/networking restart、systemctl start networking.service 来强制网络重新评估其情况并查看 10-network.rules。前三个会产生错误并且不会执行,最后一个会执行但 networking.service 会再次无法启动。
因此,我需要知道如何让 changeMAC.service 及时运行,以便需要 10-network.rules 的人可以获得它,或者我需要知道如何强制需要 10-network.rules 的人重新启动而无需重新启动整个系统。
答案1
您可以添加一个选项来GRUB_CMDLINE_LINUX_DEFAULT
关闭/etc/default/grub
预测名称。
GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0"
您可以将其他选项保留在该行上。这样,您就不必担心10-network.rules
文件中有设置的 MAC 地址。
修改该行之后,重新启动主机之前,请确保更新 grub。
sudo update-grub
希望这可以帮助!