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

43

Я обновил виртуальную машину, на которой запущен сервер 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 , что не так, uhm, nice.

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

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

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

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

    
задан JeffRSon 23.10.2015 в 22:13
источник

6 ответов

47

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

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

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

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

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

Как отключить это?

В основном у вас есть следующие опции:

  • Создайте свою собственную схему именования вручную, например, назвав свои интерфейсы internet0 или lan0. Для этого создайте свой собственный файл правил udev и установите для него имя свойства. Обязательно закажите его перед файлом политики по умолчанию, например, назвав его /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 в командной строке ядра.
ответ дан kyodake 24.10.2015 в 01:23
источник
29

Существует более простой способ, описанный Beginnersguide 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-адресом вашего устройства.

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

    
ответ дан JonnyTischbein 27.10.2015 в 14:27
14

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

GRUB_CMDLINE_LINUX=""

к

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

и, наконец, выполните:

# update-grub

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

    
ответ дан Dênio Robson 12.02.2016 в 02:15
3

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

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

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

НТН

K.C.

    
ответ дан Keith Clinton 07.11.2015 в 03:15
2

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

apt-get remove biosdevname

Тогда

update-initramfs -u

Убедитесь, что у вас есть файл udev net ruels. Если это так, удалите его.

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

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

Перезагрузка     

ответ дан R J 26.11.2015 в 10:41
0

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

[email protected]:~# 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"
    
ответ дан Mikael Lepistö 19.08.2016 в 11:44