Mimo że UUID nie są bezpośrednio dostępne dla udev, przynajmniej w Fedorze i Ubuntu są one ustawione jako zmienne środowiskowe ( ENV
). Możesz odczytać wszystkie zmienne środowiskowe urządzenia, dzwoniąc udevadm info /dev/sdc
. Np. Dla NTFS na dysku zewnętrznym otrzymuję:
$ udevadm info /dev/sdc2
P: /devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host7/target7:0:0/7:0:0:0/block/sdc/sdc2
N: sdc2
[…]
E: ID_FS_TYPE=ntfs
E: ID_FS_USAGE=filesystem
E: ID_FS_UUID=4A6F2ABC1232FA37
[…]
Wszystko z E:
przodu jest ustawione jako zmienna środowiskowa.
Dopasowywanie do UUID
Możesz się z nim równać ENV{ID_FS_UUID}=="4A6F2ABC1232FA37"
. Jako pierwszy filtr, z którym się dopasowuję, KERNEL=="sd?2"
upewniam się, że obsługuję tylko urządzenia blokowe z poprawnym numerem partycji. Pełna reguła wyglądałaby następująco:
KERNEL=="sd?2", ENV{ID_FS_UUID}=="4A6F2ABC1232FA37", RUN+="/usr/bin/logger --tag my-manual-usb-mount Mounting the device with UUID 4A6F2ABC1232FA37", RUN+="/usr/bin/mount [Your mount options here]"
Komenda logger jest przydatna do stwierdzenia, że reguła jest faktycznie uruchomiona. Następnie sprawdź, czy reguła nie zawiera żadnych błędów składniowych udevadm test /dev/sdc2
. Plik reguł powinien zostać wymieniony w danych wyjściowych, a obok niego nie powinien pojawić się komunikat o błędzie. Teraz można wywołać wszystkie zasady urządzenie, aby sprawdzić, czy reguła działa zgodnie z planem: sudo udevadm trigger /dev/sdc2
. Jeśli reguła jest zgodna, w dzienniku systemowym ( /var/log/syslog
lub za pośrednictwem journalctl -b
) znajdziesz komunikat dziennika niestandardowego .
Edycja: ali_m wskazał, że zmienne środowiskowe są ustawione na podstawie poprzednich reguł, a zatem są dostępne tylko wtedy, gdy .rules
plik ma wystarczająco wysoką kolejność leksykograficzną . Począwszy od „60” powinno wystarczyć. Osobiście zaczynam moje reguły od „zz” (jeśli to możliwe), aby odróżnić je od reguł predefiniowanych w skrócie.
Używanie UUID w RUN
poleceniu i gdzie indziej
Udev ma dość potężną składnię zmiennych i podstawiania atrybutów . W szczególności każde wystąpienie $env{ID_FS_UUID}
zostanie zastąpione identyfikatorem UUID dysku. Aby zamontować urządzenie pod, /media/
UUID
możesz użyć tej reguły:
KERNEL=="sd??", RUN+="/usr/bin/mkdir /media/$env{ID_FS_UUID}", RUN+="/usr/bin/mount $devpath /media/$env{ID_FS_UUID}"
Prawdopodobnie chcesz zamiast tego skonfigurować udiski, specjalizuje się w obszarze problemów, który chcesz rozwiązać. Zobacz https://wiki.archlinux.org/index.php/udisks#udisks2:_mount_to_.2Fmedia jako punkt początkowy.
Moim faktycznym przypadkiem użycia do montowania urządzeń z udev zamiast /etc/fstab
lub udisks jest montowanie systemów plików zfs, które mają pewne osobliwości, co sprawia, że nie pasują one do zwykłych narzędzi.