Zmiana nazwy interfejsu sieciowego po aktualizacji do 15.10 - zmiany udev

55

Zaktualizowałem maszynę wirtualną z systemem Ubuntu Server 15.04 do właśnie wydanej nowej stabilnej wersji 15.10.

Nie było widocznych problemów, ale po ponownym uruchomieniu komputer utracił połączenie sieciowe. lspcipokazał prawidłową kartę i lsmodudowodnił, że sterownik został załadowany.

Wskazówki dotyczące edytowania lub usuwania /etc/udev/rules.d/70-persistent-net.rulesnie powiodły się (wciąż brak sieci, brak nowego pliku), słynny /lib/udev/write_net_rulesnawet nie istniał.

Nie mam wiele pojęcia na temat udev i systemd, więc zajęło mi trochę czasu znalezienie w / sys / class / net, że zmieniła się nazwa interfejsu sieciowego. Stało się ens32, od którego zmieniono nazwę eth0. Po zmianie /etc/network/interfaces, komunikacja sieciowa została ponownie włączona.

Ale - dlaczego tak się w ogóle dzieje? A jeśli tak się stanie, czy plik interfejsów nie powinien być aktualizowany automatycznie?

Teraz, gdy usunąłem wirtualną kartę sieciową i utworzyłem inną, eth0staje się eno16777728, co nie jest, uhm, miłe.

Czy to zachowanie (przynajmniej zachowanie procedury aktualizacji) powinno być zgłaszane jako błąd?

Co więcej, czy jest już /etc/udev/rules.d/70-persistent-net.rulesprzestarzały? I (choć tylko częściowo powiązane) co z tego /etc/udev/rules.d/70-persistent-cd.rules?)

Edytuj - dodatkowe pytanie (po zaakceptowanej odpowiedzi)/etc/network/interfaces Niepokoiła mnie zależność od faktycznej nazwy interfejsu. Próbowałem nowej instalacji * ubuntu na innej maszynie wirtualnej. Ku mojemu zdziwieniu /etc/network/interfaceszawierało tylko odwołanie do urządzenia loopback. Jednak w mojej oryginalnej maszynie wirtualnej ta zmiana uniemożliwiła uruchomienie sieci. Co jeszcze muszę zmienić?

Edytuj Cóż, z innego testu dowiedziałem się, że nowy serwer Ubuntu ma kartę interfejsu sieciowego /etc/network/interfaces, podczas gdy XUbuntu nie. Może używa network-managerlub coś innego.

JeffRSon
źródło
Ten sam błąd pojawia się ponownie w 17.04. Mam nadzieję, że tylko na etapie przedpremierowym.
avtomaton

Odpowiedzi:

56

W Ubuntu 15.10 (Wily Werewolf), rozpoczynając od systemd / udev, automatycznie przypisze przewidywalne, stabilne nazwy interfejsów sieciowych dla wszystkich lokalnych interfejsów Ethernet, Wlan i Wwan ( źródło ).

Udev natywnie obsługuje następujące różne schematy nazewnictwa interfejsów sieciowych:

  1. Nazwy zawierające numery indeksowe dostarczone przez Firmware / BIOS dla urządzeń pokładowych (przykład eno1:)
  2. Nazwy zawierające Firmware / BIOS warunkiem PCI Express numery indeksów gniazdo hotplug (przykład: ens1)
  3. Nazwy zawierające fizyczne / geograficzne położenie złącza sprzętu (przykład enp2s0:)
  4. Nazwy zawierające adres MAC interfejsów (przykład enx78e7d1ea46da:)
  5. Klasyczne, nieprzewidywalne nazewnictwo ethX dla jądra (przykład:) eth0- przestarzałe

Domyślnie systemd będzie teraz nazywać interfejsy następującymi zasadami:

  1. jeśli te informacje z oprogramowania układowego mają zastosowanie i są dostępne, ponownie
  2. jeśli te informacje z oprogramowania układowego mają zastosowanie i są dostępne, ponownie
  3. jeśli dotyczy, wracając do
  4. nie jest używane domyślnie, ale jest dostępne, jeśli użytkownik tak wybierze.
  5. we wszystkich innych przypadkach.

Jak to wyłączyć?

Zasadniczo masz następujące opcje:

  • Utwórz swój własny schemat nazewnictwa, na przykład, nazywając interfejsy internet0 lub lan0. W tym celu utwórz własny plik reguł udev i ustaw właściwość name dla urządzeń. Pamiętaj, aby zamówić go przed domyślnym plikiem zasad, na przykład nadając mu nazwę/etc/udev/rules.d/70-my-net-names.rules
  • Zmień domyślny plik strategii, aby wybrać inny schemat nazewnictwa, na przykład domyślnie nazwać wszystkie nazwy interfejsów po adresie MAC:, cp /lib/udev/rules.d/80-net-setup-link.rules /etc/udev/rules.d/80-net-setup-link.rulesa następnie edytuj tam plik i zmień wiersze w razie potrzeby.
  • Przekaż w net.ifnames=0wierszu polecenia jądra.
Kyodake
źródło
6
Czy to jest źródło? Czy możesz dodać link do oficjalnej strony z informacjami o wersji dla Ubuntu (jestem pewien, że gdzieś nie można go znaleźć!)
Rmano
2
Tak, to jest źródło.
kyodake,
4
W ogóle nie ma sensu to, że zrobił aktualizację, a nie świeżą instalację. Brzmi to jak prawdziwy błąd Ubuntu, ponieważ aktualizacja powinna pozostawić system w stanie roboczym.
Czy
1
@kyodake nie ma folderu / usr / lib / udev w Ubuntu 15.10, jest / lib / udev
EdiD 16.01.2016
1
@EdiD: ok, błąd naprawiony.
kyodake
39

ArchWiki Beginnersguide ma łatwiejszy sposób .

Najpierw uzyskaj adres MAC urządzenia przez

$ ip link

Dane wyjściowe pokazują jak

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000     
          link/ether 20:68:9d:xx:xx:xx brd ff:ff:ff:ff:ff:ff

Twój adres MAC urządzenia to

20:68:9d:xx:xx:xx

Po prostu utwórz plik (po prostu otwórz z uprawnieniami sudo w edytorze tekstu)

$ nano /etc/udev/rules.d/10-network.rules    

Dodaj następujący wiersz

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="net1"

Zamień nazwę na poszukiwaną i aa: bb: cc: dd: ee: ff na adres MAC urządzenia.

Teraz uruchom ponownie komputer, a nazwa urządzenia powinna się zmienić.

JonnyTischbein
źródło
Najbardziej bezpośrednie i proste rozwiązanie! Ogromne dzięki!
3bdalla,
1
Aby upewnić się, że reguła NIE ma zastosowania do interfejsów vlan i mostów, dodaj DRIVERS=="?*",po ACTION=="add",. Zobacz także askubuntu.com/questions/767786/...
Donn Lee
16

Spróbuj tego: Edytuj swoje /etc/default/grub. Zmień linię z

GRUB_CMDLINE_LINUX=""

do

GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"

i wreszcie uruchom:

# update-grub

jako root i zrestartuj system.

Dênio Robson
źródło
Działa to również w przypadku netboot. Z powodzeniem append (...) net.ifnames=0 (...)
dodałem
To rozwiązanie działa również doskonale w Ubuntu 16.04!
Nullldata,
Musiałem dodać powyższe parametry GRUB (net.ifnames = 0) i usunąć reguły zmiany nazwy udev, aby vlany działały, ale teraz wszystko jest w porządku. Dzięki za rozwiązanie.
Albert Veli,
DZIĘKUJĘ CI. Instaluję Ubuntu Server 16.04 na bezgłowym serwerze i nie miałem pojęcia, jak się nazywa interfejs sieciowy, w wyniku czego serwer nie był w sieci. Zrobiłem to i upewniłem się, że / etc / network / interfaces ma „eth0” jako nazwę interfejsu i włożyłem dysk z powrotem na serwer. Jest teraz online. Instrukcje dotyczące instalacji Ubuntu na Acer Aspire H340 są w tym zakresie nieaktualne, więc napiszę coś w nadziei, że inni próbujący tego samego nie zmarnują tyle czasu, co ja.
MetalMikester
5

Wiem, że może to być trochę za późno i wydaje się, że dodanie reguły 10-network pomogło, ale nie całkowicie. Musiałem dodać nazwę jądra urządzenia, aby zmienić nazwę. Oto jak udało mi się uruchomić /etc/udev/rules.d/10-network.rules ...

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="MAC:ADDRESS",KERNEL=="enp4s8", NAME="eth0"

i zmień KERNEL == "" na to, na jakie jądro nazywa urządzenie podczas uruchamiania.

HTH

KC

Keith Clinton
źródło
3

Jeśli masz nową instalację

apt-get remove biosdevname

Następnie

update-initramfs -u

Sprawdź, czy masz plik udev net ruels. Jeśli tak, usuń go.

rm /etc/udev/rules.d/70-persistent-net.rules

Teraz edytuj / etc / network / interfaces, zmień nazwy interfejsów na eth0, eth1, ... itd.

Restart

RJ
źródło
2

Mam to działa, tworząc plik:

root@odroid:~# cat /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth0", NAME="eth0"
Mikael Lepistö
źródło