如何在不重启的情况下重新加载 udev 规则?

dai*_*isy 261 kernel udev

应该如何重新加载 udev 规则,以便新创建的规则可以运行?

我正在运行 Arch Linux,但udevstart这里没有命令。

还检查了/etc/rc.d,那里没有 udev 服务。

Ign*_*ams 308

# udevadm control --reload-rules && udevadm trigger
Run Code Online (Sandbox Code Playgroud)

  • @Nils 实际上,您可能需要`udevtrigger`(或者更确切地说是大多数发行版中的`udevdm trigger`)(即,或者将设备拔出并备份)。`--reload-rules` 几乎总是无用的,因为它会自动发生。 (41认同)
  • `udevadm trigger` 在 CentOS 6 上帮我解决了这个问题。 (13认同)
  • 之后你需要`udevtrigger`吗? (4认同)
  • `udevtrigger` 或 `udevadm trigger` 对我不起作用。我发现一些设备在卸载和加载相同的模块后可以工作(假设它是可加载的模块)。我发现不一定要重新启动系统。以网络设备为例,我执行 `rmmod ixgbe`、`rmmod tg3`、`rmmod e1000` 然后是 `modprobe ixgbe`、`modprobe tg3`、`modprobe e1000`,具体取决于网络驱动程序的类型。 (3认同)
  • 在此之后,我确实必须使用“sudo udevadm trigger”,尽管删除 sudo 没有显示任何错误,但在我使用 sudo 运行它之前,我实际上没有看到任何更改 (3认同)

Gil*_*il' 81

Udev 使用inotify机制来监视在库和本地配置树(通常位于/lib/udev/rules.d/etc/udev/rules.d)中的规则目录中的更改。因此,大多数情况下,当您更改规则文件时,您无需执行任何操作。

如果您正在做一些不寻常的事情,您只需要明确通知 udev 守护程序,例如,如果您的规则包含另一个目录中的文件。然后你可以使用通常的约定来要求守护进程重新加载它们的配置:发送一个SIGHUP ( pkill -HUP udevd)。或者您可以使用以下udevadm命令:udevadm control --reload-rules.

但是,请注意,不同版本的 udev 历来具有不同的触发器来自动重新加载规则。因此,如果有疑问,请致电udevadm control --reload-rules:无论如何它不会造成任何伤害。

udev 规则仅在添加设备时应用。如果您想将规则重新应用于已连接的设备,您需要明确地执行此操作,方法是udevadm trigger使用正确的选项调用以匹配其配置已更改的设备,例如udevadm trigger --attr-match=vendor='Yoyodyne' --attr-match=model='Frobnicator 300'.


小智 20

我添加这个是因为有一天我会需要它......再次。

有时您会得到以太网设备号和 MAC 地址的错误匹配。有时这真的很重要,例如在 VM 中运行并且每个设备分配到不同的 VLAN 时。

  1. 关闭网络接口,然后
  2. 修改/etc/udev/rules.d/70-persistent-net.rules(或其等价物)
  3. 重新加载 udevadm control --reload-rules
  4. 重新触发 udevadm trigger --attr-match=subsystem=net
  5. 启动网络接口。

我很惊讶这是多么有效。

  • 在 Red Hat 上:`service network stop && udevadm control --reload-rules; udevadm 触发器 --attr-match=subsystem=net; 服务网络启动` (6认同)

小智 14

我不确定这是否适用,这绝对是一篇较旧的帖子,但它在我的网络搜索 udev 信息中出现了很高的比例,所以我想我可以分享一些知识。

您可以为特定设备手动触发 udev 规则。这仅适用于与 redhat 相关的发行版(centos fedora 等等)

在规则文件 ( /etc/udev/rules.d/whateveryoucalledyourrules) 中进行相关更改后,您可以回显change到设备的 uevent。

echo change > /sys/block/devname/partname1/uevent
Run Code Online (Sandbox Code Playgroud)

这将强制仅读取此设备的 udev 规则。好多了,在我看来更有针对性。