Назад | Перейти на главную страницу

Как написать правила для постоянных сетевых имен?

Я знаю, что процесс генерирует постоянные имена сетевых карт на основе правил, найденных в /lib/udev/rules.d/75-persistent-net-generator.rules. Я также знаю, как полностью отключить этот процесс простым

echo '#' > /etc/udev/rules.d/75-persistent-net-generator.rules

но я читал, что «мог бы также написать свой собственный файл правил, чтобы дать интерфейсу имя - постоянный генератор правил игнорирует интерфейс, если имя уже установлено» (/etc/udev/rules.d/README подтверждает, что это возможно).

Можете ли вы предоставить инструкции и / или примеры того, как писать такие правила? (Меня больше волнуют Debian / Ubuntu и немного меньше CentOS). В моем случае я хотел бы добавить следующие правила:

В качестве конкретного примера того, почему я хочу написать собственные правила: у меня есть два идентичных сервера с одной встроенной LAN и одной PCI LAN. В случае отказа HW я хочу иметь возможность перемещать диски с HW # 1 на HW # 2, и для eth0 важно продолжать указывать на бортовую карту, а eth1 на PCI-карту (никто не хочет возиться с кабелями посередине. паники сбоя HW). Мой текущий обходной путь работает, но требует много работы [1], поэтому мне интересно, позволит ли создание собственных правил выразить указанные выше правила.


[1] установите ОС в HW # 1 и сохраните копию /etc/udev/rules.d/70-persistent-net.rules. Переместите диски на HW # 2 и сохраните вторую копию того же файла. Объедините две копии и вручную отредактируйте часть NAME = "ethX". Замени /etc/udev/rules.d/70-persistent-net.rules моей версией. Наконец отключите автоматическое создание нового 70-persistent-net.rules, используя

echo '#' > /etc/udev/rules.d/75-persistent-net-generator.rules

Чтобы ответить на ваш конкретный вопрос, добавьте это в persistent-net.rules:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="AA:AA:AA:AA:AA:AA", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="BB:BB:BB:BB:BB:BB", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="CC:CC:CC:CC:CC:CC", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth1"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="DD:DD:DD:DD:DD:DD", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth1"

Оставьте файл persistent-net-generator.rules в покое. udev не будет перезаписывать правила, которые вы добавили вручную, но правила генератора будут вызывать добавление новых правил для новых карт, как обычно.

Обычно все, что я хочу сделать с точки зрения именования интерфейсов, - это поменять местами eth0 и eth1. Я позволил системе создать файл /etc/udev/rules.d/70-persistent-net-rules, затем отредактируйте его, переключив имена, перезапустите, а затем настройте разделы интерфейса в файлах конфигурации сети. Утомительно, но справляется. Об этом есть подсказка в верхней части файла:

/etc/udev/rules.d/70-persistent-net.rules 
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x8086:0x108c (e1000e) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:25:90:22:74:24", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"