Verwendung vorhersagbarer Netzwerkschnittstellennamen mit alternativen Kerneln

10

Fast ständig verwende ich Kernel aus dem Ubuntu-Kernel-PPA oder selbst kompilierte Kernel mit der Ubuntu-Kernel-Konfiguration.

Das Problem ist, wenn ich den Standard-Kernel verwende, werden standardmäßig vorhersagbare Netzwerkschnittstellennamen verwendet (z. B. "p4p1"), aber wenn ich einen anderen Kernel verwende, wird standardmäßig die alte Methode verwendet (z. B. "eth0").

Obwohl dies für diese Frage nicht wirklich relevant ist, hatte ich auf meinem Testcomputer einen Festplattenfehler und führe eine Neuinstallation von Ubuntu Server 14.04.2 durch.

Ich konnte nicht feststellen, was der Unterschied zwischen den Kerneln ist. Ich vermute einen Kernel-Konfigurationsparameter, konnte jedoch keinen identifizieren.

Meine Frage: Wie kann ich sicherstellen, dass vorhersehbare Netzwerkschnittstellennamen für alle Kernel konsistent funktionieren?

Zusätzliche Hinweise: Irgendwo sah ich vorhersehbare Netzwerkschnittstellennamen deaktivieren, um dies zu grub hinzuzufügen:

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

Also dachte ich, das Gegenteil könnte helfen:

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

aber es machte keinen Unterschied. Eigentlich kann ich nie den Nicht-Standard-Kernel dazu bringen, Biosdevname zu verwenden, unabhängig von der Einstellung. Und ich kann niemals den Stock-Kernel dazu bringen, eine /etc/udev/rules.d/70-persistent-net.rulesDatei zu generieren (obwohl das nicht das ist, was ich will), unabhängig von der Einstellung von net.ifnames. Wenn ja net.ifnames=1, dann generiert zumindest der Nicht-Stock-Kernel keine falsche /etc/udev/rules.d/70-persistent-net.rulesDatei.

Auszüge aus /var/log/udev:
Aktienkern:

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

Vom Ubuntu PPA-Kernel 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

Hinweis: Ich habe dieses Problem vorübergehend behoben, indem ich das Erstellen einer /etc/udev/rules.d/70-persistent-net.rulesDatei und das anschließende Bearbeiten der richtigen Gerätenamen zugelassen habe. Letztendlich möchte ich die Datei loswerden.

Doug Smythies
quelle

Antworten:

30

Sie müssen zwischen 3 Dingen unterscheiden:

  • Vorhersagbare Schnittstellennamen
  • biosdevname
  • 70-persistent.rules udev-Regel

Sie entscheiden sich entweder für eine dieser Lösungen , verwenden jedoch nicht 2 oder 3 gleichzeitig. (Tatsächlich können Sie, aber einer wird Vorrang haben und den anderen maskieren.)

Eine gute Einführung in die aktuelle Situation ist der Post auf der Ubuntu Dev-Mailingliste

Vorhersehbare Schnittstellennamen

Vorhersehbare Interface - Name ist eine udevd Sache seit V197 erzeugt in/lib/udev/rules.d/80-net-setup-link.rules

systemd verwendet standardmäßig den neuen vorhersagbaren Schnittstellennamen. Unter Ubuntu müssen Sie sich jedoch anmelden, sofern Sie kein Upstream-System verwendennet.ifnames=1

Es spielt keine Rolle, welche Kernel-Version Sie ausführen. Sie müssen jedoch die Kernel-Befehlszeile verwenden, um sie zu konfigurieren, indem Sie die Grub-Konfiguration /etc/default/grubwie folgt ändern :

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1"

und Renn

sudo update-grub

In 14.04 oder 14.10 sollte es ohne systemd ausreichen, 70-persitent-net.rules zu entfernen, wie im folgenden Hinweis beschrieben.

Biosdevname

biosdevname ist ein Versuch, ein ähnliches Problem zu lösen wie der vorhersagbare Schnittstellenname in systemd. Dies ist die Standardeinstellung auf dem Ubuntu-Server . Sie können es haben, indem Sie das Paket installierenbiosdevname

sudo apt-get install biosdevname

Hinweis

Sie können es deaktivieren, indem Sie die Kernel-Befehlszeile in grub config verwenden:

GRUB_CMDLINE_LINUX_DEFAULT="biosdevname=0"

und Renn

sudo update-grub

oder deinstallieren Sie einfach das Paket.

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

udev Regeln

Dies ist die Standardeinstellung auf dem Ubuntu-Desktop . Die udev- Regel /lib/udev/rules.d/75-persistent-net-generator.ruleserstellt beim ersten Start benutzerdefinierte Regeln /etc/udev/rules.d/70-persistent-net.rulesmit der MAC-Adresse Ihrer Schnittstelle, um einen dauerhaften Namen für Ihre Schnittstelle zu erhalten.

Hinweis

Wenn Sie bereits udev-Regeln verwenden, müssen Sie diese entfernen /etc/udev/rules.d/70-persistent-net.rulesund verhindern, dass sie bei jedem Neustart neu generiert werden, den Sie ausführen müssen

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

Wenn Sie danach systemd verwenden , müssen Sie sich wie oben beschrieben für einen vorhersehbaren Schnittstellennamen entscheiden.

Sonnenwende
quelle
1
Danke für deine Antwort. Mein Computer ist eine Server Edition, keine Desktop Edition. Ich werde eine Änderung an Ihre Antwort senden, um den Unterschied zu beheben (Biosdevname wurde standardmäßig installiert und muss daher über Grub speziell deaktiviert werden). Der Fehler in meinem Denken war, dass ich verschiedene Schnittstellennamen mit net.ifnames=1und erwartete biosdevname=0, wie in dem von Ihnen angegebenen Link beschrieben, aber ich bekomme die alten eth0 und eth1. Wie auch immer, es funktioniert jetzt für jeden Kernel (ohne /etc/udev/rules.d/70-persistent-net.rules), nachdem ich ihn bearbeitet habe /etc/network/interfaces, um die richtigen Schnittstellennamen wiederzugeben.
Doug Smythies
Ich arbeite auf dem Ubuntu 15.10-Desktop und glaube nicht, dass udev der Standard ist. Meine Netzwerkgeräte heißen wlp4s0und enp0s31f6und die Dateien /etc/udev/rules.d/70-persistent-net.rules& /lib/udev/rules.d/75-persistent-net-generator.rulesexistieren nicht.
Jonathan Hartley
In Ubuntu 16.04 (speziell systemd 220-7 ) wird die 75-persistent-net-generator.rulesDatei zugunsten von veraltet net.ifnames.
200_success
3
  1. In Ubuntu Server 16.04LTS war alles, was ich getan habe, ausgeführt:

    ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
    
  2. Dann erstellen Sie die Datei mit

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

    und fügen Sie Folgendes hinzu

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

    :wq um die Datei zu speichern

  3. Starten Sie dann neu und passen Sie Ihre /etc/network/interfacesDatei an. Starten Sie dann erneut

Hoffe das hilft jemandem

Jadey1412
quelle