Как восстановить 70-persistent-net.rules без перезагрузки?


14

Файл /etc/udev/rules.d/70-persistent-net.rulesавтоматически генерируется в системе Linux с помощью udev, если он не существует, во время перезагрузки. Но я хотел бы знать, как создать этот файл правил (с помощью команды) без перезагрузки сервера.

Я некоторое время гуглил и обнаружил, что файл правил генерируется этим скриптом:

/lib/udev/write_net_rules

Тем не менее, невозможно запустить этот скрипт из командной строки, так как (я полагаю) он хочет запустить udev с правильно установленными переменными окружения. При запуске вручную выводится сообщение об ошибке «отсутствует $ INTERFACE». Даже если я установлю переменную env INTERFACE = eth0 до запуска скрипта, он все равно выдает ошибку «отсутствует действительное совпадение». Не говоря уже о том, что у меня есть два интерфейса ( eth0и eth1), и я хочу, чтобы файл правил был сгенерирован для обоих.

Я также думал о том, чтобы вызвать подобные события udev, надеясь, что он запустит скрипт от самого udev, но ничего не изменится:

udevadm trigger --type=devices --action=change

Итак, кто-нибудь знает, как восстановить постоянные сетевые правила в файле /etc/udev/rules.d/70-persistent-net.rulesбез перезагрузки?


Каков ваш дистрибутив? Какую систему инициализации она использует?
Михас

1
Я бы сказал, что это не имеет значения. Я использую Slackware с eUdev и sysvinit. Я изучал сценарии запуска, чтобы выяснить, что выполняется, который генерирует файл правил, но нашел только триггер udevadm с комментарием, что это команда для создания постоянных правил, но почему-то это работает только при перезагрузке, нет эффект, если я запускаю его вручную.
Томас М

1
Это может быть актуально, так как у меня на Arch нет 70-persistent-net.rulesни /lib/udev/write_net_rulesсценария, ни сценария. Поэтому я не могу проверить, но предположительно $INTERFACEпеременная установлена ​​в самом скрипте. Скорее всего, это передается в качестве аргумента. Можете ли вы показать нам содержание сценария?
Тердон

Скрипт просто использует $INTERFACEпеременную. Существует гораздо больше просто используемых переменных, никогда не объявляемых. Это потому, что он вызывается udev, и udev устанавливает все переменные env до запуска скрипта при загрузке.
Томас М

Вам действительно нужно знать, как его восстановить, или вы можете просто отредактировать файл, чтобы отразить новую реальность?
Ройма

Ответы:


5

Согласно man-странице --action=changeэто значение по умолчанию для udevadm.

   -c, --action=ACTION
       Type of event to be triggered. The default value is change.

Поэтому лучше --action=addвместо этого попробовать . Это должно помочь:

/sbin/udevadm trigger --type=devices --action=add

intel_rapl: в пакете 0 не найдено действительных доменов rapl
Tiina

1

В Ubuntu Server 16.04LTS 70-persistent-net.rules не существует.

все, что я сделал, было бежать:

ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules

Затем создайте файл, используя

sudo vi /etc/systemd/network/10-internet.link

и добавьте следующее

[Match] 
Path=pci-0000:(your device mac address)

[Link] 
Name=eth0 (or whatever you want to name it)

:wq сохранить файл

затем перезагрузите и настройте файл / etc / network / interfaces. Затем перезагрузите снова.


9
Вопрос «Как восстановить 70-persistent-net.rules без перезагрузки? » Ваш ответ содержит две перезагрузки. Как это ответ на вопрос?
G-Man говорит: «Восстановите Монику»

0

У меня была та же проблема, но я заметил, что все еще вижу интерфейсы в ip addrсписке. Я использовал следующее (как root):

# ip addr # to get my mac addresses
# export INTERFACE=eth0; export MATCHADDR="xx:xx:xx:xx:xx:xx"; /lib/udev/write_net_rules
# replace the 00's with the real mac addr

Повторите для каждого интерфейса. Это было использовано для «восстановления» моего файла. (Примечание: в одном вызове будут перечислены все интерфейсы + добавлено переименование для сопоставления с одним, поэтому я рекомендую просмотреть выходной файл после одного вызова)

Определенно есть различия между ОС и текущими реализациями UDEV и сценариями поддержки. Отметим, что я использовал CentOS 6.8, когда сделал это успешно.

Кредит - я в основном ссылался на этот сайт. В нескольких ветках есть комментарий, в котором говорится об изменении скрипта, но я предпочел использовать переменные среды, так как это было чище: https://access.redhat.com/discussions/1240213


Дерьмо - подожди. Извините, это была команда, которая не сработала. Мне нужно обновить ответ с шагом, который я сделал
gravy21

Хорошо, я обновил, как я на самом деле исправил мой. Надеюсь, что это работает, если это относится к вашей ситуации.
gravy21
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.