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

Я обновил виртуальную машину под управлением Ubuntu server 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 или что-то еще.

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

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

  1. Имена, включающие прошивку/BIOS, предоставленные индексные номера для встроенных устройств (пример: eno1)
  2. Names incorporating Firmware/BIOS provided PCI Express hotplug slot index numbers (example: 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.

Сначала получите 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=="" на то, как ваше ядро называет устройство при загрузке.

HTH

К.К.

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

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.rulesSUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth0", NAME="eth0"

Та же ошибка снова появляется в 17.04. Надеюсь, только на стадии предварительного релиза.