Jaki jest prawidłowy sposób ponownego uruchomienia udev?

46

Zmieniłem nazwę mojego eth1interfejsu na eth0. Jak poprosić udevteraz o ponowne przeczytanie konfiguracji?

service udev restart

i

udevadm control --reload-rules

nie pomagaj. Czy jest więc jakikolwiek ważny sposób oprócz ponownego uruchomienia? (tak, ponowne uruchomienie pomaga rozwiązać ten problem)

  • tak, wiem, że powinienem poprzedzać polecenia sudo, ale jedno z powyższych wpisów nie zmienia niczego w ifconfig -adanych wyjściowych: wciąż widzę eth1, nie eth0.

  • Właśnie zmieniłem NAMEwłaściwość linii udev-rule. Nie znam żadnego powodu, aby to było nieskuteczne.

Nie ma żadnego błędu w wykonywaniu obu poleceń, które opublikowałem powyżej, ale po prostu nie zmieniają one rzeczywistej nazwy interfejsu w ifconfig -adanych wyjściowych. Jeśli wykonam restart, to nazwa interfejsu zmieni się zgodnie z oczekiwaniami.

Dla celów programistycznych piszę skrypt, który klonuje maszyny wirtualne (oparte na VirtualBox) i w pewien sposób wstępnie je konfiguruje.

Wykonuję więc polecenie, aby sklonować maszynę wirtualną, uruchomić ją i dopóki zmieni się MAC interfejsu sieciowego - udevdodaje drugą regułę do reguł trwałych sieci. Zaraz po pierwszym uruchomieniu komputera obowiązują 2 reguły:

  • eth0, który nie istnieje, o ile istniał w oryginalnym obrazie MAC maszyny wirtualnej
  • eth1, który istnieje, ale odnosi się do całej konfiguracji we wszystkich plikach eth0, więc nie jest to dla mnie tak dobre

Więc sedusuwam wiersz z eth0(jest on przestarzały i bezużyteczny w sklonowanym obrazie) i zastępuję eth1go eth0. Więc obecnie mam ważną regułę trwałą, ale wciąż jest eth1w niej /dev.

Problem: nie chcę ponownie uruchamiać maszyny (zajmie to inny czas, co nie jest dobre w przypadku budowania etapu VM) i chcę po prostu /devprzebudować moją komendę, aby mieć gotową do użycia maszynę VM bez żadnych restartów.

zerkms
źródło
Jak to zmienić eth1, aby eth0? Czy właśnie zmieniłeś nazwę pliku urządzenia? Jeśli tak, to nie jest to skuteczny sposób (należy oczekiwać, że zmiana zostanie cofnięta po pomyślnym zrestartowaniu udevdemona). Jeśli użyłeś innej metody, opisz ją szczegółowo, a także podaj pełny i dokładny tekst komunikatów o błędach, które widzisz po uruchomieniu wypróbowanych poleceń (w celu ponownego uruchomienia udevdemona lub przeładowania jego reguł). Możesz edytować swoje pytanie, aby podać te informacje.
Eliah Kagan
@Eliah Kagan: zaktualizowano. ps: dlaczego należy to cofnąć? Nie powinno ;-)
zerkms
udevdynamicznie generuje Twoje urządzenia /dev. Jeśli uruchomisz go ponownie, zregeneruje je zgodnie z jego zasadami. Zmiany wprowadzone bezpośrednio do nich nie są na ogół trwałe. Wygląda na to, że ponowne uruchomienie udevdziała poprawnie, ale po prostu nie zmieniłeś poprawnie nazw urządzeń.
Eliah Kagan
@Eliah Kagan: udev dodaje (nie modyfikuje) nowe reguły tylko wtedy, gdy nie może znaleźć tej dla konkretnego urządzenia. Jeśli istnieje reguła, która pasuje - po prostu przestrzega jej bez modyfikacji.
zerkms
@Eliah Kagan: i odpowiednio to zmieniłem. Po prostu uwierz , że mogę zmienić jeden znak w linii ;-) (także restart systemu pomaga, a to dowodzi, że wszystko jest w porządku z regułami)
zerkms

Odpowiedzi:

29

Nie wiem, czy to pomaga w przeładowaniu konfiguracji sieci, ale kiedy zmodyfikowałem, /etc/udev/rules.d/70-persistent-cd.rulesaby poprawić łącze urządzenia DVD od /dev/dvd1do /dev/dvd, musiałem uruchomić

sudo udevadm trigger

aby uzyskać nowe linki utworzone.

akaihola
źródło
3
Uważam, że sudo udevadm trigger --action=changejest bezpieczniejszy, zgodnie z tym e-mailem na temat tego, co jest bezpieczne i nie jest bezpieczne udev: lists.ubuntu.com/archives/ubuntu-devel/2009-
stycznia
Rzeczywiście, i nazywa się/etc/udev/rules.d/70-persistent-net.rules
msanford
Pod Ubuntu 15.04 udevadm triggerzablokowałem moją sesję X11 i wróciłem do ekranu logowania.
Ian D. Allen
20

Musisz połączyć wszystkie podane tutaj porady we właściwej kolejności:

  1. Wyłącz sieć service networking stop
  2. Zwolnij moduł sterownika z jądra
    1. Znajdź nazwę modułu lspci -vi wyszukaj „Używany sterownik jądra:”
    2. modprobe -r <driver module>
  3. Załaduj ponownie reguły udev udevadm control --reload-rules
  4. Uruchom nowe zasady udevadm trigger
  5. Załaduj sterownik modprobe <driver module>
  6. Uruchom ponownie sieć service networking start
  7. (opcjonalnie) Uruchom ponownie wszystkie iptablesskrypty, które odwoływały się do ethnazwy interfejsu przed jego uruchomieniem.

Podejrzewam, że krok 4 lub krok 5 nie jest tak naprawdę potrzebny, ale te kroki działały dla mnie. Możesz sprawdzić po kroku 4 z krokiem 2.1, aby sprawdzić, czy polecenie wyzwalające już wykonało krok 5, edytuj tę odpowiedź, aby odzwierciedlić swoje ustalenia, jeśli tak zrobisz.

Chris Wesseling
źródło
1
Ubuntu 15.04 ze wszystkimi urządzeniami wymienionymi w /etc/network/interfaces(więc Network Manager zostawia je same): Wszystko, co musiałem zrobić, to edytować, /etc/udev/rules.d/70-persistent-net.rulesa następnie zrobić # 2, # 3, # 5. Nie trzeba przerywać wszystkich sieci; nie potrzeba nic więcej.
Ian D. Allen
5

Miałem podobny problem. Ponieważ nie chciałem tracić czasu na ponowne uruchomienie, uruchomiłem jeden liner, korzystając z sugestii Chrisa Wesselinga.

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

To działało dla mnie przy użyciu serwera Ubuntu 12.04.02. Moje karty sieciowe używały sterownika modułu jądra tg3, więc zmień tg3 na moduł, którego używają twoje interfejsy. Znalazłem te używane w /etc/udev/rules.d/70-persistent-net.rules:

Urządzenie PCI 0x14e4: / sys / devices / pci0000: 00/0000: 00: 1c.4 / 0000: 02: 00.1 (tg3) <sterownik modułu jądra dla nic

Jedynym problemem, który miałem, była zła trasa, którą naprawiłem prostym poleceniem dodawania trasy. Dzięki za pomoc Chris!

użytkownik197674
źródło
3

sudo /etc/init.d/udev restartpowinien załatwić sprawę. Niektóre polecenia, które wypróbowałeś, jeśli zostaną uruchomione sudo, również mogą być skuteczne.

Eliah Kagan
źródło
Nie, ifconfig -awciąż pokazuje mi stary eth1interfejs
zerkms,
3

To powinno zrobić to bezpiecznie:

sudo reload udev

Ponieważ użyłem tego polecenia bez żadnych problemów.

rdh
źródło
Nie, ifconfig -awciąż pokazuje mi stary eth1interfejs
zerkms,
1

Badam to od dłuższego czasu w tym samym celu i nie znalazłem sposobu na zmianę nazwy interfejsu sieciowego w systemie na żywo.

Obejściem, dla którego wybrałem jest usunięcie pliku /etc/udev/rules.d/70-persistent-net.rules w szablonie, co oznacza, że ​​przy następnym uruchomieniu zobaczy każdą kartę sieciową jako eth0.

Merlijn
źródło
1

Musisz ponownie załadować udev, aby wywołać zmianę reguły, ale nazwa urządzenia nie zostanie zmieniona, dopóki nie rozładujesz / przeładujesz modułu sterownika.

Więc modprobe -r e1000 && modprobe e1000po udev przeładowanie powinno załatwić sprawę. Oczywiście nie rób tego, jeśli potrzebujesz sieci i masz tylko interfejsy e1000.

kiwa głową
źródło
0
udevadm trigger 

to zadziała, wpisz opis linku tutaj

zhou yunjian
źródło
1
Witamy w Ask Ubuntu! Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
Braiam
0

Tak więc dla mnie w VirtualBox z Ubuntu 12.04 często przełączam się między siecią Ethernet i bezprzewodową.

Więc kiedy moje połączenie się zmieni, muszę wybrać Bridged Adapter z Urządzenia> Ustawienia sieciowe. Albo „Intel 82579LM Gigabit Network Connection”, albo „Intel Centrino Ultimate-N 6300 AGN”.

Po zrobieniu tego mogę biegać

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

To jest tylko wyjaśnienie moich wyników po przeczytaniu wszystkich powyższych odpowiedzi.

Derek Robati
źródło