Wie sollte man udev-Regeln neu laden, damit neu erstellte funktionieren können?
Ich verwende Arch Linux und habe hier keinen udevstart
Befehl.
Auch geprüft /etc/rc.d
, kein udev-Service da.
udev
? Ist es der Manager von /dev
?
Wie sollte man udev-Regeln neu laden, damit neu erstellte funktionieren können?
Ich verwende Arch Linux und habe hier keinen udevstart
Befehl.
Auch geprüft /etc/rc.d
, kein udev-Service da.
udev
? Ist es der Manager von /dev
?
Antworten:
# udevadm control --reload-rules && udevadm trigger
udevtrigger
danach
udevtrigger
(oder besser gesagt udevadm trigger
bei den meisten Distributionen) stattdessen (das, oder stecken Sie das Gerät aus und wieder ein). --reload-rules
ist fast immer nutzlos, da es automatisch passiert.
udevadm trigger
habe den Trick auf CentOS 6 für mich gemacht.
udevtrigger
oder udevadm trigger
hat bei mir nicht funktioniert. Ich habe festgestellt, dass einige Geräte nach dem Entladen und Laden des Moduls für dasselbe funktionieren (vorausgesetzt, es ist ein ladbares Modul). Was ich herausgefunden habe ist, dass man das System nicht unbedingt neu starten muss. Beispiel für ein Netzwerkgerät, ich rmmod ixgbe
, rmmod tg3
, rmmod e1000
dann modprobe ixgbe
, modprobe tg3
, modprobe e1000
je nach Art des Netzwerktreiber.
ip link set $oldname name $newname
wird hier erwähnt . In meinem Fall musste ich ein iface namens lan
durch ein überbrücktes iface (für KVM) ersetzen , und daher musste das ursprüngliche - jetzt zugrunde liegende - iface seinen alten Namen eth1
zurückbekommen. Der Trick war also: 1) iface runter bringen; 2) Netzwerkkonfiguration reparieren; 3) udev-Benennungsregeldatei aktualisieren; 4) benenne das iface um mit ip link...
; 5) Bringe die Brücke hoch.
Udev verwendet den Inotify- Mechanismus, um nach Änderungen im Regelverzeichnis sowohl in der Bibliothek als auch in den lokalen Konfigurationsbäumen (normalerweise in /lib/udev/rules.d
und /etc/udev/rules.d
) zu suchen. 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 gewohnte Konvention verwenden, um Daemons aufzufordern, ihre Konfiguration neu zu laden: Senden Sie ein SIGHUP ( pkill -HUP udevd
). Oder Sie können die Verwendung udevadm
Befehl: 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. Also, wenn Sie Zweifel haben, rufen Sie an udevadm control --reload-rules
: Es schadet sowieso nicht.
Die udev-Regeln werden nur angewendet, wenn ein Gerät hinzugefügt wird. Wenn Sie die Regeln erneut auf ein bereits verbundenes Gerät anwenden möchten, müssen Sie dies explizit tun, indem Sie udevadm trigger
mit den richtigen Optionen aufrufen, die den Geräten entsprechen, deren Konfiguration sich geändert hat, z udevadm trigger --attr-match=vendor='Yoyodyne' --attr-match=model='Frobnicator 300'
.
inotify
Mechanismus erfasst nicht immer eine Änderung einer udev-Regeldatei. Wenn ich zum Beispiel cat > 10-name.rules
die Regeldatei durch Einfügen des Inhalts ändere, muss ich die Regeln manuell mit neu laden udevadm
. Getestet auf Raspbian Stretch.
--reload-rules
was nur in seltenen Fällen erforderlich war.
inotify
funktionierte der Mechanismus.
Ich füge dies hinzu, weil ich es eines Tages wieder brauchen werde.
Manchmal erhalten Sie eine falsche Zuordnung von Ethernet-Gerätenummern und MAC-Adressen. Dies ist manchmal sehr wichtig, beispielsweise wenn in einer VM ausgeführt wird und jedes Gerät einem anderen VLAN zugewiesen ist.
/etc/udev/rules.d/70-persistent-net.rules
(oder gleichwertig)udevadm control --reload-rules
udevadm trigger --attr-match=subsystem=net
Ich war überrascht, wie gut das funktioniert hat.
service network stop && udevadm control --reload-rules; udevadm trigger --attr-match=subsystem=net; service network start
Ich bin nicht sicher, ob dies zutrifft, und dies ist definitiv ein älterer Beitrag, aber meine Websuche nach udev-Informationen war ziemlich umfangreich, 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 ( /etc/udev/rules.d/whateveryoucalledyourrules
) vorgenommen haben, können Sie change
das Ereignis des Geräts erneut anzeigen.
echo change > /sys/block/devname/partname1/uevent
Dies erzwingt eine udev-Regel, die NUR für dieses Gerät gelesen wird. Viel besser und meiner Meinung nach gezielter.
Für mich hat die folgende Befehlssequenz wie gewünscht funktioniert.
Ich habe Änderungen vorgenommen /etc/udev/rules.d/70-persistent-net.rules
, 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 dass der Computer neu gestartet werden musste.
Vorschläge oder Empfehlungen dazu sind willkommen, da ich dies selbst durch Lesen der Manpages entdeckt habe.
Ich füge hier die richtige Antwort 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 offensichtlich schlecht, wenn Sie sich im SSH-Modus befinden!):
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
so, dass es genau das druckt.
sudo rmmod igb
(Ersetzen Sie ihn igb
durch Ihren Kartentreiber aus Schritt 1.Bearbeiten Sie /etc/udev/rules.d/70-persistent-net.rules
das Modul nach Bedarf und laden Sie es dann erneut mit modprobe igb
. Ersetzen Sie es erneut durch igb
Ihr Modul .
im Falle mehrerer Netzwerke
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