Korzystanie z przewidywalnych nazw interfejsów sieciowych z alternatywnymi jądrami

12

Niemal stale używam jąder z PPA jądra Ubuntu lub jądra, które sam skompilowałem, używając konfiguracji jądra Ubuntu.

Problem polega na tym, że kiedy używam standardowego jądra, domyślnie wydaje się, że używam przewidywalnych nazw interfejsów sieciowych (tj. „P4p1”), ale kiedy używam dowolnego alternatywnego jądra, domyślnie wydaje się, że używam starej metody (tj. „Eth0”).

Chociaż tak naprawdę nie ma związku z tym pytaniem, miałem awarię dysku twardego na moim komputerze testowym i robię nową instalację Ubuntu Server 14.04.2.

Nie byłem w stanie określić, jaka jest różnica między jądrami. Podejrzewam parametr konfiguracyjny jądra, ale nie byłem w stanie zidentyfikować, który z nich.

Moje pytanie: Jak sprawić, by przewidywalne nazwy interfejsów sieciowych działały spójnie we wszystkich jądrach?

Dodatkowe uwagi: Gdzieś widziałem, aby wyłączyć przewidywalne nazwy interfejsów sieciowych, aby dodać to do gruba:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 biosdevname=0"

więc pomyślałem, że może być odwrotnie:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1 biosdevname=1"

ale to nie miało znaczenia. Właściwie, nigdy nie mogę zmusić jądra, które nie jest w stanie magazynowym, do używania nazwy biologicznej, niezależnie od ustawienia. I nigdy nie mogę zmusić jądra podstawowego do wygenerowania /etc/udev/rules.d/70-persistent-net.rulespliku (chociaż nie tego chcę), bez względu na ustawienie net.ifnames. Jeśli tak net.ifnames=1, to przynajmniej nie-zapasowe jądro nie generuje niepoprawnego /etc/udev/rules.d/70-persistent-net.rulespliku.

Fragmenty /var/log/udev:
jądro zapasowe:

KERNEL[9.216730] add      /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1
IFINDEX=2
INTERFACE=p4p1
SEQNUM=1945
SUBSYSTEM=net
...
UDEV  [9.241073] add      /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1
ID_BUS=pci
ID_MODEL_FROM_DATABASE=P8P67 and other motherboards
ID_MODEL_ID=0x8168
ID_NET_NAME_MAC=enxf46d04652d8e
ID_NET_NAME_PATH=enp3s0
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
ID_PCI_CLASS_FROM_DATABASE=Network controller
ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Co., Ltd.
ID_VENDOR_ID=0x10ec
IFINDEX=2
INTERFACE=p4p1

Z jądra Ubuntu PPA 4.1RC5:

KERNEL[10.772566] add      /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0
IFINDEX=2
INTERFACE=eth0
SEQNUM=1962
SUBSYSTEM=net
...
UDEV  [11.185866] add      /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0
ID_BUS=pci
ID_MODEL_FROM_DATABASE=P8P67 and other motherboards
ID_MODEL_ID=0x8168
ID_NET_NAME_MAC=enxf46d04652d8e
ID_NET_NAME_PATH=enp3s0
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
ID_PCI_CLASS_FROM_DATABASE=Network controller
ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Co., Ltd.
ID_VENDOR_ID=0x10ec
IFINDEX=2
INTERFACE=eth0
SEQNUM=1962
SUBSYSTEM=net
USEC_INITIALIZED=3227

Uwaga: tymczasowo przeszedłem przez ten problem, umożliwiając utworzenie /etc/udev/rules.d/70-persistent-net.rulespliku, a następnie edycję go pod kątem prawidłowych nazw urządzeń. Ostatecznie chciałbym pozbyć się pliku.

Doug Smythies
źródło

Odpowiedzi:

34

Musisz rozróżnić 3 rzeczy:

  • Przewidywalne nazwy interfejsów
  • nazwa biologiczna
  • Reguła udev 70-persistent.rules

Możesz albo wybrać jedno z tych rozwiązań, ale nie używasz 2 lub 3 jednocześnie. (W rzeczywistości możesz, ale jedno będzie miało pierwszeństwo i zamaskuje inne)

Dobrym wprowadzeniem do obecnej sytuacji jest post na liście mailingowej Ubuntu dev

Przewidywalne nazwy interfejsów

Przewidywalne nazwy interfejsów to udevd rzecz odkąd v197 zostało wygenerowane/lib/udev/rules.d/80-net-setup-link.rules

systemd używa domyślnie nowej przewidywalnej nazwy interfejsu. Jednak , chyba że w systemie Ubuntu jest zainstalowany wcześniejszy system, musisz wyrazić zgodę, używającnet.ifnames=1

Nie ma znaczenia, jakiej wersji jądra używasz. Ale musisz użyć wiersza polecenia jądra, aby go skonfigurować, zmieniając konfigurację grub /etc/default/grub, na przykład:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1"

i biegnij

sudo update-grub

W 14.04 lub 14.10, bez systemd, powinno wystarczyć usunięcie 70-persitent-net.rules, jak opisano poniżej w nocie.

Biosdevname

biosdevname jest próbą rozwiązania podobnego problemu niż przewidywalna nazwa interfejsu w systemd. Jest to ustawienie domyślne na serwerze Ubuntu . Możesz go mieć, instalując pakietbiosdevname

sudo apt-get install biosdevname

Uwaga

Możesz to wyłączyć za pomocą wiersza polecenia jądra w grub config:

GRUB_CMDLINE_LINUX_DEFAULT="biosdevname=0"

i biegnij

sudo update-grub

lub po prostu odinstaluj pakiet.

sudo apt-get purge biosdevname
sudo update-initramfs -u

zasady udev

Jest to ustawienie domyślne na pulpicie Ubuntu . Udev reguła /lib/udev/rules.d/75-persistent-net-generator.rulestworzy podczas pierwszego uruchomienia niestandardowego zasad /etc/udev/rules.d/70-persistent-net.rulesz adresem MAC interfejsu, aby uzyskać trwałą nazwę interfejsu.

Uwaga

Jeśli już używasz reguł udev, musisz usunąć /etc/udev/rules.d/70-persistent-net.rulesi uniknąć ponownego generowania przy każdym rozruchu, który musisz uruchomić

sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules

Następnie, jeśli używasz systemd , musisz włączyć przewidywalną nazwę interfejsu, jak opisano powyżej.

przesilenie dnia z nocą
źródło
1
Dzięki za odpowiedź. Mój komputer to wersja serwerowa, a nie komputerowa. Prześlę edycję do twojej odpowiedzi, aby poradzić sobie z różnicą (nazwa_biodwa została zainstalowana domyślnie i dlatego należy ją specjalnie wyłączyć za pomocą gruba). Błąd w moim myśleniu polegał na tym, że spodziewałem się różnych nazw interfejsów net.ifnames=1i biosdevname=0, jak opisano w linku, który podałeś, ale otrzymałem stary eth0 i eth1. W każdym razie działa teraz dla każdego jądra (bez /etc/udev/rules.d/70-persistent-net.rules), po tym jak dokonałem edycji, /etc/network/interfacesaby odzwierciedlić prawidłowe nazwy interfejsów.
Doug Smythies
Jestem na komputerze z Ubuntu 15.10 i nie sądzę, że udev jest już domyślny. Moje urządzenia sieciowe mają nazwy wlp4s0i enp0s31f6pliki /etc/udev/rules.d/70-persistent-net.rulesi /lib/udev/rules.d/75-persistent-net-generator.rulesnie istnieją.
Jonathan Hartley
W Ubuntu 16.04 (konkretnie system 220-7 ) 75-persistent-net-generator.rulesplik jest przestarzały na korzyść net.ifnames.
200_success
4
  1. W Ubuntu Server 16.04LTS wszystko, co zrobiłem, to uruchomiłem:

    ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
    
  2. Następnie utwórz plik za pomocą

    sudo vi /etc/systemd/network/10-internet.link
    

    i dodaj następujące

    [Match]
    Path=pci-0000:(your device mac address)
    
    [Link]
    Name=eth0 (or whatever you want to name it)
    

    :wq aby zapisać plik

  3. następnie uruchom ponownie i dostosuj /etc/network/interfacesplik .. następnie uruchom ponownie

Mam nadzieję, że to komuś pomoże

Jadey1412
źródło