Was ist der richtige Weg, um udev neu zu starten?

46

Ich habe den Namen meiner eth1Benutzeroberfläche in geändert eth0. Wie kann udevich jetzt fragen, ob ich die Konfiguration noch einmal lesen soll?

service udev restart

und

udevadm control --reload-rules

hilf nicht. Gibt es also eine gültige Möglichkeit außer einem Neustart? (Ja, Neustart hilft bei diesem Problem)

  • Ja, ich weiß, dass ich den Befehlen voranstellen sollte sudo, aber jeder der oben genannten Befehle ändert nichts an der ifconfig -aAusgabe: Ich sehe immer noch eth1, nicht eth0.

  • Ich habe gerade die NAMEEigenschaft von udev-rule line geändert . Ich kenne keinen Grund dafür, dass dies unwirksam ist.

Es gibt keinen Fehler beim Ausführen der beiden Befehle, die ich oben gepostet habe, aber sie ändern nur nicht den tatsächlichen Schnittstellennamen in der ifconfig -aAusgabe. Wenn ich einen Neustart durchführe, ändert sich der Name der Schnittstelle wie erwartet.

Zu Entwicklungszwecken schreibe ich ein Skript, das virtuelle Maschinen (VirtualBox-gesteuert) klont und auf irgendeine Weise voreinstellt.

Also führe ich einen Befehl zum Klonen der VM aus, starte sie und füge, solange der MAC der Netzwerkschnittstelle geändert wird, udevdie zweite Regel zu den persistenten Netzwerkregeln hinzu. Gleich nach dem ersten Start der Maschine gibt es zwei Regeln:

  • eth0, der nicht existiert, solange er im ursprünglichen VM-Image MAC existiert
  • eth1, was existiert, aber die gesamte Konfiguration in allen Dateien bezieht sich auf eth0, also ist es nicht so gut für mich

Also sedlösche ich mit die Zeile eth0(sie ist im geklonten Image veraltet und unbrauchbar) und ersetze eth1mit eth0. Also momentan habe ich eine gültige persistente Regel, aber es ist immer noch eth1in /dev.

Das Problem: Ich möchte den Computer nicht neu starten (es wird eine andere Zeit dauern, was beim Erstellen von VMs nicht gut ist) und möchte meinen /devComputer nur mit einigen Befehlen neu erstellen lassen, damit ich eine einsatzbereite VM habe ohne Neustart.

zerkms
quelle
Wie haben sich Sie eth1zu eth0? Haben Sie die Gerätedatei gerade umbenannt? In diesem Fall ist dies keine effektive Methode (und Sie sollten erwarten, dass die Änderung durch einen erfolgreichen Neustart des udevDaemons zurückgesetzt wird). Wenn Sie eine andere Methode verwendet haben, beschreiben Sie diese bitte ausführlich und geben Sie den vollständigen und genauen Text aller Fehlermeldungen an, die beim Ausführen der von Ihnen ausgeführten Befehle angezeigt werden (zum Neustarten des udevDämons oder zum Neuladen seiner Regeln). Sie können Ihre Frage bearbeiten, um diese Informationen bereitzustellen.
Eliah Kagan
@Eliah Kagan: aktualisiert. ps: warum sollte es zurückgesetzt werden? Das sollte es nicht ;-)
zerkms
udevgeneriert dynamisch Ihre Geräte in /dev. Wenn Sie es neu starten, werden sie gemäß den Regeln neu generiert. Direkt an ihnen vorgenommene Änderungen sind im Allgemeinen nicht dauerhaft. Es sieht so aus, als würde ein Neustart problemlos udevfunktionieren, aber Sie haben die Gerätenamen einfach nicht richtig geändert.
Eliah Kagan
@Eliah Kagan: Fügt udev nur neue Regeln hinzu (ändert sie nicht) , wenn sie die für ein bestimmtes Gerät nicht finden können. Wenn eine Regel zutrifft, folgt sie ohne Änderungen.
Zerkms
@Eliah Kagan: und ich habe es richtig geändert. Glaube nur, ich kann ein Zeichen in einer Zeile ändern ;-) (auch ein Neustart hilft, und das beweist, dass alles in Ordnung mit Regeln ist)
zerkms

Antworten:

29

Ich weiß nicht, ob dies beim erneuten Laden der Netzwerkkonfiguration hilfreich ist, aber als ich die Änderung vorgenommen habe /etc/udev/rules.d/70-persistent-cd.rules, um den DVD-Geräte-Link von /dev/dvd1auf zu korrigieren /dev/dvd, musste ich ausführen

sudo udevadm trigger

um die neuen links erstellen zu lassen.

Akaihola
quelle
3
Ich glaube, es sudo udevadm trigger --action=changeist sicherer, wie in dieser E-Mail beschrieben, was sicher ist und was nicht udev: lists.ubuntu.com/archives/ubuntu-devel/2009-January/027260.html
Ehtesh Choudhury
In der Tat, und es heißt/etc/udev/rules.d/70-persistent-net.rules
msanford
Unter Ubuntu 15.04 udevadm triggerhat meine X11-Sitzung gesperrt und mich zurück zum Anmeldebildschirm geworfen.
Ian D. Allen
20

Sie müssen alle hier gegebenen Ratschläge in der richtigen Reihenfolge kombinieren:

  1. Schalten Sie das Netzwerk aus service networking stop
  2. Entladen Sie das Treibermodul aus dem Kernel
    1. Suchen Sie den Namen des Moduls lspci -vund suchen Sie nach "Verwendeter Kerneltreiber:".
    2. modprobe -r <driver module>
  3. Laden Sie die udev-Regeln neu udevadm control --reload-rules
  4. Löse die neuen Regeln aus udevadm trigger
  5. Lasttreiber modprobe <driver module>
  6. Starten Sie das Netzwerk neu service networking start
  7. (Optional) Führen Sie alle iptablesSkripts, die auf den ethSchnittstellennamen verwiesen haben , erneut aus, bevor dieser aktiv war.

Ich vermute, dass entweder Schritt 4 oder Schritt 5 nicht wirklich erforderlich ist, aber diese Schritte haben bei mir funktioniert. Sie können nach Schritt 4 mit Schritt 2.1 überprüfen, ob der Auslösebefehl bereits Schritt 5 ausgeführt hat. Bearbeiten Sie diese Antwort, um Ihre Ergebnisse widerzuspiegeln, wenn Sie dies tun.

Chris Wesseling
quelle
1
Ubuntu 15.04 mit allen in aufgelisteten Geräten /etc/network/interfaces(so lässt Network Manager sie in Ruhe): Alles, was ich tun musste, war zu bearbeiten und /etc/udev/rules.d/70-persistent-net.rulesdann # 2, # 3, # 5 zu tun . Keine Notwendigkeit, alle Netzwerke zu stoppen; nichts anderes nötig.
Ian D. Allen
5

Ich hatte ein ähnliches Problem. Da ich mir nicht die Zeit für einen Neustart nehmen wollte, fuhr ich einen Einzeiler nach Chris Wesselings Vorschlag.

/etc/init.d/networking stop && modprobe -r tg3 && udevadm control --reload-rules && udevadm trigger && modprobe tg3 && /etc/init.d/networking start

Dies funktionierte für mich mit Ubuntu 12.04.02 Server. Meine NICs verwendeten den tg3-Kernelmodultreiber. Ändern Sie daher tg3 in das Modul, das Ihre Schnittstellen verwenden. Ich habe meine gefunden in /etc/udev/rules.d/70-persistent-net.rules:

PCI-Gerät 0x14e4: / sys / devices / pci0000: 00/0000: 00: 1c.4 / 0000: 02: 00.1 (tg3) <-Kernel-Modultreiber für das nic

Das einzige Problem, das ich hatte, war eine schlechte Route, die ich mit einem einfachen Befehl zum Hinzufügen von Routen behoben habe. Danke für die Hilfe Chris!

user197674
quelle
3

sudo /etc/init.d/udev restartsollte den Trick machen. Einige der Befehle, die Sie ausprobiert hatten, sudosind möglicherweise ebenfalls wirksam.

Eliah Kagan
quelle
Nö, ifconfig -azeigt mir noch alte eth1Schnittstelle
zerkms
3

Dies sollte es sicher tun:

sudo reload udev

Da ich diesen Befehl ohne Probleme verwendet habe.

rdh
quelle
Nö, ifconfig -azeigt mir noch alte eth1Schnittstelle
zerkms
1

Ich habe dies für eine Weile aus dem gleichen Grund untersucht und konnte keine Möglichkeit finden, den Namen der Netzwerkschnittstelle in einem Live-System zu ändern.

Die Problemumgehung besteht darin, die Datei /etc/udev/rules.d/70-persistent-net.rules in der Vorlage zu löschen. Dies bedeutet, dass beim nächsten Start eine Netzwerkkarte als eth0 angezeigt wird.

Merlijn
quelle
1

Sie müssen udev neu laden , um die Regeländerung auszulösen. Das Gerät wird jedoch erst umbenannt, wenn Sie das Treibermodul entladen / neu laden.

Also sollte modprobe -r e1000 && modprobe e1000nach udev reload der Trick sein. Tun Sie dies natürlich nicht, wenn Sie das Netzwerk benötigen und nur über e1000-Schnittstellen verfügen.

nickt
quelle
0
udevadm trigger 

Es funktioniert , wenn Sie hier eine Linkbeschreibung eingeben

Zhou Yunjian
quelle
1
Willkommen bei Ask Ubuntu! Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Braiam
0

Daher wechsle ich bei VirtualBox mit Ubuntu 12.04 häufig zwischen Ethernet und Wireless.

Wenn sich meine Verbindung ändert, muss ich den Bridged Adapter unter Geräte> Netzwerkeinstellungen auswählen. Entweder 'Intel 82579LM Gigabit Network Connection' oder 'Intel Centrino Ultimate-N 6300 AGN'.

Danach kann ich rennen

sudo modprobe -r e1000
sudo service udev restart
sudo modprobe e1000
ping google.com # To test I ran this between each command.

Dies ist nur eine Erklärung meiner Ergebnisse, nachdem ich alle Antworten oben gelesen habe.

Derek Robati
quelle