Użyj UUID w regułach udev i podłącz dysk USB do / media / $ UUID

13

Chcę zamontować dysk USB na /mediapodstawie identyfikatora UUID dysku. Jak mogę użyć UUID dysku USB w pliku reguł udev i co to jest reguła udev, aby zamontować dysk USB z numerem UUID jako nazwą folderu.

blkidKomenda wysyła UUID dysku ale dopiero po montażu.

Talespin_Kit
źródło
1
Zastrzeżenie 2019: W nowoczesnych systemach Linux na pulpicie korzystających z systemd reguły udev nie montują systemów plików w zwykłej przestrzeni nazw użytkownika, tzn. Nie można montować systemu plików za pomocą komendy mount w regule udev. Ponadto w tych systemach system bezpieczników (systemy plików użytkownika) jest skonfigurowany do obsługi podłączeń USB za pomocą ikony na pulpicie, więc montaż ręczny przy użyciu reguły fstab w pewnym stopniu powoduje konflikty z systemem bezpieczników. Aby automatycznie montować systemy plików USB przez UUID na bezgłowym serwerze, najlepiej byłoby usunąć konfigurację bezpiecznika systemowego i użyć reguł udev, aby uruchomić usługi montowania jednorazowego.
Jonathan Ben-Avraham
Zobacz to rozwiązanie za pomocą fstab, systemd i automount, przetestowane na najnowszym Debianie: unix.stackexchange.com/a/347007/31228
Jonathan Ben-Avraham

Odpowiedzi:

14

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/sysloglub 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 .rulesplik 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 RUNpoleceniu 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/UUIDmoż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/fstablub 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.

Perseidy
źródło
1
Jedna kluczowa kwestia zajęła mi trochę czasu, aby zrozumieć: aby dopasować do zmiennych środowiskowych, twoja reguła musi być zastosowana po skonfigurowaniu tych zmiennych. Aby to osiągnąć, twoja .rulesnazwa pliku musi zaczynać się od liczby> 60 .
ali_m,
@ali_m: Dzięki, dodałem twoje informacje do odpowiedzi.
Perseidy,
Ubuntu 18.04, niektóre polecenia udevadm mogą być wskazywane na / dev / sdXX (np. Udevadm info), inne muszą być wskazywane na / sys / block / sdXX z jakiegoś powodu (np. Test udevadm).
Greg Bell
0

Przyszło mi do głowy szorstkie rozwiązanie. Ustaw cooreponding wpis fstab, który jest identyfikowany przez UUID. I zgodnie z regułami udev, wykonuj mount -aza każdym razem, gdy dodawane jest nowe urządzenie sd *.

woda
źródło