Как правильно перезапустить udev?

Как правильно перезапустить udev?

Я изменил имя своего eth1интерфейса на eth0. Как udevтеперь попросить перечитать конфиг?

service udev restart

и

udevadm control --reload-rules

не помогает. Так есть ли какой-нибудь действенный способ, кроме перезагрузки? (да, перезагрузка помогает в этой проблеме)

  • да, я знаю, что мне следует добавлять к командам sudo, но любой из приведенных выше вариантов ничего не меняет в ifconfig -aвыводе: я все равно вижу eth1, а не eth0.

  • Я только что изменил NAMEсвойство строки udev-rule. Не знаю, почему это может быть неэффективным.

Ошибок нет.при выполнении обеих команд, которые я разместил выше, но они просто не меняют фактическое имя интерфейса в ifconfig -aвыводе. Если я выполняю перезагрузку - то имя интерфейса меняется, как и ожидалось.

В целях разработки я пишу скрипт, который клонирует виртуальные машины (на базе VirtualBox) и предварительно настраивает их определенным образом.

Итак, я выполняю команду клонирования VM, запускаю ее и пока MAC-адрес сетевого интерфейса изменен - udev​​добавляю второе правило в постоянные правила сети. Сразу после первой загрузки машины есть 2 правила:

  • eth0, которого не существует, пока он существовал в исходном образе виртуальной машины MAC
  • eth1, который существует, но вся конфигурация во всех файлах ссылается на eth0, поэтому он не очень хорош для меня

Поэтому я sedудаляю строку с eth0(она устарела и бесполезна в клонированном образе) и заменяю eth1на eth0. Так что в настоящее время у меня есть действительное постоянное правило, но eth1в /dev.

Проблема: я не хочу перезагружать машину (это займет еще некоторое время, что не очень хорошо на этапе сборки виртуальной машины), а просто хочу пересобрать ее /devс помощью какой-то команды, чтобы получить готовую к использованию виртуальную машину без каких-либо перезагрузок.

решение1

Я не знаю, поможет ли это при перезагрузке конфигурации сети, но когда я изменил, /etc/udev/rules.d/70-persistent-cd.rulesчтобы исправить ссылку на DVD-устройство с /dev/dvd1на /dev/dvd, мне пришлось запустить

sudo udevadm trigger

чтобы создать новые ссылки.

решение2

Вам необходимо объединить все приведенные здесь советы в правильном порядке:

  1. Вывести из строя сетьservice networking stop
  2. Выгрузить модуль драйвера из ядра
    1. Найдите имя модуля lspci -vи найдите «Используемый драйвер ядра:».
    2. modprobe -r <driver module>
  3. Перезагрузите правила udevudevadm control --reload-rules
  4. Запустите новые правилаudevadm trigger
  5. Загрузить драйверmodprobe <driver module>
  6. Перезапустите сеть.service networking start
  7. (необязательно) Повторно запустите все iptablesскрипты, которые ссылались на ethимя интерфейса до его включения.

Я подозреваю, что шаг 4 или шаг 5 на самом деле не нужны, но эти шаги сработали для меня. Вы можете проверить после шага 4 шаг 2.1, чтобы увидеть, выполнила ли команда триггера уже шаг 5, отредактируйте этот ответ, чтобы отразить ваши выводы, если вы это сделаете.

решение3

У меня была похожая проблема. Поскольку я не хотел тратить время на перезагрузку, я запустил однострочник, используя предложение Криса Весселинга.

/etc/init.d/networking stop && modprobe -r tg3 && udevadm control --reload-rules && udevadm trigger && modprobe tg3 && /etc/init.d/networking start

Это сработало для меня с использованием сервера Ubuntu 12.04.02. Мои сетевые карты использовали драйвер модуля ядра tg3, поэтому измените tg3 на модуль, который используют ваши интерфейсы. Я нашел те, которые использовались в моем /etc/udev/rules.d/70-persistent-net.rules:

Устройство PCI 0x14e4:/sys/devices/pci0000:00/0000:00:1c.4/0000:02:00.1 (tg3) <-драйвер модуля ядра для сетевой карты

Единственная проблема, с которой я столкнулся, это был плохой маршрут, который я исправил простой командой route add. Спасибо за помощь, Крис!

решение4

sudo /etc/init.d/udev restartдолжно сработать. Некоторые из команд, которые вы пробовали, если запустить их с sudo, также могут быть эффективными.

Связанный контент