Anche se gli UUID non sono direttamente accessibili da udev, almeno in Fedora e Ubuntu sono impostati come variabili di ambiente ( ENV
). Puoi leggere tutte le variabili di ambiente di un dispositivo chiamando udevadm info /dev/sdc
. Ad esempio per un NTFS su un disco esterno ottengo:
$ 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
[…]
Tutto con un E:
fronte è impostato come variabile d'ambiente.
Corrispondenza con gli UUID
Puoi abbinarlo contro ENV{ID_FS_UUID}=="4A6F2ABC1232FA37"
. Come primo filtro mi associo a KERNEL=="sd?2"
per assicurarmi di gestire solo i dispositivi a blocchi con il numero di partizione corretto. La regola completa sarebbe simile a questa:
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]"
Il comando logger è utile per affermare che la regola è effettivamente in esecuzione. Successivamente è necessario verificare che la regola non contenga errori di sintassi con udevadm test /dev/sdc2
. Il file delle regole dovrebbe essere elencato nell'output e non dovrebbe apparire alcun messaggio di errore accanto ad esso. Ora è possibile attivare tutte le regole per il dispositivo per verificare se la regola funziona come previsto: sudo udevadm trigger /dev/sdc2
. Se la tua regola corrisponde, troverai il messaggio di registro personalizzato nel registro di sistema ( /var/log/syslog
o tramite journalctl -b
).
Modifica: ali_m ha sottolineato che le variabili di ambiente sono impostate da regole precedenti e quindi solo se il .rules
file ha un ordinamento lessicografico sufficientemente elevato . Iniziare con "60" dovrebbe essere sufficiente. Personalmente inizio le mie regole con "zz" (se possibile) per distinguerle da regole predefinite in un colpo d'occhio.
Utilizzo degli UUID nel RUN
comando e altrove
Udev ha una sintassi di sostituzione di attributi e variabili piuttosto potente . Specificamente ogni occorrenza di $env{ID_FS_UUID}
sarà sostituito con l'UUID dell'azionamento. Quindi per montare un dispositivo sotto di /media/
UUID
te potresti usare questa regola:
KERNEL=="sd??", RUN+="/usr/bin/mkdir /media/$env{ID_FS_UUID}", RUN+="/usr/bin/mount $devpath /media/$env{ID_FS_UUID}"
Probabilmente, invece, si desidera configurare udisks, tuttavia è specializzato per lo spazio problematico che si desidera risolvere. Vedi https://wiki.archlinux.org/index.php/udisks#udisks2:_mount_to_.2Fmedia come punto di partenza.
Il mio vero caso d'uso per il montaggio di dispositivi con udev anziché /etc/fstab
o udisks è montare i file system zfs che hanno alcune idiosincrasie che li rendono inadatti ai normali strumenti.