it-swarm.com.de

Wie lade ich udev Regeln ohne Neustart neu?

Wie soll man udev Regeln neu laden, damit neu erstellte funktionieren können?

Ich verwende Arch Linux und habe hier keinen Befehl udevstart.

Auch markiert /etc/rc.d, kein udev service da.

226
daisy
# udevadm control --reload-rules && udevadm trigger
258

Udev verwendet den Mechanismus inotify , um nach Änderungen im Regelverzeichnis sowohl in der Bibliothek als auch in den lokalen Konfigurationsbäumen zu suchen (normalerweise unter /lib/udev/rules.d Und /etc/udev/rules.d). Die meiste Zeit müssen Sie also nichts tun, wenn Sie eine Regeldatei ändern.

Sie müssen den udev-Daemon nur explizit benachrichtigen, wenn Sie etwas Ungewöhnliches tun, z. B. wenn Sie eine Regel haben, die Dateien in einem anderen Verzeichnis enthält. Dann können Sie die übliche Konvention verwenden, um Dämonen aufzufordern, ihre Konfiguration neu zu laden: Senden Sie ein SEUFZEN (pkill -HUP udevd). Oder Sie können den Befehl udevadm verwenden: udevadm control --reload-rules.

Beachten Sie jedoch, dass verschiedene Versionen von udev in der Vergangenheit unterschiedliche Auslöser für das automatische Neuladen der Regeln hatten. Rufen Sie im Zweifelsfall udevadm control --reload-rules An: Es wird sowieso keinen Schaden anrichten.

Die udev-Regeln werden nur angewendet, wenn ein Gerät hinzugefügt wird. Wenn Sie die Regeln erneut auf ein Gerät anwenden möchten, das bereits verbunden ist, müssen Sie dies explizit tun, indem Sie udevadm trigger Mit den richtigen Optionen aufrufen, um den Geräten zu entsprechen, deren Konfiguration sich geändert hat, z. udevadm trigger --attr-match=vendor='Yoyodyne' --attr-match=model='Frobnicator 300'.

Ich füge das hinzu, weil ich es eines Tages wieder brauchen werde.

Manchmal erhalten Sie eine falsche Übereinstimmung von Ethernet-Gerätenummern und MAC-Adressen. Manchmal ist dies wirklich wichtig, beispielsweise wenn Sie in einem VM] ausgeführt werden und jedes Gerät einem anderen VLAN zugewiesen ist.

  1. Schalten Sie dann die Netzwerkschnittstellen aus
  2. modifiziere /etc/udev/rules.d/70-persistent-net.rules (oder gleichwertig)
  3. neu laden mit udevadm control --reload-rules
  4. erneut auslösen mit udevadm trigger --attr-match=subsystem=net
  5. rufen Sie die Netzwerkschnittstellen auf.

Ich war überrascht, wie gut das funktioniert hat.

19
Otheus

Ich bin mir nicht sicher, ob dies zutrifft, und dies ist definitiv ein älterer Beitrag, aber meine Websuche nach udev-Informationen ist ziemlich hoch, sodass ich dachte, ich könnte etwas Wissen teilen.

Sie können udev-Regeln für bestimmte Geräte manuell auslösen. Dies gilt nur für Redhat-bezogene Distributionen (Centos Fedora usw. usw. usw.)

Sobald Sie die relevanten Änderungen in Ihrer Regeldatei vorgenommen haben (/etc/udev/rules.d/whateveryoucalledyourrules) können Sie change in das Ereignis des Geräts einfügen.

echo change > /sys/block/devname/partname1/uevent

Dies erzwingt das Lesen einer udev-Regel NUR für dieses Gerät. Viel besser und meiner Meinung nach gezielter.

13
mbadmin

Für mich hat die folgende Befehlssequenz wie gewünscht funktioniert.

Ich habe Änderungen in /etc/udev/rules.d/70-persistent-net.rules Vorgenommen, um die eth -Nummer zu ändern und sie ohne Neustart neu zu laden.

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

Auf diese Weise wurde es zur Laufzeit erfolgreich geladen, ohne den Computer neu zu starten.

Vorschläge oder Empfehlungen dazu sind willkommen, da ich dies selbst durch Lesen der Manpages entdeckt habe.

4
Aditya Malviya

Ich füge hier die Antwort richtig hinzu, da ich eine Weile gebraucht habe, um sie im Kommentar von @enthusiasticgeek zu bemerken. Alles, was Sie tun müssen (vorausgesetzt, Sie befinden sich auf der Konsole des Servers - dies ist eindeutig schlecht, wenn Sie ssh'd sind!):

  1. Holen Sie sich eine Liste der verwendeten Schnittstellenmodule:

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

In meinem Fall ist es igb, also druckt es genau das.

  1. art Sudo rmmod igb (Ersetzen Sie igb durch Ihren Kartentreiber aus Schritt 1.

als nächstes bearbeiten Sie /etc/udev/rules.d/70-persistent-net.rules nach Bedarf, dann laden Sie das Modul erneut mit modprobe igb, wobei igb erneut durch deins ersetzt wird.

2
Clayton Dukes

Dies ist eine geringfügige Änderung von die Hauptantwort : Sudo schien für mich bei beiden Befehlen erforderlich zu sein.

Anekdotenbeweis: tun Sudo udevadm trigger dauerte ~ 2 Sek., aber ohne Sudo dauerte es nur ~ 0,2 Sek. Es ist also klar, dass sie nicht dasselbe für mich tun. Tun Sie dies stattdessen:

Sudo udevadm control --reload-rules
Sudo udevadm trigger

Und zum Schluss (gemäß dem zweiten Link unten) ziehen Sie den Stecker aus der Steckdose und schließen Sie das Gerät wieder an .

Verweise:

  1. Wie lade ich udev-Regeln ohne Neustart neu?
  2. https://askubuntu.com/questions/1048870/permission-denied-to-non-root-user-for-usb-device/1187646#1187646

Siehe auch die Kommentare unter den beiden obigen Antworten.

1
Gabriel Staples

bei mehreren Netzwerken

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
0
alex tmp