Переименовать сетевой интерфейс на основе MAC без соответствующего моста
В Ubuntu 18.04,
У меня есть адаптер Ethernet, который я переименую в primary-eth
в мосту под названием primary-bridge
,
Я переименовал свой сетевой адаптер с файлом в/etc/udev/rules.d/70-persistent-net.rules
содержащий одну строку:SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="primary-eth"
(где aa:bb... это фактический MAC-адрес моего сетевого адаптера)
Это работало, но потом однажды я загрузился и нашел primary-bridge
пустой, и нежелательный дополнительный мост называется rename3
содержащий primary-eth
,
Я получил совет, что мое правило слишком расплывчато и что udev, вероятно, пытался переименовать primary-bridge
в primary-eth
в состоянии гонки. (так как primary-bridge
получает свой MAC-адрес от primary-eth
поэтому у них обоих одинаковый MAC-адрес)
Итак, посмотрев на udevadm info /sys/class/net/primary-bridge
Поэтому я добавил параметр DEVTYPE!="bridge"
Но тогда мой primary-eth
не был переименован надежно при каждой загрузке.
Так что теперь я использую DRIVERS=="?*"
вместо DEVTYPE!="bridge"
, и он работал нормально для последних 2 перезагрузок, но я не знаю, будет ли он продолжать работать надежно.
Что значит
?*
значит вDRIVERS=="?*"
? Как это может соответствовать чему-либо, если у меня нет параметра с именемDRIVERS=...
в моемudevadm info
ни дляprimary-bridge
ниprimary-eth
?Почему
DEVTYPE!="bridge"
не работа? Что-то не так с этим!=
синтаксис?Я также видел параметр
KERNEL=="eth*"
используется, что, по-видимому, относится к реальному имени ядра для адаптера Ethernet, который всегда начинается с "eth". Если я хочу переименовать адаптер Wi-Fi, используя тот же метод, мне нужно написатьKERNEL=="wlan*"
?