Answers:
# udevadm control --reload-rules && udevadm trigger
udevtrigger
之后需要吗?
udevtrigger
(或udevadm trigger
在大多数发行版中)(将其插入设备或插回设备)。--reload-rules
几乎总是无用的,因为它会自动发生。
udevadm trigger
为我做了CentOS 6上的技巧。
udevtrigger
或udevadm trigger
没有为我工作。我发现某些设备在卸载和加载相同模块后会工作(假设它是可加载模块)。我发现的是不必重启系统。例如,对于网络设备,我做rmmod ixgbe
,rmmod tg3
,rmmod e1000
然后modprobe ixgbe
,modprobe tg3
,modprobe e1000
取决于类型的网络驱动程序。
Udev使用inotify机制监视库和本地配置树(通常位于/lib/udev/rules.d
和中/etc/udev/rules.d
)中的rules目录中的更改。因此,大多数情况下,更改规则文件时无需执行任何操作。
如果您执行异常操作,例如,如果您的规则包含在另一个目录中的文件,则只需显式通知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'
。
inotify
机制并不总是捕获udev规则文件的更改。例如,当我cat > 10-name.rules
通过粘贴内容来更改规则文件时,必须使用手动重新加载规则udevadm
。经过Raspbian Stretch测试。
--reload-rules
仅在罕见情况下才需要。
inotify
机制起作用了。
我添加这个是因为有一天我会再次需要它。
有时您会错误地匹配以太网设备编号和MAC地址。有时,这确实很重要,例如在VM中运行并将每个设备分配给不同的VLAN时。
/etc/udev/rules.d/70-persistent-net.rules
(或其等效项)udevadm control --reload-rules
udevadm trigger --attr-match=subsystem=net
我很惊讶这工作得如何。
service network stop && udevadm control --reload-rules; udevadm trigger --attr-match=subsystem=net; service network start
对我而言,以下命令序列已按需工作。
我做/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
通过执行此操作,它已在运行时成功加载,而无需重新启动计算机。
对此有任何建议或欢迎,因为我是通过阅读手册页自行发现的。
我在这里添加了正确的答案,因为花了一段时间我才注意到@enthusiasticgeek的评论。您需要做的所有事情(假设您在服务器的控制台上-显然,如果要使用ssh'd,这样做不好!):
cat /etc/udev/rules.d/70-persistent-net.rules | grep "PCI device" | perl -pe 's/.*\((\w+)\).*/$1/g'| uniq
在我的情况下,它是igb
,因此它仅打印出来。
sudo rmmod igb
(替换igb
为从步骤1获得的卡驱动程序。接下来,/etc/udev/rules.d/70-persistent-net.rules
根据需要进行编辑,然后使用modprobe igb
再次加载模块,再次替换igb
为您的模块。
如果有多个网络
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