Ubuntu UDEV management

// April 6th, 2009 // Linux, Rubriche, Tutorials

udev

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:

screenshot-usb_viewer

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)

  • Google Buzz
  • Twitter
  • Share/Bookmark
|

Leave a Reply