Ubuntu UDEV management
// April 6th, 2009 // Linux, Rubriche, Tutorials

Questa settimana ho deciso finalmente di acquistare un disco USB esterno da utilizzare essenzialmente come dispositivo di backup per il mio PC.
Tutto contento arrivo a casa, lo scarto e lo collego al computer…fantastico!
mi accingo a consultare il buon “/var/log/messages” per vedere come il sistema ha deciso di mapparlo e preparo il mio fstab affinché al prossimo riavvio basti un semplice mount della cartella sul filesystem che ho deciso di dedicare al disco per cominciare ad utilizzarlo.
A questo punto preparo la configurazione per il mio software di backup (per la cronaca “sbackup” anche se sincermante non mi entusiasma particolarmente…!) e decido di riavviare per verificare di aver fatto tutto in maniera corretta.
Bene…provo a montare il disco…niente…ricevo il seguente errore:
mount: special device /dev/sda1 does not exist
…strizzo un po’ gli occhi…controllo nuovamente i file di log e vedo che questa volta il sistema ha deciso di linkare il mio disco removibile con un link differente…
Vi è mai capitato? Suppongo di si…e per questa ragione ho deciso di descrivervi al meglio come risolvere la situazione in maniera elegante e veloce.
Ma prima di cominciare, come al solito, farò del mio meglio per cercare di approfondire un po’ l’argomento… e nello specifico quello che riguarda UDEV il device manager per eccellenza dei kernel 2.6.x.
UDEV è il gestore dei dispositivi (dev) per i sistemi linux basati su kernel 2.6.x.
La sua funzione primaria è quella di gestire la creazione dei nodi dei dispositivi (/dev) di sistema e a differenza dei suoi predecessori (es. devfs) che creavano dei dispositivi statici, UDEV popola dinamicamente la directory /dev di sistema permettendo la creazione solo di dispositivi realmente presenti sul nostro personal computer.
Questo permette in buona sostanza di avere dei riferimenti a livello di sistema operativo solo per i dispositivi hardware realmente presenti migliorando di conseguenza le performance del processo di avvio/boot del nostro OS basato su linux.
Un’altra delle caratteristiche premianti di UDEV è quella di poter utilizzare delle vere e proprie regole che ci permettano di:
- RInominare il nodo di un dispositivo con un nome personalizzato e magari più intuitivo
- Cambiare i permessi e la proprietà di un nodo specifico
- Eseguire un script quando un dispositivo viene creato o cancellato (tipicamente collegato o scollegato dal computer)
- Rinominare un’interfaccia di rete
Detto questo… come procedere?
Per prima cosa, una volte inserito il disco USB esterno è necessario individuare qualche informazione utile:
$ less /var/log/messages kernel: [ 1288.443028] usb 5-1: new high speed USB device using ehci_hcd and address 3 kernel: [ 1288.664870] usb 5-1: configuration #1 chosen from 1 choice kernel: [ 1288.855812] usbcore: registered new interface driver libusual kernel: [ 1288.879351] Initializing USB Mass Storage driver... kernel: [ 1288.894268] scsi0 : SCSI emulation for USB Mass Storage devices kernel: [ 1288.902372] usbcore: registered new interface driver usb-storage kernel: [ 1288.902384] USB Mass Storage support registered. kernel: [ 1293.937346] scsi 0:0:0:0: Direct-Access ST332082 0A 3.AA PQ: 0 ANSI: 0 kernel: [ 1293.976633] SCSI device sda: 625142448 512-byte hdwr sectors (320073 MB) kernel: [ 1293.977973] sda: Write Protect is off kernel: [ 1293.979344] SCSI device sda: 625142448 512-byte hdwr sectors (320073 MB) kernel: [ 1293.980467] sda: Write Protect is off kernel: [ 1293.981053] sda: sda1 kernel: [ 1294.000894] sd 0:0:0:0: Attached scsi disk sda kernel: [ 1294.014048] sd 0:0:0:0: Attached scsi generic sg0 type 0
Quindi lanciamo il seguente comando:
$ udevinfo -a -p $(udevinfo -q path -n /dev/sda)
oppure il relativo tool con tanto di GUI:
$ usbview (eventualmente da installare)
visualizzeremo delle informazioni simili alle seguenti:

dove quelle che prenderemo in considerazione sono:
Manufacturer: Iomega
Serial Number: 38744678BGT
Fatto questo creiamo la seguente regola:
$ sudo vi /etc/udev/rules./10-IomegaUSB.rules
all’interno della quale scriveremo:
ATTRS{manufacturer}=="Iomega", ATTRS{serial}=="38744678BGT", KERNEL=="sd?1", NAME="IomegaUSB"
Ecco una breve spiegazione:
ATTRS{manufacturer}==”Iomega” e ATTRS{serial}==”38744678BGT” sono dei parametri semplicemente presi dall’output del comando “udevinfo”
KERNEL==”sd?1″ è considera solo le partizioni dei nodi di tipo device disco (consigliato)
NAME=”IomegaUSB” indica ad UDEV di creare un nodo (dev) persistente in riferimento al disco USB esterno
Salviamo quindi le modifiche apportate al file appena creato e riavviamo UDEV: (non obbligatorio ma consigliato)
$ sudo /etc/init.d/udev restart
Ora crediamo la cartella che andremo ad utilizzare per mappare il disco con i seguenti comandi:
$ sudo mkdir /media/IomegaUSB $ sudo chmod -R 775 /media/IomegaUSB $ sudo chown -R root.plugdev /media/IomegaUSB
A questo punto il gioco è quasi fatto…le ultime modifiche consistono nell’editare il file “/etc/fstab” aggiungendo la seguente linea alla fine:
$ sudo vi /etc/fstab
/dev/IomegaUSB /media/IomegaUSB auto user,noauto,rw,exec 0 0
E’ quindi giunta finalmente l’ora di godersi il nuovo disco in santa pace!
Alla prossima!
References
UDEV:
http://en.wikipedia.org/wiki/Udev
UDEV RULES:
http://ubuntuforums.org/showthread.php?t=168221
http://reactivated.net/writing_udev_rules.html
FAQ Rilevate su Internet:
- OK, perfetto…adesso il mio disco è collegato e montato…ma com’è che non riesco a scriverci dentro se non solo come utente root!?
Diciamo che può succedere ma che comunque grazie ad UDEV non è un problema…basta controllare di essere membri del gruppo plugdev con il seguente comando:
$id
Eventualmente lo fossimo allora controllare i permessi della cartella dove avete montato il vostro device.
- Bello…ma come posso montare il mio disco senza per forza doverlo fare da utente root??
è sufficiente assicurarsi che all’interno del file /etc/fstab il disco in considerazione sia montato con il parametro ‘user’ (vedi esempio sopra)




