Я изменил имя своего 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
, которого не существует, пока он существовал в исходном образе виртуальной машины MACeth1
, который существует, но вся конфигурация во всех файлах ссылается на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
Вам необходимо объединить все приведенные здесь советы в правильном порядке:
- Вывести из строя сеть
service networking stop
- Выгрузить модуль драйвера из ядра
- Найдите имя модуля
lspci -v
и найдите «Используемый драйвер ядра:». modprobe -r <driver module>
- Найдите имя модуля
- Перезагрузите правила udev
udevadm control --reload-rules
- Запустите новые правила
udevadm trigger
- Загрузить драйвер
modprobe <driver module>
- Перезапустите сеть.
service networking start
- (необязательно) Повторно запустите все
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
, также могут быть эффективными.