Utilizzare UUID nelle regole udev e montare l'unità USB su / media / $ UUID


13

Voglio montare l'unità USB in /mediabase all'UUID del disco. Come posso usare l'UUID di un'unità USB in un file di regole udev e qual è una regola udev per montare l'unità USB con il numero UUID come nome della cartella.

Il blkidcomando genera l'UUID di un disco ma solo al momento del montaggio.


1
Avvertenza 2019: sui moderni sistemi Linux desktop che utilizzano systemd, le regole udev non montano i filesystem nello spazio dei nomi utente normale, ovvero non è possibile montare un filesystem utilizzando il comando mount in una regola udev. Inoltre, in questi sistemi, il sistema dei fusibili (filesystem dell'utente) è configurato per gestire i montaggi USB tramite un'icona desktop, quindi il montaggio manuale usando una regola fstab è in qualche modo in conflitto con il sistema dei fusibili. Per montare automaticamente filesystem USB da UUID su un server senza testa, sarebbe meglio rimuovere la configurazione del fusibile systemd e usare le regole udev per attivare i servizi di montaggio one-shot.
Jonathan Ben-Avraham,

Vedi questa soluzione usando fstab, systemd e automount, testato su Debian recente: unix.stackexchange.com/a/347007/31228
Jonathan Ben-Avraham

Risposte:


14

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/syslogo tramite journalctl -b).

Modifica: ali_m ha sottolineato che le variabili di ambiente sono impostate da regole precedenti e quindi solo se il .rulesfile 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 RUNcomando 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/UUIDte 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/fstabo udisks è montare i file system zfs che hanno alcune idiosincrasie che li rendono inadatti ai normali strumenti.


1
Un punto cruciale che mi ci è voluto un po 'di tempo per capire: al fine di abbinare le variabili d'ambiente, la tua regola deve essere applicata dopo che tali variabili sono state impostate. Per raggiungere questo obiettivo, il .rulesnome del tuo file deve iniziare con un numero> 60 .
ali_m

@ali_m: grazie, ho aggiunto le tue informazioni alla risposta.
Perseidi,

Ubuntu 18.04, alcuni comandi di udevadm possono essere puntati su / dev / sdXX (es. Informazioni udevadm), altri devono essere puntati su / sys / block / sdXX per qualche motivo (es. Udevadm test).
Greg Bell,

0

C'è una soluzione approssimativa che mi viene in mente. Imposta la voce fstab che risponde alla risposta identificata da UUID. E nelle regole udev, esegui mount -aogni volta che viene aggiunto un nuovo dispositivo sd *.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.