Как выполнить сброс /etc/networking/interfaces
при использовании «предсказуемых имен сетевых интерфейсов»?
Версии Ubuntu старше 15.10 используют имена сетевых адаптеров, такие как:
eth0
eth1
eth2
Замена сетевой карты или перемещение виртуальной машины на новый гипервизор приведет к тому, что Linux увеличит номер интерфейса. Удаление /etc/udev/rules.d/70-peristent-net.rules
приведет к повторному использованию Linux eth0
.
В Ubuntu 15.10 и новее используются « Предсказуемые имена сетевых интерфейсов ». Имя сетевого адаптера происходит от MAC-адреса.
ens3
ens32
ens192
При миграции vm сеть не запускается, поскольку /etc/network/interfaces
все еще ссылается на старый несуществующий сетевой адаптер.
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto ens32
iface ens32 inet dhcp
pre-up sleep 2
Как лучше всего сбросить файл / etc / network / interfaces?
Мне нужно выполнить это действие перед выключением виртуальной машины и миграцией на новый гипервизор, поскольку я использую упаковщик для создания автоматических золотых изображений, основанных на золотых изображениях шеф-повара / бенто .
Я обнаружил, что удаление / etc / network / interfaces не работает, так как файл не восстанавливается автоматически при следующей загрузке после миграции.
Я попытался отредактировать мой файл grub, чтобы вернуться к соглашению об именах 'eth0'. Хотя / etc / network / interfaces ссылается на старое имя (eth0), виртуальный компьютер не получит ip, и любые перезагрузки заставят виртуальный сервер использовать новое соглашение об именах. Кроме того, я обнаружил, что systemd всегда будет иметь приоритет, если я не могу гарантировать biosdevname=0
постоянное сохранение в конфигурации grub . Не уверен, как навсегда применить это
GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 bios.devname=0"
Если возможно, я бы предпочел не использовать облачную инициализацию или использовать какие-либо сценарии после запуска, так как я бы предпочел сохранять золотые изображения как можно более чистыми.
Конечно, это проблема, которую облачные провайдеры (Azure, AWS, RackSpace, Openstack) уже решили при импорте vms. Я не могу быть первым, кто попытается перенести виртуальную машину, используя предсказуемые имена сетевых интерфейсов.
Я пытался запустить эти команды перед выключением и миграцией виртуальной машины
apt-get remove biosdevname -y;
ln -s /dev/null /etc/systemd/network/99-default.link;
Я нахожу, когда я перенести VM, что /etc/network/interfaces
и ip address
до сих пор ссылаются наens32
Ответы:
Я думаю, что OpenStack использует cloud-init, формат ConfigDrive и предоставляет сетевую конфигурацию, соответствующую оборудованию виртуальной машины. Источники:
Если вы исключите скрипт первой загрузки, есть один очевидный ответ.
https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/
Переключение на старые постоянные имена интерфейсов не является одним из документированных вариантов.
Другой альтернативой является настройка, при которой сетевые интерфейсы включены по умолчанию независимо от их точного имени. Я думаю, что NetworkManager поддерживает это по умолчанию. systemd-networkd также может быть сказано сделать это .
Как только у вас будет более одного сетевого устройства для виртуальной машины, им, вероятно, все равно понадобится определенная конфигурация ...
Помимо виртуальных машин, есть одно очевидное преимущество подхода в стиле NetworkManager: ПК может иметь несколько сетевых интерфейсов, возможно, разных типов, при этом подключен только один из них. Например, это можно увидеть на некоторых платах премиум-класса или в системе, где первый сетевой интерфейс не работал должным образом, а второй интерфейс был установлен в какой-то момент.
источник
ln -s /dev/null /etc/systemd/network/99-default.link
это не имеет значения. мой vms все еще использует новое соглашение об именах.Я отказался от попыток сделать это чисто, и придумал следующий взломать. Запустив следующий сценарий непосредственно перед выключением и миграцией виртуальной машины, виртуальный адаптер будет иметь eth0 в качестве сетевого адаптера при включении.
Строго говоря,
apt-get remove biosdevname
не требуется, поскольку этот пакет по умолчанию не установлен в Ubuntu 16.04. Кроме того, добавлениеbios.devname=0
кGRUB_CMDLINE_LINUX_DEFAULT
не требуется, так как biosdevname не установлен. Это предотвращает разрыв сети, если biosdevname будет установлено в будущем.источник
Вам нужны предсказуемые имена сетевых интерфейсов?
Мое решение состояло в том, чтобы удалить
biosdevname
, и это надежно привело к тому, что сетевые интерфейсы всегда назывались eth0, eth1 и так далее. Я не нашел веских причин для того, чтобы установить предсказуемые имена сетевых интерфейсов или имена biosdevname.Здесь
/etc/udev/rules.d/70-persistent-net.rules
вы можете изменить имя аппаратного mac-адреса на eth0, eth1 и т. д. Я обычно удаляю содержимое этого файла, сохраняю его как пустой файл, перезагружаюсь, затем у меня появляется чистый лист с правильными сетевыми адаптерами, которые появляются ...^^ где xx: xx: xx: xx: xx: xx - это уникальный mac-адрес ваших сетевых адаптеров.
Я знаю, что вы упоминаете, что удаление этого файла не является решением, но я публикую приведенный выше пример, потому что, по крайней мере, в Suse именно он
/lib/udev/write_net_rules
создает этот файл. Посмотрите, поможет ли обратное отслеживание этого файла, если оно применимо к вашему дистрибутиву, вы можете изменить его, чтобы решить вашу проблему.обратите внимание, что это то, что я знаю из Suse версии 11, которая является старым способом Init, до systemd. Не уверен, что это изменилось для последних версий Linux под systemd.
источник
Наткнулся на это обновление хостов Ubuntu 14.04 до 16.04.
biosdevname
пакет не установлен так , прибегли к"biosdevname=0 net.ifnames=0"
в ,/etc/default.grub
как указано на ОП.Я запускаю этот сценарий, и если вывод выглядит хорошо, перенаправьте вывод
/etc/udev/rules.d/70-persistent-net.rules
для создания новых правил udev на случай, если ядро когда-нибудь решит перечислить порты Ethernet в другом порядке.источник