Der Name der Netzwerkschnittstelle ändert sich nach der Aktualisierung auf 15.10 - udev

55

Ich habe eine virtuelle Maschine mit Ubuntu Server 15.04 auf die gerade veröffentlichte neue stabile Version 15.10 aktualisiert.

Es gab keine offensichtlichen Probleme, aber nach dem Neustart verlor der Computer seine Netzwerkverbindung. lspcizeigte die richtige Karte und lsmodbewies, dass der Fahrer geladen worden war.

Hinweise zum Bearbeiten oder Entfernen /etc/udev/rules.d/70-persistent-net.ruleswaren nicht erfolgreich (noch kein Netzwerk, keine neue Datei), die bekannten /lib/udev/write_net_rulesexistierten gar nicht.

Ich habe nicht viel Ahnung in Bezug auf udev und systemd, daher habe ich einige Zeit gebraucht, um in / sys / class / net festzustellen, dass sich der Name der Netzwerkschnittstelle geändert hat. Es wurde ens32, die von umbenannt wurde eth0. Nachdem ich das /etc/network/interfacesNetzwerk geändert habe , wurde die Kommunikation wieder aktiviert.

Aber - warum passiert das überhaupt? Und sollte die Interface-Datei in diesem Fall nicht automatisch aktualisiert werden?

Nun, da ich die virtuelle Netzwerkkarte gelöscht und eine andere erstellt habe, eth0wird eno16777728das nicht so, ähm, schön.

Sollte dieses Verhalten (zumindest das des Upgrade-Vorgangs) als Fehler gemeldet werden?

Außerdem ist /etc/udev/rules.d/70-persistent-net.rulesjetzt obsolet? Und (obwohl nur teilweise verwandt) was ist mit /etc/udev/rules.d/70-persistent-cd.rules?)

Bearbeiten - Zusatzfrage (nach akzeptierter Antwort) Die Abhängigkeit /etc/network/interfacesvom tatsächlichen Schnittstellennamen hat mich gestört. Ich habe versucht, * ubuntu in einer anderen virtuellen Maschine neu zu installieren. Zu meiner Überraschung /etc/network/interfacesenthielt ein Verweis nur auf das Loopback-Gerät. Bei meiner ursprünglichen VM verhinderte diese Änderung jedoch das Hochfahren des Netzwerks. Was muss ich sonst noch ändern?

Bearbeiten Nun, von einem anderen Test fand ich , dass ein neuer Ubuntu Server verfügt über die Netzwerkkarte in /etc/network/interfaces, während Xubuntu nicht hat. Vielleicht benutzt es network-manageretwas anderes.

JeffRSon
quelle
Der selbe Bug taucht auch am 17.04 wieder auf. Hoffe nur während der Pre-Release-Phase.
Avtomaton

Antworten:

56

In Ubuntu 15.10 (Wily Werewolf) werden ab systemd / udev automatisch vorhersehbare, stabile Netzwerkschnittstellennamen für alle lokalen Ethernet-, Wlan- und Wwan-Schnittstellen ( Quelle ) zugewiesen .

Die folgenden unterschiedlichen Benennungsschemata für Netzwerkschnittstellen werden jetzt von udev nativ unterstützt:

  1. Names Firmware / BIOS enthält versehen Indexnummern für Bordgeräte (zB eno1)
  2. Firmware / BIOS bereitgestellt PCI Express Hotplug - Slot - Index - Nummern (Beispiel: Namen enthalten ens1)
  3. Namen enthält physikalische / geographische Position des Anschlusses der Hardware (Beispiel: enp2s0)
  4. Name des Schnittstellen des MAC - Adresse enthält (Beispiel: enx78e7d1ea46da)
  5. Klassische, unvorhersehbare kernel-native ethX-Benennung (Beispiel:) eth0- veraltet

Standardmäßig benennt systemd jetzt die Schnittstellen nach folgender Richtlinie:

  1. Wenn diese Informationen aus der Firmware zutreffen und verfügbar sind, greifen Sie auf zurück
  2. Wenn diese Informationen aus der Firmware zutreffen und verfügbar sind, greifen Sie auf zurück
  3. falls zutreffend, zurückgreifen auf
  4. wird standardmäßig nicht verwendet, ist aber verfügbar, wenn der Benutzer dies wählt.
  5. in allen anderen Fällen.

Wie deaktivierst du das?

Sie haben grundsätzlich folgende Möglichkeiten:

  • Erstellen Sie ein eigenes manuelles Benennungsschema, indem Sie beispielsweise die Schnittstellen internet0 oder lan0 benennen. Erstellen Sie dazu Ihre eigene udev-Regeldatei und legen Sie die Namenseigenschaft für die Geräte fest. Stellen Sie sicher, dass Sie es vor der Standardrichtliniendatei bestellen, indem Sie es beispielsweise benennen/etc/udev/rules.d/70-my-net-names.rules
  • Ändern Sie die Standardrichtliniendatei, um ein anderes Benennungsschema auszuwählen, z. B. um alle Schnittstellennamen standardmäßig nach ihrer MAC-Adresse zu benennen. cp /lib/udev/rules.d/80-net-setup-link.rules /etc/udev/rules.d/80-net-setup-link.rulesBearbeiten Sie dann die Datei dort und ändern Sie die Zeilen nach Bedarf.
  • Übergeben Sie die net.ifnames=0in der Kernel-Befehlszeile.
Kyodake
quelle
6
Ist das die Quelle? Kannst du einen Link zur offiziellen Release-Note-Seite für Ubuntu hinzufügen (ich bin sicher, es ist irgendwo, kann es nicht finden!)
Rmano
2
Ja, das ist die Quelle.
Kyodake
4
Was überhaupt keinen Sinn ergibt, ist, dass er ein Upgrade durchgeführt hat, keine Neuinstallation. Dies klingt nach einem tatsächlichen Ubuntu-Fehler, da das Upgrade das System in einem funktionierenden Zustand belassen sollte.
Wird
1
@kyodake es gibt keinen / usr / lib / udev Ordner in Ubuntu 15.10, es gibt / lib / udev
EdiD
1
@EdiD: ok, Fehler behoben.
Kyodake
39

Es gibt einen einfacheren Weg, den der ArchWiki-Anfängerleitfaden beschreibt .

Holen Sie sich zunächst Ihre Geräte-MAC-Adresse durch

$ ip link

Die Ausgabe zeigt von like

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

Die MAC-Adresse Ihres Geräts lautet

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

Einfach die Datei erstellen (einfach mit sudo-Rechten in einem Texteditor öffnen)

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

Fügen Sie folgende Zeile hinzu

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

Ersetzen Sie den Namen durch Ihren gewünschten Namen und aa: bb: cc: dd: ee: ff durch die MAC-Adresse Ihres Geräts.

Starten Sie jetzt einfach Ihren Computer neu und der Gerätename sollte sich geändert haben.

JonnyTischbein
quelle
Die direkteste und einfachste Lösung! Vielen Dank!
3.
1
Um sicherzustellen, dass die Regel NICHT für Ihre VLAN- und Bridge-Schnittstellen gilt, fügen Sie DRIVERS=="?*",after hinzu ACTION=="add",. Siehe auch askubuntu.com/questions/767786/…
Donn Lee
16

Versuchen Sie dies: Bearbeiten Sie Ihre /etc/default/grub. Ändern Sie die Zeile von

GRUB_CMDLINE_LINUX=""

zu

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

und zum Schluss:

# update-grub

als root, und starten Sie Ihr System neu.

Dênio Robson
quelle
Dies funktioniert auch für Netboot. Ich hatte Erfolg, als ich der anhängenden Anweisung in meiner syslinux.cfg-Datei Folgendes hinzufügte: append (...) net.ifnames=0 (...)
carestad
Diese Lösung funktioniert auch in Ubuntu 16.04 einwandfrei!
Nullldata
Ich musste die oben genannten GRUB-Parameter (net.ifnames = 0) hinzufügen und die udev-Umbenennungsregeln entfernen, damit vlans funktioniert, aber jetzt ist alles in Ordnung. Danke für die Lösung.
Albert Veli
DANKESCHÖN. Ich installiere Ubuntu Server 16.04 auf einem kopflosen Server und hatte keine Ahnung, wie der Name der Netzwerkschnittstelle lautete und der Server war daher nicht im Netzwerk. Ich tat dies und stellte sicher, dass / etc / network / interfaces "eth0" als den Schnittstellennamen hatte und legte das Laufwerk wieder in den Server. Es ist jetzt online. Anweisungen zur Installation von Ubuntu auf dem Acer Aspire H340 sind in dieser Hinsicht nicht mehr aktuell. Daher schreibe ich etwas in der Hoffnung, dass andere, die das Gleiche versuchen, nicht so viel Zeit verschwenden wie ich.
MetalMikester
5

Ich weiß, dass dies etwas spät sein kann und das Hinzufügen der 10-network.rules scheint geholfen zu haben, aber nicht vollständig. Ich musste den Kernelnamen des Geräts hinzufügen, um es umzubenennen. So habe ich die /etc/udev/rules.d/10-network.rules zum Laufen gebracht ...

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

und ändern Sie den KERNEL == "" in den Namen Ihres Kernels, der das Gerät beim Booten nennt.

HTH

KC

Keith Clinton
quelle
3

Wenn Sie eine Neuinstallation haben

apt-get remove biosdevname

Dann

update-initramfs -u

Überprüfen Sie, ob Sie eine udev net ruels-Datei haben. Wenn ja, entfernen Sie es.

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

Bearbeiten Sie nun / etc / network / interfaces und benennen Sie die Schnittstellen in eth0, eth1, ... etc um.

Starten Sie neu

RJ
quelle
2

Ich habe dies erreicht, indem ich eine Datei erstellt habe:

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ö
quelle