Имя сетевого интерфейса меняется после обновления до 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:
- Имена, включающие в себя встроенное ПО /BIOS, предоставляют индексные номера для встроенных устройств (пример:
eno1
) - Имена, включающие встроенное ПО /BIOS, снабжены индексными номерами слотов горячего подключения PCI Express (пример:
ens1
) - Названия, включающие физическое / географическое расположение разъема оборудования (пример:
enp2s0
) - Имена, включающие MAC-адрес интерфейсов (пример:
enx78e7d1ea46da
) - Классическое, непредсказуемое именование ядра ethX для ядра (пример:
eth0
) - устарел
По умолчанию systemd теперь будет называть интерфейсы следующей политикой:
- если эта информация из прошивки применима и доступна, возвращаясь к
- если эта информация из прошивки применима и доступна, возвращаясь к
- если применимо, отступая к
- не используется по умолчанию, но доступно, если пользователь выбирает так.
- во всех остальных случаях.
Как вы отключите это?
У вас в основном есть следующие варианты:
- Создайте собственную схему именования вручную, например, назвав свои интерфейсы 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"