Який правильний спосіб перезапустити udev?


46

Я змінив назву свого 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-образі VM
  • eth1, яке існує, але вся конфігурація у всіх файлах стосується eth0, тому для мене це не так добре

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

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


Як ви змінили eth1до eth0? Ви просто перейменували файл пристрою? Якщо це так, це не ефективний спосіб зробити це (і слід очікувати, що зміни будуть повернені вдалим перезапуском udevдемона). Якщо ви використовували якийсь інший метод, будь ласка, опишіть його докладно, а також надайте повний і точний текст будь-яких повідомлень про помилки, які ви бачите під час запуску команд, які ви пробували (для перезапуску udevдемона або перезавантаження його правил). Ви можете відредагувати своє запитання, щоб надати цю інформацію.
Елія Каган

@Eliah Kagan: оновлено. ps: чому його слід повернути? Це не повинно ;-)
zerkms

udevдинамічно генерує ваші пристрої в /dev. Якщо перезапустити його, він відновить їх відповідно до його правил. Зміни, внесені безпосередньо до них, взагалі не є постійними. Схоже, перезапуск udevпрацює нормально, але ви просто неправильно змінили назви пристроїв.
Елія Каган

@Eliah Kagan: udev додає (не змінює) нові правила лише у тому випадку, якщо він не може знайти одне для певного пристрою. Якщо є правило, яке відповідає - воно просто дотримується його без змін.
zerkms

@Eliah Kagan: і я правильно змінив. Просто повірте, що я можу змінити один знак у рядку ;-) (також перезавантажте helpes, і це доводить, що все нормально з правилами)
zerkms

Відповіді:


29

Я не знаю , якщо це допомагає перезавантажити конфігурацію мережі, але коли я змінив , /etc/udev/rules.d/70-persistent-cd.rulesщоб виправити посилання DVD пристрої від /dev/dvd1до /dev/dvd, я повинен був бігти

sudo udevadm trigger

щоб створити нові посилання.


3
Я вважаю sudo udevadm trigger --action=change, що безпечніше, згідно з цим електронним листом про те, що робити безпечно, а що не безпечно робити udev: list.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(так що Менеджер мережі залишає їх у спокої): мені потрібно було лише змінити редагування, /etc/udev/rules.d/70-persistent-net.rulesа потім зробити # 2, # 3, # 5. Не потрібно зупиняти всі мережі; не потрібно нічого іншого.
Ян Д. Аллен

5

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

/etc/init.d/ стоп-мережа && modprobe -r tg3 && контроль управління udevadm --редагування правил && udevadm тригер && 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) <-драйвер модуля ядра для nic

Одне питання у мене був поганий маршрут, який я виправив за допомогою простої команди add route. Дякую за допомогу, Кріс!



3

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


Ні, ifconfig -aвсе ще показує мені старий eth1інтерфейс
zerkms

3

Це слід робити безпечно:

sudo reload udev

Оскільки я використав цю команду без проблем.


Ні, ifconfig -aвсе ще показує мені старий eth1інтерфейс
zerkms

1

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

Я вирішив це завдання - видалити файл /etc/udev/rules.d/70-persistent-net.rules у шаблоні, а це означає, що при наступному завантаженні він побачить будь-яку мережеву карту як eth0.


1

Вам потрібно перезавантажити udev, щоб викликати зміну правила, але пристрій не буде перейменований, якщо ви не вивантажите / перезавантажите драйверний модуль.

Тож modprobe -r e1000 && modprobe e1000після повторного перезавантаження udev слід зробити трюк. Звичайно, не робіть цього, якщо вам потрібна мережа та маєте лише інтерфейси e1000.



0

Тож для мене на VirtualBox з Ubuntu 12.04 я часто перемикаюся між Ethernet і Wireless.

Отже, коли мій зв’язок змінюється, я повинен вибрати мостовий адаптер з пристроїв> мережеві налаштування. Або "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.

Це лише пояснення моїх результатів після прочитання всіх відповідей вище.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.