Використання передбачуваних імен мережевого інтерфейсу з альтернативними ядрами


12

Майже постійно я використовую ядра з PPA ядра Ubuntu , або ядра, які я склав сам, використовуючи конфігурацію ядра Ubuntu.

Проблема полягає в тому, що коли я використовую біржеве ядро, схоже, за замовчуванням використовуються передбачувані імена мережевого інтерфейсу (наприклад, "p4p1"), але коли я використовую будь-яке альтернативне ядро, воно, здається, за замовчуванням використовує старий метод (тобто "eth0").

Хоча це питання не стосується цього питання, у мене виникла помилка на жорсткому диску на моєму тестовому комп'ютері і я роблю нову установку Ubuntu Server 14.04.2.

Я не зміг визначити, у чому різниця між ядрами. Я підозрюю параметр конфігурації ядра, але не зміг визначити, який з них.

Моє запитання: Як змусити імена передбачуваного мережевого інтерфейсу послідовно працювати на всіх ядрах?

Додаткові примітки: Десь я бачив, щоб відключити передбачувані імена мережевого інтерфейсу, щоб додати це до grub:

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

тому я подумав, що навпаки може допомогти:

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

але це не мало значення. Насправді я ніколи не можу змусити ядро, що не працює, використовувати biosdevname, незалежно від налаштувань. І я ніколи не можу отримати біржеве ядро ​​для створення /etc/udev/rules.d/70-persistent-net.rulesфайлу (хоча це не те, що я хочу), незалежно від налаштування net.ifnames. Якщо у мене є net.ifnames=1, то принаймні ядро, яке не працює, не генерує неправильний /etc/udev/rules.d/70-persistent-net.rulesфайл.

Витяги з /var/log/udev:
ядра акцій:

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

З ядра 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

Примітка. Я тимчасово перемістився через цю проблему, дозволивши створити /etc/udev/rules.d/70-persistent-net.rulesфайл, а потім відредагував його для належних імен пристроїв. Зрештою, я хотів би позбутися файлу.

Відповіді:


34

Вам потрібно розрізняти 3 речі:

  • Передбачувані імена інтерфейсів
  • biosdevname
  • Правило 70-стійких.rules udev

Ви або вирішите скористатися одним із цих рішень, але не використовуєте одночасно 2 або 3. (Насправді ви можете, але один буде мати перевагу та маскувати інші (-і))

Хорошим вступом до поточної ситуації є публікація у списку розсилки ubuntu dev

Передбачувані імена інтерфейсу

Передбачувані імена інтерфейсу - це річ udevd , оскільки v197 створений в/lib/udev/rules.d/80-net-setup-link.rules

системне використання за замовчуванням нового передбачуваного імені інтерфейсу. Однак , якщо ви не використовуєте системний вхідний потік, в Ubuntu вам потрібно буде зареєструватися за допомогоюnet.ifnames=1

Не має значення версія запущеної ядра . Але вам потрібно скористатися командним рядком ядра, щоб налаштувати його, змінивши конфігурацію grub /etc/default/grub, наприклад:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1"

і біжи

sudo update-grub

У 14.04 чи 14.10, без системи, має бути достатньо видалити 70-постійних net.rules, як описано нижче в примітці.

Biosdevname

biosdevname - це спроба dell вирішити подібну проблему, ніж передбачувана назва інтерфейсу в systemd. Це за замовчуванням на сервері ubuntu . Ви можете мати його, встановивши пакетbiosdevname

sudo apt-get install biosdevname

Примітка

Ви можете відключити його, скориставшись командним рядком ядра в налаштуваннях grub:

GRUB_CMDLINE_LINUX_DEFAULT="biosdevname=0"

і біжи

sudo update-grub

або просто видаліть пакет.

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

правила удев

Це за замовчуванням на робочому столі Ubuntu . Udev правило /lib/udev/rules.d/75-persistent-net-generator.rulesстворює при першому завантаженні через призначені для користувача правила /etc/udev/rules.d/70-persistent-net.rulesз MAC - адресою вашого інтерфейсу , щоб отримати постійне ім'я для інтерфейсу.

Примітка

Якщо ви вже використовуєте правила udev, вам потрібно видалити /etc/udev/rules.d/70-persistent-net.rulesта уникнути його відновлення під час кожного завантаження, яке потрібно запустити

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

Після цього, якщо ви використовуєте systemd , вам потрібно ввімкнути передбачуване ім'я інтерфейсу, як описано вище.


1
Дякую за вашу відповідь. Мій комп'ютер - це серверне видання, а не настільне. Я надішлю редагування вашої відповіді, щоб розібратися з різницею (biosdevname було встановлено за замовчуванням і тому його потрібно спеціально відключити через grub). Помилка в моєму мисленні полягала в тому, що я очікував різних назв інтерфейсів із, net.ifnames=1і biosdevname=0, як описано у посиланні, яке ви надали, але я отримую старі eth0 та eth1. У будь-якому випадку, він працює для будь-якого ядра зараз (без /etc/udev/rules.d/70-persistent-net.rules), після того як я відредагував /etc/network/interfacesвідображення належних імен інтерфейсу.
Doug Smythies

Я на робочому столі ubuntu 15.10, і я не думаю, що udev вже не за замовчуванням. Мої мережеві пристрої названі wlp4s0і enp0s31f6, а файли /etc/udev/rules.d/70-persistent-net.rules& /lib/udev/rules.d/75-persistent-net-generator.rulesне існують.
Джонатан Хартлі

У Ubuntu 16.04 (зокрема систематизований 220-7 ) 75-persistent-net-generator.rulesфайл застарілий на користь net.ifnames.
200_успіх

4
  1. На Ubuntu Server 16.04LTS було запущено все, що я зробив:

    ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
    
  2. Потім створіть файл за допомогою

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

    і додати наступне

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

    :wq щоб зберегти файл

  3. потім перезавантажте та відрегулюйте /etc/network/interfacesфайл .. потім перезавантажте знову

Сподіваюся, що це комусь допоможе

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.