Как перезагружать правила udev, чтобы вновь созданные могли функционировать?
Я использую Arch Linux, и у меня нет udevstartкоманды здесь.
Тоже проверил /etc/rc.d, службы udev там нет.
udev? Это менеджер /dev?
Как перезагружать правила udev, чтобы вновь созданные могли функционировать?
Я использую Arch Linux, и у меня нет udevstartкоманды здесь.
Тоже проверил /etc/rc.d, службы udev там нет.
udev? Это менеджер /dev?
Ответы:
# 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зависимости от типа сетевого драйвера.
ip link set $oldname name $newnameупоминается здесь . В моем случае мне нужно было заменить имя iface lanна мостовое iface (для KVM), и, следовательно, оригинал - теперь лежащий в основе - iface должен был вернуть свое старое имя eth1обратно. Итак, хитрость была в следующем: 1) обрушить ифакс; 2) исправить настройки сети; 3) обновить файл правил именования udev; 4) переименовать iface используя ip link...; 5) поднять мост.
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'.
inotifyМеханизм не всегда поймать изменения файла правил Udev. Например, когда я использую cat > 10-name.rulesдля изменения файла правил путем вставки содержимого, я должен перезагрузить правила вручную, используя udevadm. Проверено на растяжке Распбиана.
--reload-rulesбыл необходим только в редких случаях.
inotifyмеханизм сработал.
Я добавляю это, потому что однажды мне это понадобится ... снова.
Иногда вы получаете неправильное совпадение номеров устройств Ethernet и MAC-адресов. Иногда это действительно важно, например, при работе на виртуальной машине, и каждому устройству назначается отдельная 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
Я не уверен, применимо ли это, и это определенно более старая статья, но она поднялась довольно высоко в моем веб-поиске информации udev, поэтому я подумал, что могу поделиться некоторыми знаниями.
Вы можете запускать правила udev вручную для определенных устройств. Это относится только к дистрибутивам, связанным с redhat (centos fedora и т. Д. И т. Д.)
После внесения соответствующих изменений в файл правил ( /etc/udev/rules.d/whateveryoucalledyourrules) вы можете changeперейти к событию устройства.
echo change > /sys/block/devname/partname1/uevent
Это заставит читать правило udev ТОЛЬКО для этого устройства. Гораздо лучше и более целенаправленный, на мой взгляд.
Для меня ниже последовательность команд сработала как хотелось.
Я сделал изменения, /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