Имя сетевого интерфейса меняется после обновления до 15.10 - изменения udev

Я обновил виртуальную машину с сервером Ubuntu 15.04 до новой стабильной версии 15.10.

Не было никаких явных проблем, но после перезагрузки машина потеряла сетевое соединение. lspci показал правильную карту и lsmod Доказано, что драйвер был загружен.

Советы по редактированию или удалению /etc/udev/rules.d/70-persistent-net.rules не удалось (до сих пор нет сети, нет нового файла), знаменитый /lib/udev/write_net_rules даже не существовало.

Я не очень разбираюсь в udev и systemd, поэтому мне потребовалось некоторое время, чтобы найти в /sys/class/net, что имя сетевого интерфейса изменилось. Стало ens32, который был переименован из eth0, После того как я изменился /etc/network/interfaces связь по сети была снова включена.

Но - почему это вообще происходит? И если это произойдет, не должен ли файл интерфейсов обновляться автоматически?

Теперь, когда я удалил виртуальную сетевую карту и создал другую, eth0 становится eno16777728Это не так, приятно.

Следует ли сообщать об этом поведении (по крайней мере, о процедуре обновления) как об ошибке?

Кроме того, это /etc/udev/rules.d/70-persistent-net.rules устарел сейчас? И (хотя только частично связаны) /etc/udev/rules.d/70-persistent-cd.rules?)

Изменить - дополнительный вопрос (после принятого ответа) Зависимость от /etc/network/interfaces из фактического названия интерфейса надоело мне. Я попробовал новую установку * Ubuntu на другой виртуальной машине. К моему удивлению, /etc/network/interfaces содержит ссылку только на петлевое устройство. Однако с моей оригинальной виртуальной машиной это изменение помешало работе сети. Так что еще мне нужно изменить?

Редактировать Ну, из другого теста я обнаружил, что новый сервер Ubuntuимеет сетевую карту в /etc/network/interfaces, в то время как XUbuntu не имеет. Может быть, он использует network-manager или что-то другое.

6 ответов

Решение

В Ubuntu 15.10 (Wily Werewolf), начиная с systemd/udev, автоматически назначаются предсказуемые, стабильные имена сетевых интерфейсов для всех локальных интерфейсов Ethernet, Wlan и Wwan ( источник).

Следующие различные схемы именования сетевых интерфейсов теперь поддерживаются udev:

  1. Имена, включающие в себя встроенное ПО /BIOS, предоставляют индексные номера для встроенных устройств (пример: eno1)
  2. Имена, включающие встроенное ПО /BIOS, снабжены индексными номерами слотов горячего подключения PCI Express (пример: ens1)
  3. Названия, включающие физическое / географическое расположение разъема оборудования (пример: enp2s0)
  4. Имена, включающие MAC-адрес интерфейсов (пример: enx78e7d1ea46da)
  5. Классическое, непредсказуемое именование ядра ethX для ядра (пример: eth0) - устарел

По умолчанию systemd теперь будет называть интерфейсы следующей политикой:

  1. если эта информация из прошивки применима и доступна, возвращаясь к
  2. если эта информация из прошивки применима и доступна, возвращаясь к
  3. если применимо, отступая к
  4. не используется по умолчанию, но доступно, если пользователь выбирает так.
  5. во всех остальных случаях.

Как вы отключите это?

У вас в основном есть следующие варианты:

  • Создайте собственную схему именования вручную, например, назвав свои интерфейсы internet0 или lan0. Для этого создайте свой собственный файл правил udev и установите свойство name для устройств. Обязательно закажите его перед файлом политики по умолчанию, например, назвав его /etc/udev/rules.d/70-my-net-names.rules
  • Измените файл политики по умолчанию для выбора другой схемы именования, например, для присвоения имен всем именам интерфейсов после их MAC-адреса по умолчанию: cp /lib/udev/rules.d/80-net-setup-link.rules /etc/udev/rules.d/80-net-setup-link.rules, затем отредактируйте файл и измените строки, если необходимо.
  • Пройти net.ifnames=0 в командной строке ядра.

Существует более простой способ, которым рассказывает ArchWiki Beginnersguide.

Сначала получите MAC-адрес вашего устройства по

$ ip link

Выход показывают как

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

MAC-адрес вашего устройства

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

Просто создайте файл (просто откройте с правами sudo в текстовом редакторе)

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

Добавить следующую строку

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

Замените имя на требуемое имя и aa:bb:cc:dd:ee:ff на MAC-адрес вашего устройства.

Теперь просто перезагрузите компьютер, и имя устройства должно было измениться.

Попробуйте это: отредактируйте ваш /etc/default/grub, Изменить строку с

GRUB_CMDLINE_LINUX=""

в

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

и, наконец, запустить:

# update-grub

от имени root и перезагрузите систему.

Я знаю, что это может быть немного поздно, и добавление 10-network.rules, похоже, помогло, но не полностью. Мне пришлось добавить имя ядра устройства для переименования. Вот как я получил /etc/udev/rules.d/10-network.rules для работы...

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

и измените KERNEL=="" на то, что ваше ядро ​​называет устройством при загрузке.

НТН

KC

Если у вас свежая установка

apt-get remove biosdevname

затем

update-initramfs -u

Проверьте, есть ли у вас файл udev net ruels. Если так, удалите это.

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

Теперь отредактируйте /etc/network/interfaces, переименуйте интерфейсы в eth0, eth1, ... и т. Д.

перезагружать

Я получил это работает, создав файл:

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"
Другие вопросы по тегам