一个应该如何重新加载udev规则,以便新创建的规则可以起作用?

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

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

评论

请注意,udev的最新版本已放弃对inotify的支持,因此这些天更经常需要重新加载更改规则。

什么是udev?是/ dev的经理吗?

@Sandburg是的,它可以在Linux系统上处理即插即用功能。

#1 楼

# udevadm control --reload-rules && udevadm trigger


评论


之后需要udevtrigger吗?

–指甲
2012年5月26日在20:28

@Nils实际上,您可能需要用udevtrigger(或者在大多数发行版中是udevadm触发器)代替(即,将设备拔出再装回)。 --reload-rules几乎总是无用的,因为它会自动发生。

–吉尔斯'所以-不再是邪恶的'
13年5月5日在10:28

udevadm trigger在CentOS 6上帮了我大忙。

–astrostl
13年8月7日在18:19

udevtrigger或udevadm触发器对我不起作用。我发现某些设备在卸载和加载相同模块后会工作(假设它是可加载模块)。我发现的是不必重启系统。对于网络设备的示例,根据网络驱动程序的类型,我先执行rmmod ixgbe,rmmod tg3,rmmod e1000,然后执行modprobe ixgbe,modprobe tg3,modprobe e1000。

–热情的极客
15年1月22日在20:25

在此之后,我确实必须对sudo udevadm触发器进行了操作,尽管删除sudo并没有显示任何错误,但直到运行w / sudo时,我才真正看到任何更改。

–雅各布·明斯霍尔(Jacob Minshall)
2015年11月10日17:43

#2 楼

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'

评论


systemd udev是否使用inotify监视规则更改?

–克雷格·麦昆(Craig McQueen)
16年5月19日在2:28

inotify机制并不总是能捕获udev规则文件的更改。例如,当我使用cat> 10-name.rules通过粘贴内容来更改规则文件时,我必须使用udevadm手动重新加载规则。经过Raspbian Stretch测试。

–丹尼尔·K。
19年7月25日在8:55



@DanielK。最近有改变吗? IIRC发布此答案时,我同时检查了systemd udev和非systemd udev,并且都使用了inotify,因此--reload-rules仅在罕见情况下才需要。

–吉尔斯'所以-不再是邪恶的'
19年7月25日在11:17

@Gilles:也许我上面的示例(使用Shell重定向覆盖现有规则文件)可以被视为“不常见的情况”。当我通过编辑器(例如vi)修改此文件时,inotify机制起作用。

–丹尼尔·K。
19年7月25日在12:43



@DanielK。啊,很高兴知道。这种情况并不罕见:有些编辑器会通过重写来保存文件(使用Vim和Emacs,这取决于它们的配置方式)。奇怪的是,udev只处理其中一种情况-对我来说似乎是个错误,因为我想不出将它们区别对待的理由。

–吉尔斯'所以-不再是邪恶的'
19年7月25日在12:51

#3 楼

我添加这个是因为有一天我会再次使用它。

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


断开网络接口,然后
修改/etc/udev/rules.d/70-persistent-net.rules(或其等效项)
udevadm control --reload-rules重新加载
udevadm trigger --attr-match=subsystem=net重新触发
/>启用网络接口。

我很惊讶它的工作效果。

评论


在Red Hat上:服务网络停止&& udevadm控制--reload-rules; udevadm trigger --attr-match = subsystem = net;服务网络启动

–亚历山大·托斯汀
15年2月19日在12:40

在Debian测试中,“ udevadm触发器--attr-match = subsystem = net”不起作用。我只需要拔出并插入USB以太网卡,然后udev触发新规则。

–三角龙
17年6月6日在12:55

Trismegistos,我愿意打赌,按照Clayton Dukes的回答,即插即用类似于删除并重新加载网络驱动程序。

– Mike S
17年11月28日在23:58

#4 楼

我不确定这是否适用,这绝对是较旧的文章,但是在我的网络上搜索udev信息的信息很高,因此我想我可能会分享一些知识。

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

一旦您在规则文件(/etc/udev/rules.d/whateveryoucalledyourrules)中进行了相关更改,就可以将change回显到设备的uevent中。 >
echo change > /sys/block/devname/partname1/uevent


这将强制仅此设备读取udev规则。我认为更好,更有针对性。

#5 楼

对我而言,以下命令序列已按需工作。

我对/etc/udev/rules.d/70-persistent-net.rules进行了修改,以更改eth编号并重新加载它们而无需重新启动。

/etc/init.d/networking stop
/etc/init.d/udev stop
udevadm control --reload-rules
/etc/init.d/udev start
/etc/init.d/networking start


通过此操作,它已在运行时成功加载,而无需重新启动计算机。

欢迎对此提出任何建议或建议,因为我是通过阅读以下内容自行发现的手册页。

#6 楼

我在这里添加了正确的答案,因为花了我一段时间才在@enthusiasticgeek的评论中注意到它。如果您是ssh'd!):


获取正在使用的接口模块的列表:

cat /etc/udev/rules.d/70-persistent-net.rules | grep "PCI device" | perl -pe 's/.*\((\w+)\).*//g'| uniq

在我的情况下,它是igb,所以它只是打印出来。


键入sudo rmmod igb(用从步骤1获得的卡驱动程序替换igb

下一个,根据需要编辑/etc/udev/rules.d/70-persistent-net.rules,然后再次使用modprobe igb加载模块,再次用您的igb替换。

评论


这与Otheus的答案相结合,是使我无需重新启动计算机即可修复Mellanox网卡配置的秘密武器。我相信驱动程序的加载和persistent-net.rules文件的udevadm读取大致类似于系统在引导时所做的工作。

– Mike S
17年11月29日在0:00

#7 楼

这与主要答案略有不同:在两个命令中我似乎都需要sudo

传闻:sudo udevadm trigger花费了大约2秒,而没有sudo花费了大约0.2秒。很明显,他们没有为我做同样的事情。改为执行以下操作:

sudo udevadm control --reload-rules
sudo udevadm trigger


,最后(通过下面的第二个链接),拔下设备的插头,然后将其重新插回。

参考:


如何在不重新启动的情况下重新加载udev规则?
https://askubuntu.com/questions/1048870/permission-denied-to-non-root-user-for -usb-device / 1187646#1187646

也请参见上述两个答案下的注释。

评论


Igancio答案中的命令以#作为提示符,表示它们需要以root用户身份执行。然后根据您的喜好,您可以使用sudo或仅在root shell中执行它们(您可以通过例如su-或sudo -s输入或仅以root用户身份登录另一个控制台)。

–maxschlepzig
20 May 24 '11:43

啊真微妙。我不知道。谢谢。

–加百利·斯台普斯
20-05-24在16:18

#8 楼

如果有多个网络

cat /etc/udev/rules.d/70-persistent-net.rules | grep "PCI device" | awk '{print $NF}'|sed -e 's/(//g' -e 's/)//g'| uniq > /tmp/listnet
rm -rf /etc/udev/rules.d/70-persistent-net.rules 
for i in $(cat /tmp/listnet); do rmmod $i; modprobe $i;done
service network restart
rm -rf /tmp/listnet