Utilizzo di nomi di interfaccia di rete prevedibili con kernel alternativi


12

Quasi costantemente, utilizzo i kernel dal kernel PPA di Ubuntu , o kernel che ho compilato da solo, usando la configurazione del kernel di Ubuntu.

Il problema è che quando sto usando il kernel stock sembra predefinito usare nomi di interfaccia di rete prevedibili (es. "P4p1"), ma quando uso un kernel alternativo sembra predefinito usare il vecchio metodo (es. "Eth0").

Pur non essendo rilevante per questa domanda, ho riscontrato un errore del disco rigido sul mio computer di prova e sto eseguendo una nuova installazione di Ubuntu Server 14.04.2.

Non sono stato in grado di determinare qual è la differenza tra i kernel. Sospetto un parametro di configurazione del kernel, ma non sono stato in grado di identificare quale.

La mia domanda: come posso fare in modo che i nomi delle interfacce di rete prevedibili funzionino in modo coerente su tutti i kernel?

Note aggiuntive: da qualche parte ho visto disabilitare i nomi di interfaccia di rete prevedibili per aggiungere questo a grub:

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

quindi, ho pensato che il contrario potesse aiutare:

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

ma non ha fatto differenza. In realtà, non riesco mai a ottenere il kernel non stock per usare biosdevname, indipendentemente dall'impostazione. E non riesco mai a far generare un /etc/udev/rules.d/70-persistent-net.rulesfile al kernel stock (anche se non è quello che voglio), indipendentemente dall'impostazione di net.ifnames. Se ho net.ifnames=1, almeno il kernel non stock non genera un /etc/udev/rules.d/70-persistent-net.rulesfile errato .

Estratti da /var/log/udev:
stock kernel:

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

Dal kernel 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

Nota: ho temporaneamente superato questo problema consentendo la /etc/udev/rules.d/70-persistent-net.rulescreazione di un file e quindi modificandolo per i nomi di dispositivo corretti. Alla fine, vorrei liberarmi del file.

Risposte:


33

Devi distinguere tra 3 cose:

  • Nomi di interfacce prevedibili
  • biosdevname
  • Regola udev 70-persistent.rules

O scegli di utilizzare una di queste soluzioni ma non usi 2 o 3 contemporaneamente. (In effetti, puoi ma uno avrà la precedenza e maschererà l'altro / i)

Una buona introduzione alla situazione attuale è il post sulla mailing list di sviluppo di Ubuntu

Nomi di interfaccia prevedibili

Nomi di interfaccia prevedibili sono udevd da quando è stata generata la v197/lib/udev/rules.d/80-net-setup-link.rules

systemd usa di default il nuovo nome di interfaccia prevedibile. Tuttavia , a meno che non sia installato upd systemd, in Ubuntu, è necessario opt-in usandonet.ifnames=1

Non importa la versione del kernel in esecuzione. Ma devi usare la riga di comando del kernel per configurarla cambiando la configurazione di grub /etc/default/grub, come:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1"

e corri

sudo update-grub

In 14.04 o 14.10, senza systemd, dovrebbe essere sufficiente rimuovere 70-persitent-net.rules, come descritto di seguito nella nota.

biosdevname

biosdevname è un tentativo dell di risolvere un problema simile al nome dell'interfaccia prevedibile in systemd. È l'impostazione predefinita sul server Ubuntu . Puoi averlo installando il pacchettobiosdevname

sudo apt-get install biosdevname

Nota

Puoi disabilitarlo usando la riga di comando del kernel in grub config:

GRUB_CMDLINE_LINUX_DEFAULT="biosdevname=0"

e corri

sudo update-grub

o semplicemente disinstallare il pacchetto.

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

regole udev

Questa è l'impostazione predefinita sul desktop Ubuntu . La regola udev/lib/udev/rules.d/75-persistent-net-generator.rules crea al primo avvio regole personalizzate /etc/udev/rules.d/70-persistent-net.rulescon indirizzo MAC dell'interfaccia per ottenere un nome persistente per l'interfaccia.

Nota

Se stai già utilizzando le regole udev, devi rimuoverlo /etc/udev/rules.d/70-persistent-net.rulesed evitare che venga rigenerato ad ogni avvio che devi eseguire

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

Successivamente, se si utilizza systemd , è necessario attivare il nome dell'interfaccia prevedibile, come descritto sopra.


1
Grazie per la tua risposta. Il mio computer è un'edizione server, non un'edizione desktop. Invierò una modifica alla tua risposta per affrontare la differenza (biosdevname è stato installato di default e quindi deve essere specificamente disabilitato tramite grub). L'errore nel mio pensiero era che mi aspettavo nomi di interfaccia diversi con net.ifnames=1e biosdevname=0, come descritto nel link che hai dato, ma ottengo il vecchio eth0 ed eth1. Ad ogni modo, funziona per qualsiasi kernel ora (senza no /etc/udev/rules.d/70-persistent-net.rules), dopo che ho modificato /etc/network/interfacesper riflettere i nomi di interfaccia corretti.
Doug Smythies,

Sono su Ubuntu 15.10 desktop e non credo più che udev sia l'impostazione predefinita. I miei dispositivi di rete sono chiamati wlp4s0e enp0s31f6, e i file /etc/udev/rules.d/70-persistent-net.rulese /lib/udev/rules.d/75-persistent-net-generator.rulesnon esistono.
Jonathan Hartley,

In Ubuntu 16.04 (in particolare systemd 220-7 ), il 75-persistent-net-generator.rulesfile è deprecato a favore di net.ifnames.
200_successo

4
  1. In Ubuntu Server 16.04LTS tutto ciò che ho fatto è stato eseguito:

    ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
    
  2. Quindi creare il file utilizzando

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

    e aggiungi quanto segue

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

    :wq per salvare il file

  3. quindi riavviare e regolare il /etc/network/interfacesfile .. quindi riavviare di nuovo

Spero che questo aiuti qualcuno

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.