Як слід перезавантажувати правила udev, щоб новостворене могло функціонувати?
Я запускаю Arch Linux, і тут я не маю udevstart
команди.
Також перевірено /etc/rc.d
, немає жодної послуги udev.
udev
? Це менеджер /dev
?
Як слід перезавантажувати правила udev, щоб новостворене могло функціонувати?
Я запускаю Arch Linux, і тут я не маю udevstart
команди.
Також перевірено /etc/rc.d
, немає жодної послуги udev.
udev
? Це менеджер /dev
?
Відповіді:
# udevadm control --reload-rules && udevadm trigger
udevtrigger
після цього?
udevtrigger
(а точніше, udevadm trigger
у більшості дистрибутивів) замість цього (це або підключіть пристрій і поверніть його назад). --reload-rules
майже завжди марний, як це відбувається автоматично.
udevadm trigger
зробив трюк на CentOS 6 для мене.
udevtrigger
або udevadm trigger
не працювали для мене. Я виявив, що деякі пристрої будуть працювати після вивантаження та завантаження модуля для того ж (якщо припустимо, що це модуль, що завантажується). Що я з’ясував - це один не обов’язково перезавантажувати систему. Приклад для мережевого пристрою, я rmmod ixgbe
, rmmod tg3
, rmmod e1000
тоді modprobe ixgbe
, modprobe tg3
, в modprobe e1000
залежності від типу мережевого драйвера.
ip link set $oldname name $newname
згадується тут . У моєму випадку мені потрібно було замінити іфаце, названий lan
мостовим іфацею (для KVM), а отже, оригінал - тепер лежить в основі - iface повинен був отримати свою стару назву eth1
,,. Отже, хитрість полягала в тому, щоб: 1) збити iface вниз; 2) виправити налаштування мережі; 3) оновити файл правил іменування udev; 4) перейменуйте iface за допомогою ip link...
; 5) піднести міст вгору.
Udev використовує механізм inotify для спостереження за змінами в каталозі правил, як у бібліотеці, так і в локальних деревах конфігурації (як правило, розташовані в /lib/udev/rules.d
і /etc/udev/rules.d
). Тому більшу частину часу вам нічого не потрібно робити, змінюючи файл правил.
Потрібно сповістити про це демон демон тільки, якщо ви робите щось незвичне, наприклад, якщо у вас є правило, яке включає файли в іншому каталозі. Тоді ви можете скористатися звичайною умовою для запиту демонів перезавантажити їх конфігурацію: надішліть SIGHUP ( pkill -HUP udevd
). Або ви можете використовувати udevadm
команду: udevadm control --reload-rules
.
Однак майте на увазі, що різні версії udev історично мали різні тригери для автоматичного перезавантаження правил. Тож, якщо сумніваєтесь, зателефонуйте udevadm control --reload-rules
: це ніяк не принесе шкоди.
Правила udev застосовуються лише тоді, коли додано пристрій. Якщо ви хочете повторно застосувати правила до вже підключеного пристрою, вам потрібно зробити це явно, зателефонувавши udevadm trigger
з правильними параметрами, щоб відповідати пристрою (пристроям), конфігурація якого змінилася, наприклад udevadm trigger --attr-match=vendor='Yoyodyne' --attr-match=model='Frobnicator 300'
.
inotify
Механізм не завжди зловити зміни файлу правил Udev. Наприклад, коли я використовую cat > 10-name.rules
для зміни файла правил, вставляючи вміст, я повинен перезавантажувати правила вручну, використовуючи udevadm
. Випробуваний на Raspbian Stretch.
--reload-rules
було потрібно лише у рідкісних випадках.
inotify
механізм спрацював.
Я додаю це, тому що якихось день мені знадобиться ... знову.
Іноді ви отримуєте неправильну відповідність номерів пристроїв Ethernet та MAC-адрес. Іноді це дійсно важливо, як, наприклад, під час роботи у ВМ, і кожен пристрій призначений для іншої VLAN.
/etc/udev/rules.d/70-persistent-net.rules
(або його еквівалент)udevadm control --reload-rules
udevadm trigger --attr-match=subsystem=net
Я був здивований, як добре це спрацювало.
service network stop && udevadm control --reload-rules; udevadm trigger --attr-match=subsystem=net; service network start
Я не впевнений, чи це стосується, і це, безумовно, старіший пост, але це було дуже великим моїм веб-пошуком інформації про udev, тому я подумав, що можу поділитися деякими знаннями.
Ви можете запустити правила udev вручну для конкретних пристроїв. Це стосується лише дистрибутивів, пов'язаних з Redhat (centos fedora тощо, тощо, тощо)
Після того як ви внесете відповідні зміни у файл своїх правил ( /etc/udev/rules.d/whateveryoucalledyourrules
), ви зможете повторитись change
до події пристрою.
echo change > /sys/block/devname/partname1/uevent
Це змусить зчитувати правило udev для ТІЛЬКИ цього пристрою. Набагато краще і більш цілеспрямовано, на мою думку.
Для мене нижче командна послідовність спрацювала так, як хочеться.
Я вніс зміни, /etc/udev/rules.d/70-persistent-net.rules
щоб змінити eth
номер та перезавантажити їх без перезавантаження.
/etc/init.d/networking stop
/etc/init.d/udev stop
udevadm control --reload-rules
/etc/init.d/udev start
/etc/init.d/networking start
Слідом за цим, він був успішно завантажений під час роботи без перезавантаження машини.
Будь-яка пропозиція чи рекомендації щодо цього вітаються, оскільки я виявив це самостійно, читаючи чоловічі сторінки.
Я додаю тут правильну відповідь, тому що мені знадобилося певний час, щоб помітити це у коментарі від @enthusiasticgeek. Все, що вам потрібно зробити (якщо припустити, що ви знаходитесь на консолі сервера - очевидно, що це погано робити, якщо ви входите!):
cat /etc/udev/rules.d/70-persistent-net.rules | grep "PCI device" | perl -pe 's/.*\((\w+)\).*/$1/g'| uniq
У моєму випадку це igb
так, тож воно друкує саме так.
sudo rmmod igb
(замініть igb
драйвером картки, отриманим з кроку 1.далі, відредагуйте /etc/udev/rules.d/70-persistent-net.rules
за потребою, потім знову завантажте модуль за допомогою modprobe igb
, знову замінивши свій igb
.
у випадку декількох мереж
cat /etc/udev/rules.d/70-persistent-net.rules | grep "PCI device" | awk '{print $NF}'|sed -e 's/(//g' -e 's/)//g'| uniq > /tmp/listnet
rm -rf /etc/udev/rules.d/70-persistent-net.rules
for i in $(cat /tmp/listnet); do rmmod $i; modprobe $i;done
service network restart
rm -rf /tmp/listnet