Як слід перезавантажувати правила 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