Вопрос или проблема
Я хочу включить постоянные сетевые имена в Debian Stretch, и самым надежным способом, похоже, является использование свойства ID_NET_NAME_PATH.
Однако мой .link файл игнорируется, и udev, похоже, использует свои собственные правила для именования интерфейсов.
Я сделал копию /lib/systemd/network/99-default.link и поместил ее в /etc/systemd/network, затем изменил NamePolicy на:
NamePolicy=path
Пример интерфейса – это ens2, который, похоже, был назван по политике “slot” вместо “path”. Запуск udevadm info /sys/class/net/ens2 дает:
P: /devices/pci0000:80/0000:80:02.0/0000:83:00.0/net/ens2
E: DEVPATH=/devices/pci0000:80/0000:80:02.0/0000:83:00.0/net/ens2
E: ID_BUS=pci
E: ID_MODEL_FROM_DATABASE=MT27500 Family [ConnectX-3]
E: ID_MODEL_ID=0x1003
E: ID_NET_DRIVER=mlx4_en
E: ID_NET_LINK_FILE=/etc/systemd/network/99-default.link
E: ID_NET_NAME_PATH=enp131s0
E: ID_NET_NAME_SLOT=ens2
E: ID_PATH=pci-0000:83:00.0
E: ID_PATH_TAG=pci-0000_83_00_0
E: ID_PCI_CLASS_FROM_DATABASE=Network controller
E: ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
E: ID_VENDOR_FROM_DATABASE=Mellanox Technologies
E: ID_VENDOR_ID=0x15b3
E: IFINDEX=8
E: INTERFACE=ens2
E: SUBSYSTEM=net
E: SYSTEMD_ALIAS=/sys/subsystem/net/devices/ens2
E: TAGS=:systemd:
E: USEC_INITIALIZED=15903053
Мой вопрос, почему интерфейс именуется как ens2, а не как enp131s0?
Необходимо выполнить update-initramfs -u
, чтобы эти изменения вступили в силу. Это копирует файл /etc/systemd/network/99-default.link
, который вы создали, в initramfs, чтобы он был доступен на раннем этапе загрузки системы, когда udev его требует.
Вы можете
udevadm trigger --action=add /sys/class/net/enp131s0
Чтобы применить изменения в файле link немедленно.
Ответ или решение
Проблема заключается в том, что система, вопреки ожиданиям, не использует файл .link для назначения имен сетевым интерфейсам, а вместо этого применяет собственные правила udev. Чтобы понять и решить эту проблему, проанализируем ситуацию, применяя подход TEA (Теория, Пример, Применение).
Теория
В системе Linux, в частности на основе Debian Stretch, systemd использует правила udev для задания имен сетевым интерфейсам. Это позволяет обеспечить более надежное и предсказуемое именование интерфейсов, особенно при изменении конфигурации оборудования. В рамках этого процесса используются файлы с расширением .link, которые обычно располагаются в каталогах /lib/systemd/network
и /etc/systemd/network
.
По умолчанию, система может использовать различные политики именования (например, на базе MAC-адреса, слота, пути и т.д.) для определения имен интерфейсов. Приоритет таких файлов или правил определяется их порядком загрузки, а также местоположением в каталогах.
Пример
В вашем случае, вы скопировали файл /lib/systemd/network/99-default.link
в каталог /etc/systemd/network
и изменили в нем параметр NamePolicy=path
, с целью использовать путь как основу для именования. Однако, несмотря на это, интерфейс все еще называется ens2
, что указывает на то, что используется политика слота вместо пути.
Вывод команды udevadm info
показывает, что интерфейс идентифицируется как ens2
, что соответствует слотовой политике, а также указывает на наличие в системе файла ссылки /etc/systemd/network/99-default.link
, который не применяется.
Применение
Для корректного применения изменений, которые вы внесли в файл .link, вам следует убедиться, что все этапы процесса настройки выполнены корректно:
-
Обновление initramfs: Изменения, сделанные в конфигурациях systemd, могут требовать обновления initramfs, потому что initramfs используется при ранней загрузке системы и может содержать старые версии файлов конфигурации. Для этого выполните команду:
update-initramfs -u
-
Проверка контроля версий файлов конфигурации: Убедитесь, что файл в
/etc/systemd/network
действительно загружается раньше других. Файлы в/etc/systemd/network
обычно имеют более высокий приоритет по сравнению с/lib/systemd/network
. -
Применение изменений без перезагрузки: Используйте команду
udevadm
для обновления статуса устройства и применения изменений:udevadm trigger --action=add /sys/class/net/ens2
-
Логирование и диагностика: Просмотрите журналы systemd и udev, чтобы понять, какие конкретно правила применяются к устройству:
journalctl -u systemd-udevd
-
Дополнительные проверки: Подтвердите, что другие правила не отменяют или не конфликтуют с вашими настройками. Это можно сделать путем поиска правил с потенциально более высоким приоритетом.
Следуя этим шагам, вы сможете обеспечить корректное применение изменений при назначении имен сетевых интерфейсов, и ваш интерфейс будет называться согласно правилам, заданным в файле .link.
Заключение
Проблема игнорирования .link файлов может быть вызвана незапланированным порядком загрузки конфигураций или необходимостью обновления initramfs. Тщательное выполнение рекомендаций и использование диагностических инструментов поможет найти и устранить проблему, обеспечив ожидаемую работу системы. Помните, что администрирование систем требует внимательного подхода к мелким деталям в конфигурациях и активного использования журналов для выявления причин отклонений в поведении системы.