Yoda <yo...@pippo.invalid> wrote:
> Due domande-problemi, grazie a chi puo' darmi un hint.
>
> E' possibile fare in modo che, innestando un disco fisso usb, gli venga
> assegnata sempre una medesima lettera prestabilita?
> Ad esempio, se prima attacco una pendrive essa si prende /dev/sdc (ho
> due dischi fissi sda e sdb) che invece vorrei riservare al disco usb.
Penso che una strada sia utilizzare udev, in pratica scrivendo una
sua regola.
Come funziona:
Quando attacchi il disco, il kernel rileva informazioni inerenti il
dispositivo collegato, tra le altre ad esempio vi sono manufacturer
productid, vendorid ecc ecc.
Siccome parliamo di disco esterno usb considererei vendorid e productid.
Quali sono per il tuo disco?
basta che digiti:
lsusb
e troverai quei due valori che identificano il precisamente i device
correntemente collegati così come appaiono al kernel.
Altro comando interessante:
usb-devices
Ad esempio per il mio hd esterno rilevo:
---
$ lsusb
Bus 001 Device 002: ID 1058:1001 Western Digital Technologies, Inc.
Elements Desktop (WDE1U)
...
...
---
E con usb-devices:
---
T: Bus=01 Lev=01 Prnt=01 Port=03 Cnt=02 Dev#= 2 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=1058 ProdID=1001 Rev=01.05
S: Manufacturer=Western Digital
S: Product=External HDD
S: SerialNumber=574341553434303735313832
C: #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=2mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
---
Come si vede nel mio caso ho:
vendor_id: 1058
product_id: 1001
L'idea potrebbe essere: istruisco il udev in modo che quando viene
rilevato un nuovo device collegato che ha vendor e product id uguali a
quelli sopra, venga creato un link simbolico al file speciale che crea
il kernel.
Ad esempio poniamo che al disco venga associato il file speciale
/dev/sdc, allora imporremo che venga collegato a quel file speciale
un link simbolico del tipo "/dev/usb-western-digital".
E non importa se in altra occasione venisse automaticamente creato un
altro file speciale del tipo /dev/sdd perchè noi baseremo la regola udev
su product e vendor del nostro HD esterno ovvero "1058:1001" a cui sarà
sempre associato il file speciale (link simbolico)
/dev/usb-western-digital.
In altre parole:
- attacco il disco
- il kernel rileva 1058:1001
- il kernel crea /dev/sd_lettera
- udev vede che è stato aggiunti 1058:1001 e rileva che vi è stato
associato il file /dev/sd_lettera
(non dobbiamo sapere quale lettera sia in anticipo, udev la rileverà
automagicamente per noi).
- udev crea il link simbolico:
/dev/usb-western-digital --> /dev/sd_lettera
Questo è il funzionamento.
Ora il punto sarebbe come scrivere una regola di udev per far funzionare
la cosa.
E per questo scopo ti lasci alla lettura della documentazione di udev:
http://www.reactivated.net/writing_udev_rules.html
Un esempio al volo di quanto ho spiegato tutto su una riga:
---
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1058", ATTRS{idProduct}=="1001", \
SYMLINK+="usb-western-digital"
---
Se leggi la documentazione sopra vedrai che è anche possibile forzare
il kernel a rinominare il file speciale del device da /dev/sd_lettera
a /dev/usb-western-digital, senza la necessità di un link simbolico.
Al posto di SYMLINK userai:
NAME="usb-western-digital"
In questo modo se il kernel aveva dato /dev/sdc al tuo hd, quel file
viene proprio rinominato in /dev/usb-western-digital.
E se dopo inserissi una chiavetta questa prenderebbe /dev/sdc.
Invece col link simbolico sdc resterebbe esistente e la chiavetta
prenderebbe /dev/sdd.
Leggi il paragrafo "Basic Rules".
Quando scrivi la regola devi poi riavviare udev per fargliela leggere
udevadm control --reload
Le regole aggiunte dall'admin me medesimo, sulla mia slackware-14.0
sono in /etc/udev/rules.d/.
In pratica devi creare un file in cui ci piazzi la regola soprariportata
e chiamarlo tipo:
90-western-digital.rules
È importante l'estensione ".rules" altrimenti udev non la carica.
> Come posso fare per il fsck, che non viene fatto in automatica perche'
> non ho messo il disco usb in /etc/fstab?
Puoi farlo manualmente a filesystem smontato, poniamo che ci sia una
partizione:
fsck /dev/usb-western-digital1