Почему мой файл ссылки systemd игнорируется?

Вопрос или проблема

Я хочу включить постоянные сетевые имена в 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, вам следует убедиться, что все этапы процесса настройки выполнены корректно:

  1. Обновление initramfs: Изменения, сделанные в конфигурациях systemd, могут требовать обновления initramfs, потому что initramfs используется при ранней загрузке системы и может содержать старые версии файлов конфигурации. Для этого выполните команду:

    update-initramfs -u
  2. Проверка контроля версий файлов конфигурации: Убедитесь, что файл в /etc/systemd/network действительно загружается раньше других. Файлы в /etc/systemd/network обычно имеют более высокий приоритет по сравнению с /lib/systemd/network.

  3. Применение изменений без перезагрузки: Используйте команду udevadm для обновления статуса устройства и применения изменений:

    udevadm trigger --action=add /sys/class/net/ens2
  4. Логирование и диагностика: Просмотрите журналы systemd и udev, чтобы понять, какие конкретно правила применяются к устройству:

    journalctl -u systemd-udevd
  5. Дополнительные проверки: Подтвердите, что другие правила не отменяют или не конфликтуют с вашими настройками. Это можно сделать путем поиска правил с потенциально более высоким приоритетом.

Следуя этим шагам, вы сможете обеспечить корректное применение изменений при назначении имен сетевых интерфейсов, и ваш интерфейс будет называться согласно правилам, заданным в файле .link.

Заключение

Проблема игнорирования .link файлов может быть вызвана незапланированным порядком загрузки конфигураций или необходимостью обновления initramfs. Тщательное выполнение рекомендаций и использование диагностических инструментов поможет найти и устранить проблему, обеспечив ожидаемую работу системы. Помните, что администрирование систем требует внимательного подхода к мелким деталям в конфигурациях и активного использования журналов для выявления причин отклонений в поведении системы.

Оцените материал
Добавить комментарий

Капча загружается...