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

46

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

service udev restart

и

udevadm control --reload-rules

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

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

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

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

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

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

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

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

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

    
задан zerkms 25.11.2011 в 01:57
источник

10 ответов

29

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

sudo udevadm trigger

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

    
ответ дан akaihola 21.04.2012 в 10:13
18

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

  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, отредактируйте этот ответ, чтобы отразить ваши результаты, если вы это сделаете.     

ответ дан Chris Wesseling 18.03.2013 в 18:24
5

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

/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. Мои nics использовали драйвер модуля ядра tg3, поэтому измените tg3 на модуль, который используют ваши интерфейсы. Я нашел те, которые использовались в /etc/udev/rules.d/70-persistent-net.rules :

PCI device 0x14e4:/sys/devices/pci0000:00/0000:00:1c.4/0000:02:00.1 (tg3) <-kernel module driver for the nic

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

    
ответ дан user197674 21.04.2013 в 01:38
4

Это сработало для меня (без перезагрузки)

udevadm control --reload-rules ; udevadm trigger

Престижность автору этой страницы: Ссылка

    
ответ дан pikmaster 23.09.2014 в 11:48
3

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

    
ответ дан Eliah Kagan 25.11.2011 в 02:03
3

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

sudo reload udev

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

    
ответ дан rdh 25.11.2011 в 02:05
1

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

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

    
ответ дан Merlijn 23.12.2011 в 10:42
1

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

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

    
ответ дан nodens 24.10.2012 в 15:28
0
udevadm trigger 

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

    
ответ дан zhou yunjian 30.08.2013 в 04:13
0

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

Поэтому, когда мое соединение меняется, я должен выбрать Bridged Adapter from Devices > Сетевые настройки. Либо «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.

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

    
ответ дан Derek Robati 15.05.2014 в 15:52