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

46

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

service udev restart

а также

udevadm control --reload-rules

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

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

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

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

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

Поэтому я выполняю команду для клонирования ВМ, запуска ее и до тех пор, пока изменяется сетевой интерфейс MAC - udevдобавляет второе правило в постоянные правила сети. Сразу после первой загрузки машины действуют 2 правила:

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

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

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

zerkms
источник
Как ты изменился eth1на eth0? Вы только что переименовали файл устройства? Если это так, это не эффективный способ сделать это (и вы должны ожидать, что изменение будет отменено после успешного перезапуска udevдемона). Если вы использовали какой-то другой метод, пожалуйста, опишите его подробно, а также укажите полный и точный текст всех сообщений об ошибках, которые вы видите при запуске команд, которые вы пробовали (для перезапуска udevдемона или перезагрузки его правил). Вы можете отредактировать свой вопрос, чтобы предоставить эту информацию.
Элия ​​Каган
@ Элия Каган: обновлено. PS: почему это должно быть отменено? Это не должно ;-)
zerkms
udevдинамически генерирует ваши устройства в /dev. Если вы перезапустите его, он восстановит их в соответствии со своими правилами. Изменения, сделанные непосредственно к ним, вообще говоря, не являются постоянными. Похоже, перезапуск udevработает нормально, но вы просто не изменили имена устройств должным образом.
Элия ​​Каган
@Eliah Kagan: udev добавляет (не изменяет) новые правила, только если не может найти правило для конкретного устройства. Если есть правило, которое соответствует - оно просто следует без изменений.
zerkms
@Eliah Kagan: и я изменил это правильно. Просто поверьте, я могу изменить один символ в строке ;-) (также помогает перезагрузка, и это доказывает, что все в порядке с правилами)
zerkms

Ответы:

29

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

sudo udevadm trigger

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

akaihola
источник
3
Я полагаю, sudo udevadm trigger --action=changeчто безопаснее, согласно этому письму, о том, что безопасно и небезопасно делать udev: lists.ubuntu.com/archives/ubuntu-devel/2009-January/027260.html
Ehtesh Choudhury
Действительно, и это называется/etc/udev/rules.d/70-persistent-net.rules
MSANFORD
Под Ubuntu 15.04 udevadm triggerзаблокировал мой сеанс X11 и выкинул меня обратно на экран входа в систему.
Ян Д. Аллен
20

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

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

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

Крис Весселинг
источник
1
Ubuntu 15.04 со всеми устройствами, перечисленными в /etc/network/interfaces(так что Network Manager оставляет их в покое): все, что мне нужно было сделать, это отредактировать, /etc/udev/rules.d/70-persistent-net.rulesзатем выполнить # 2, # 3, # 5. Не нужно останавливать все сети; больше ничего не нужно.
Ян Д. Аллен
5

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

/etc/init.d/networking stop && modprobe -r tg3 && udevadm control --reload-rules && udevadm триггер && modprobe tg3 && /etc/init.d/networking start

Это работало для меня, используя сервер Ubuntu 12.04.02. Мои nics использовали драйвер модуля ядра 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) <драйвер модуля для ядра

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

user197674
источник
3

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

Элия ​​Каган
источник
Нет, ifconfig -aвсе еще показывает мне старый eth1интерфейс
zerkms
3

Это должно сделать это безопасно:

sudo reload udev

Как я использовал эту команду без проблем.

RDH
источник
Нет, ifconfig -aвсе еще показывает мне старый eth1интерфейс
zerkms
1

Некоторое время я занимался этим с одной и той же целью, и мне не удалось найти способ изменить имя сетевого интерфейса в работающей системе.

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

Merlijn
источник
1

Вам нужно перезагрузить udev, чтобы вызвать изменение правила, но устройство не будет переименовано, если вы не выгрузите / перезагрузите модуль драйвера.

Так что modprobe -r e1000 && modprobe e1000после перезагрузки udev нужно сделать свое дело. Конечно, не делайте этого, если вам нужна сеть и у вас есть только интерфейсы e1000.

Ноденс
источник
0

Так что для меня на VirtualBox с Ubuntu 12.04 я часто переключаюсь между Ethernet и беспроводной.

Поэтому, когда мое соединение меняется, я должен выбрать Bridged Adapter в разделе «Устройства»> «Настройки сети». Либо «Intel 82579LM Gigabit Network Connection», либо «Intel Centrino Ultimate-N 6300 AGN».

После этого я могу запустить

sudo modprobe -r e1000
sudo service udev restart
sudo modprobe e1000
ping google.com # To test I ran this between each command.

Это просто объяснение моих результатов после прочтения всех ответов выше.

Дерек Робати
источник