该文件/etc/udev/rules.d/70-persistent-net.rules
是在 Linux 系统上使用 udev 自动生成的(如果该文件不存在),则在重新引导期间。但我想知道如何在不重新启动服务器的情况下创建此规则文件(使用命令)。
我在谷歌上搜索了一段时间,发现规则文件是由这个脚本生成的:
/lib/udev/write_net_rules
但是,不可能从命令行运行此脚本,因为(我假设)它希望由 udev 启动,并正确设置一些环境变量。手动启动它会打印错误消息“missing $INTERFACE”。即使我在脚本启动之前设置环境变量 INTERFACE=eth0,它仍然会打印错误“缺少有效匹配”。更不用说我有两个接口(eth0
和eth1
),并且我希望为这两个接口生成规则文件。
我也在考虑触发这样的 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