如何在不重新启动的情况下重新生成 70-persistent-net.rules?

如何在不重新启动的情况下重新生成 70-persistent-net.rules?

该文件/etc/udev/rules.d/70-persistent-net.rules是在 Linux 系统上使用 udev 自动生成的(如果该文件不存在),则在重新引导期间。但我想知道如何在不重新启动服务器的情况下创建此规则文件(使用命令)。

我在谷歌上搜索了一段时间,发现规则文件是由这个脚本生成的:

/lib/udev/write_net_rules

但是,不可能从命令行运行此脚本,因为(我假设)它希望由 udev 启动,并正确设置一些环境变量。手动启动它会打印错误消息“missing $INTERFACE”。即使我在脚本启动之前设置环境变量 INTERFACE=eth0,它仍然会打印错误“缺少有效匹配”。更不用说我有两个接口(eth0eth1),并且我希望为这两个接口生成规则文件。

我也在考虑触发这样的 udev 事件,希望它能从 udev 本身启动脚本,但没有任何改变:

udevadm trigger --type=devices --action=change

那么,有人知道如何/etc/udev/rules.d/70-persistent-net.rules在不重新启动的情况下重新生成文件中的持久网络规则吗?

答案1

根据手册页,--action=change这是 的默认值udevadm

   -c, --action=ACTION
       Type of event to be triggered. The default value is change.

因此你最好尝试--action=add一下。它应该有帮助:

/sbin/udevadm trigger --type=devices --action=add

答案2

在 Ubuntu Server 16.04LTS 中,70-persistent-net.rules 不存在。

我所做的就是运行:

ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules

然后使用创建文件

sudo vi /etc/systemd/network/10-internet.link

并添加以下内容

[Match] 
Path=pci-0000:(your device mac address)

[Link] 
Name=eth0 (or whatever you want to name it)

:wq保存文件

然后重新启动并调整您的 /etc/network/interfaces 文件。然后再次重新启动。

答案3

我遇到了同样的问题,但我注意到我仍然可以在列表中看到接口ip addr。我使用了以下内容(作为 root):

# ip addr # to get my mac addresses
# export INTERFACE=eth0; export MATCHADDR="xx:xx:xx:xx:xx:xx"; /lib/udev/write_net_rules
# replace the 00's with the real mac addr

对每个接口重复此操作。这用于“恢复”我的文件。 (注意:一次调用将列出所有接口+为匹配的接口添加重命名,因此我建议您在一次调用后查看输出文件)

操作系统与当前 UDEV 实现和支持脚本之间肯定存在差异。需要注意的是,当我成功完成此操作时,我使用的是 CentOS 6.8。

信用 - 我主要参考了这个网站。几个线程下面有一条评论谈论修改脚本,但我更喜欢使用环境变量,因为它更干净:https://access.redhat.com/discussions/1240213

相关内容