Вопрос Использование прогнозируемых имен сетевого интерфейса с альтернативными ядрами


Почти постоянно я использую ядра из Ядро Ubuntu PPA, или ядра, которые я скомпилировал, используя конфигурацию ядра 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 файл, который будет создан, а затем отредактируйте его для правильных имен устройств. В конечном счете, я хотел бы избавиться от файла.


9
2018-05-25 23:56


происхождения




ответы:


Вам нужно различать 3 вещи:

  • Предсказуемые имена интерфейсов
  • biosdevname
  • 70-persistent.rules udev правило

Вы либо решили использовать одно из этих решений но вы не используете 2 или 3 одновременно. (Фактически, вы можете, но один из них будет иметь приоритет и замаскировать другие (и))

Хорошим введением в текущую ситуацию является сообщение в списке рассылки ubuntu dev

Предсказуемые имена интерфейсов

Предсказуемые имена интерфейсов это udevd вещь с v197, сгенерированная в /lib/udev/rules.d/80-net-setup-link.rules

Systemd используйте по умолчанию новое предсказуемое имя интерфейса. Однако, если только в upstream systemd, в Ubuntu, вы должны сделать выбор, используя net.ifnames=1

Это не имеет значения для версии ядра Ты бежишь. Но вам нужно использовать командную строку ядра, чтобы настроить ее, изменив конфигурацию grub /etc/default/grub, как:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1"

и запустить

sudo update-grub

В 14.04 или 14.10 без systemd должно быть достаточно удалить 70-persitent-net.rules, как описано ниже в примечании.

Biosdevname

biosdevname является попыткой dell решить подобную проблему, чем предсказуемое имя интерфейса в systemd. Это значение по умолчанию сервер ubuntu, Вы можете установить его, установив пакет biosdevname

sudo apt-get install biosdevname

Заметка

Вы можете отключить его, используя командную строку ядра в config grub:

GRUB_CMDLINE_LINUX_DEFAULT="biosdevname=0"

и запустить

sudo update-grub

или просто удалите пакет.

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

udev правила

Это значение по умолчанию Рабочий стол 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, тогда вам нужно выбрать для предсказуемого имени интерфейса, как описано выше.


27
2018-05-26 15:14



Спасибо за Ваш ответ. Мой компьютер - это серверная версия, а не настольная версия. Я отвечу на ваш ответ, чтобы разобраться с разницей (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 не существует. - Jonathan Hartley
В Ubuntu 16.04 (в частности systemd 220-7), 75-persistent-net-generator.rules файл устарел в пользу net.ifnames, - 200_success


  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 файл .. затем снова перезагрузитесь

Надеюсь, это поможет кому-то


3
2017-10-04 00:36