我已将接口名称更改eth1
为eth0
。现在如何udev
重新读取配置?
service udev restart
和
udevadm control --reload-rules
没有帮助。那么除了重启之外还有其他有效的方法吗?(是的,重启有助于解决这个问题)
是的,我知道我应该在命令前面加上
sudo
,但是我上面发布的任何一个命令都不会改变输出ifconfig -a
:我仍然看到eth1
,而不是eth0
。我刚刚更改了
NAME
udev-rule 行的属性。不知道这为什么无效。
没有任何错误执行我上面发布的两个命令时,它们只是没有改变ifconfig -a
输出中的实际接口名称。如果我执行重新启动 - 那么接口名称就会按预期更改。
为了开发目的,我编写了一些脚本来克隆虚拟机(VirtualBox 驱动)并以某种方式预先设置它们。
因此,我执行命令来克隆虚拟机,启动它,只要网络接口 MAC 发生变化 - 就会udev
将第二条规则添加到网络持久规则中。机器首次启动后,有 2 条规则:
eth0
,不存在,只要它存在于原始 VM 映像 MAC 中eth1
,它存在,但所有文件中的所有配置都引用了eth0
,所以对我来说不是那么好
因此,我sed
删除了带有 的行eth0
(在克隆的图像中它已过时且无用)并替换eth1
为。因此,目前我有有效的持久规则,但中eth0
仍然存在。eth1
/dev
问题是:我不想重新启动机器(这将花费另一段时间,这对于构建 VM 阶段来说不是一件好事)而只想使用/dev
一些命令重建它,这样我就可以使用 VM 而无需重新启动。
答案1
我不知道这是否有助于重新加载网络配置,但当我修改/etc/udev/rules.d/70-persistent-cd.rules
以更正 DVD 设备链接/dev/dvd1
时/dev/dvd
,我必须运行
sudo udevadm trigger
以获得新的链接创建。
答案2
您必须按照正确的顺序组合这里给出的所有建议:
- 破坏网络
service networking stop
- 从内核卸载驱动模块
- 找到模块的名称
lspci -v
并查找“正在使用的内核驱动程序:” modprobe -r <driver module>
- 找到模块的名称
- 重新加载 udev 规则
udevadm control --reload-rules
- 触发新规则
udevadm trigger
- 加载驱动程序
modprobe <driver module>
- 重启网络
service networking start
- (可选)重新运行启动之前
iptables
引用该接口名称的所有脚本。eth
我怀疑步骤 4 或步骤 5 并不是真正需要的,但这些步骤对我有用。您可以在步骤 4 之后检查步骤 2.1,看看触发命令是否已经执行了步骤 5,如果已经执行,请编辑此答案以反映您的发现。
答案3
我遇到了类似的问题。由于我不想花时间重新启动,所以我按照 Chris Wesseling 的建议运行了一个单行程序。
/etc/init.d/networking stop && modprobe -r tg3 && udevadm control --reload-rules && udevadm trigger && modprobe tg3 && /etc/init.d/networking start
在我使用 Ubuntu 12.04.02 服务器时,此方法有效。我的网卡使用的是 tg3 内核模块驱动程序,因此请将 tg3 更改为您的接口正在使用的模块。我在以下位置找到了我使用的模块/etc/udev/rules.d/70-persistent-net.rules
:
PCI 设备 0x14e4:/sys/devices/pci0000:00/0000:00:1c.4/0000:02:00.1 (tg3) <-网卡的内核模块驱动程序
我遇到的一个问题是路线不好,我用一个简单的路线添加命令解决了这个问题。感谢 Chris 的帮助!
答案4
sudo /etc/init.d/udev restart
应该可以解决问题。您尝试过的一些命令,如果使用 运行sudo
,可能也会有效。