Jak należy przeładować reguły udev, aby nowo utworzony mógł funkcjonować?
Korzystam z Arch Linux i nie mam tu udevstart
polecenia.
Sprawdzono również /etc/rc.d
, nie ma tam usługi udev.
udev
? Czy to kierownik /dev
?
Jak należy przeładować reguły udev, aby nowo utworzony mógł funkcjonować?
Korzystam z Arch Linux i nie mam tu udevstart
polecenia.
Sprawdzono również /etc/rc.d
, nie ma tam usługi udev.
udev
? Czy to kierownik /dev
?
Odpowiedzi:
# udevadm control --reload-rules && udevadm trigger
udevtrigger
później?
udevtrigger
(a raczej udevadm trigger
w większości dystrybucji) (to, lub podłączyć urządzenie i włożyć z powrotem). --reload-rules
jest prawie zawsze bezużyteczne, ponieważ dzieje się to automatycznie.
udevadm trigger
wykonał dla mnie lewę na CentOS 6.
udevtrigger
lub udevadm trigger
nie działało dla mnie. Odkryłem, że niektóre urządzenia będą działać po rozładowaniu i załadowaniu modułu dla tego samego (zakładając, że jest to moduł do załadowania). Dowiedziałem się, że niekoniecznie trzeba ponownie uruchomić system. Przykład dla urządzenia sieciowego, robię rmmod ixgbe
, rmmod tg3
, rmmod e1000
następnie modprobe ixgbe
, modprobe tg3
, modprobe e1000
w zależności od rodzaju sterownika sieciowego.
ip link set $oldname name $newname
wspomniano tutaj . W moim przypadku musiałem zastąpić iface o nazwie lan
zmostkowany iface (dla KVM), a zatem pierwotny - teraz leżący u podstaw - iface musiał odzyskać swoją starą nazwę eth1
. Zatem sztuczka polegała na: 1) sprowadzeniu iface; 2) napraw konfigurację sieci; 3) zaktualizuj plik reguł nazewnictwa udev; 4) zmienić nazwę iface za pomocą ip link...
; 5) podnieś most.
Udev używa mechanizmu inotify do obserwowania zmian w katalogu reguł, zarówno w bibliotece, jak i w lokalnych drzewach konfiguracji (zwykle zlokalizowanych w /lib/udev/rules.d
i /etc/udev/rules.d
). Dlatego przez większość czasu nie musisz nic robić, gdy zmieniasz plik reguł.
Musisz tylko wyraźnie powiadomić demona udev, jeśli robisz coś niezwykłego, na przykład jeśli masz regułę obejmującą pliki z innego katalogu. Następnie możesz użyć zwykłej konwencji, aby poprosić demony o ponowne załadowanie ich konfiguracji: wyślij SIGHUP ( pkill -HUP udevd
). Albo można użyć udevadm
polecenia: udevadm control --reload-rules
.
Należy jednak pamiętać, że różne wersje udev w przeszłości miały różne wyzwalacze do automatycznego ponownego ładowania reguł. W razie wątpliwości zadzwoń udevadm control --reload-rules
: i tak nie zaszkodzi.
Reguły udev są stosowane tylko po dodaniu urządzenia. Jeśli chcesz ponownie zastosować reguły do urządzenia, które jest już podłączone, musisz to zrobić jawnie, dzwoniąc udevadm trigger
z odpowiednimi opcjami, aby dopasować urządzenie (urządzenia), których konfiguracja uległa zmianie, np udevadm trigger --attr-match=vendor='Yoyodyne' --attr-match=model='Frobnicator 300'
.
inotify
Mechanizm nie zawsze złapać zmianę pliku reguł udev. Na przykład, kiedy używam cat > 10-name.rules
do zmiany pliku reguł przez wklejenie zawartości, muszę ponownie załadować reguły ręcznie, używając udevadm
. Testowany na Raspbian Stretch.
--reload-rules
było to potrzebne tylko w rzadkich przypadkach.
inotify
mechanizm działał.
Dodam to, bo kiedyś będę tego potrzebować ... znowu.
Czasami pojawia się nieprawidłowe dopasowanie numerów urządzeń Ethernet i adresów MAC. Czasami jest to naprawdę ważne, na przykład podczas pracy na maszynie wirtualnej, a każde urządzenie jest przypisane do innej sieci VLAN.
/etc/udev/rules.d/70-persistent-net.rules
(lub jego odpowiednik)udevadm control --reload-rules
udevadm trigger --attr-match=subsystem=net
Byłem zaskoczony, jak dobrze to działało.
service network stop && udevadm control --reload-rules; udevadm trigger --attr-match=subsystem=net; service network start
Nie jestem pewien, czy to dotyczy, i jest to zdecydowanie starszy post, ale pojawił się dość wysoko w moich wyszukiwaniach informacji udev, więc pomyślałem, że mogę podzielić się wiedzą.
Możesz uruchomić reguły udev ręcznie dla określonych urządzeń. Dotyczy to tylko dystrybucji związanych z redhat (centos fedora itp. Itp.)
Po wprowadzeniu odpowiednich zmian w pliku reguł ( /etc/udev/rules.d/whateveryoucalledyourrules
) możesz powtórzyć echo change
urządzenia.
echo change > /sys/block/devname/partname1/uevent
Wymusi to odczyt reguły udev TYLKO dla tego urządzenia. Moim zdaniem znacznie lepiej i bardziej ukierunkowany.
Dla mnie poniższa sekwencja poleceń działała zgodnie z oczekiwaniami.
Wprowadziłem modyfikacje, /etc/udev/rules.d/70-persistent-net.rules
aby zmienić eth
numer i załadować je ponownie bez ponownego uruchamiania.
/etc/init.d/networking stop
/etc/init.d/udev stop
udevadm control --reload-rules
/etc/init.d/udev start
/etc/init.d/networking start
Dzięki temu pomyślnie załadowano go w czasie wykonywania bez ponownego uruchamiania komputera.
Wszelkie sugestie lub zalecenia na ten temat są mile widziane, ponieważ odkryłem to sam, czytając strony podręcznika użytkownika.
Dodaję do poprawnej odpowiedzi tutaj bo zajęło mi trochę czasu, aby zauważyć w komentarzu z @enthusiasticgeek. Wszystko, co musisz zrobić (zakładając, że jesteś na konsoli serwera - najwyraźniej jest to złe, jeśli jesteś zalogowany!):
cat /etc/udev/rules.d/70-persistent-net.rules | grep "PCI device" | perl -pe 's/.*\((\w+)\).*/$1/g'| uniq
W moim przypadku tak jest igb
, więc drukuje właśnie to.
sudo rmmod igb
(zamień igb
na sterownik karty uzyskany w kroku 1.następnie edytuj /etc/udev/rules.d/70-persistent-net.rules
w razie potrzeby, a następnie ponownie załaduj moduł za pomocą modprobe igb
, ponownie zastępując igb
go swoim.
w przypadku wielu sieci
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