Tworzę nową podstawową zasadę
/etc/udev/rules.d/10-myrule.rules
zawierający:
KERNEL!="sdb*", GOTO="auto_mount_end"
ACTION=="add", RUN+="/usr/bin/mount /dev/sdb1 /media"
LABEL="auto_mount_end"
Zapisałem, uruchomiłem ponownie i włożyłem kartę SD (rozpoznane przez /dev/sdb1
, widzę to za pomocą dmesg
), ale nic się nie dzieje. Kiedy robię to ręcznie mount /dev/sdb1 /media
, działa.
Jak mogę rozwiązać problem / debugować taką udev
regułę?
Uwaga: używam ArchLinux, ale powinno być tak samo w przypadku każdej dystrybucji?
arch-linux
mount
udev
Basj
źródło
źródło
99-myrule.rules
...systemd
zmienia coś na normalne zachowanie udev?udevadm monitor
, zobacz to i toudevadm test
I zweryfikowałem reguły przeciwko rzeczywistościudevadm info
.Odpowiedzi:
10-
jak wspomniał Jasonwryan, używaj wysokiej numeracji (dobre lata 90-te). Więc rządzisz, nie zostanie zastąpiony przez inny.Używaj minimalnych kluczy tak, jak naprawdę potrzebujesz. Przykład,
!=
iGOTO
/LABEL
, zamiast tego użyj bezpośrednio==
Twój cel miał
sdb1
ustaloną komendę, zminimalizuj dopasowanie w ciemno za pomocąKERNEL=="sdb1"
Przydaje mi się tworzenie reguły debugowania cienia, nazwałem cień, ponieważ zawsze zostawiam go w tym samym pliku, więc używam go, gdy go potrzebuję.
Uwaga:
udev-env.txt
tworzony jest, a następnie reguła i tak jest uruchamiana. Linia==
odpowiadająca jednemu pasującemu węzłowi. ENV zarejestrowany w tym pliku może być mieszanką 2 lub więcej węzłów, utworzonych prawie w tym samym czasie, jest tostdout
problem buforowania.Zastosowanie
udevadm monitor -u
,udevadm test ...
audevadm trigger ...
do sprawdzenia, które przepisy przetworzone zdarzenia.Wewnątrz skryptów zależy od ciebie, aby tworzył dziennik debugowania i przechwytywał nieudane polecenia, zapisując ich wartość zwrotną również
stdout
istderr
komunikaty.Aktualizacja:
Odniesienie: udev_237 -
man udev
(Ubuntu_18.04)źródło
udevadm test...
Wydaje się, że kilka komentarzy pokazuje tylko zmienne środowiskowe, dziękiATTRS
czemu można użyćudevadm info $DEVICE
tych innych ustawień.udevadm info
zwrotach drzewo urządzeń należy uważać, aby odróżnić ustawienia urządzenia od jego urządzeń nadrzędnych (właściwości wydają się dziedziczone, jeśli nie zostaną zastąpione). W moim przypadku podsystem był nieprawidłowy.udevadm test "This program is for debugging only, it does not run any program specified by a RUN key. It may show incorrect results, because some values may be different, or not available at a simulation run."
Czy nie ma sposobu, aby po prostu prześledzić, co się właściwie dzieje?udevadm monitor -u
do sprawdzenia zdarzeń / warunków iudevadm trigger ...
przetestowania ich działań.Myślę, że polecenie, którego tu szukasz, to
udevadm
. Użyjesz parametrówtrigger
itest
, aby uruchomić ponowne skanowanie zdarzeń udev i odpowiednio przetestować określone zdarzenie.Nauczyłem się tego na własnej skórze, kiedy wymyśliłem nowe urządzenie sieciowe w EL 7. Powodzenia!
źródło
Utwórz plik reguł udev
Dodaj regułę, która każe udiskom automatycznie ją zamontować
ATTRS{type}=="SD"
może nie być wymagane, jeśli używasz różnych typów.Załaduj ponownie reguły
Wysuń, a następnie włóż z powrotem.
Odniesienie: Archlinux Wiki: Niektóre urządzenia, które powinny być traktowane jako wymienne, nie są
źródło
Miałem ten sam problem z RASPBERRY PI 3 B +, możliwe, że powyższe polecenia mogą ci pomóc. Ale to mi NIE pomogło. Próbowałem wywołać skrypt po włożeniu urządzenia pamięci USB. Reguły nie są rejestrowane w syslog, więc bardzo trudno jest zrozumieć, która reguła zadziałała, a która reguła zawiodła.
Zrobiłem więc:
(1) Mój plik reguł utworzyłem w /etc/udev/rules.d/100-myrule.rules
(2) następnie uruchomiłem polecenie
sudo /etc/init.d/udev restart
potem sprawdziłem, czy działa. Informacje mogą być przydatne lub nie, ale systemy plików są odczytywane tylko dla udev, dopóki nie zostanie wykonane polecenie at (2).
źródło