2. Device

C'è una speciale nomenclatura che Linux usa per fare riferimento alle partizioni sui dischi fissi e che deve essere capita per potere seguire gli argomenti trattati nelle pagine seguenti.

In Linux, le partizioni sono rappresentate da file di device. Questi sono file fittizi posizionati in /dev. Ecco alcune voci:


brw-rw----    1 root     disk       3,   0 May  5  1998 hda
brw-rw----    1 root     disk       8,   0 May  5  1998 sda
crw-------    1 root     tty        4,  64 May  5  1998 ttyS0
Un file di device è un file di tipo c (sta per device a "caratteri", device che non usano la buffer cache) o b (sta per device a "blocchi", che passano attraverso la buffer cache). In Linux, tutti i dischi sono rappresentati esclusivamente come device a blocchi.

2.1. Nomi di device

2.1.1. Convenzioni per i nomi

Per convenzione, alle unità IDE vengono assegnati i nomi di device da /dev/hda a /dev/hdd. Hard Drive A (/dev/hda) è la prima unità e Hard Drive C (/dev/hdc) è la terza.

Tabella 2. Convenzioni per i nomi dei controller IDE

nome dell'unitàcontroller dell'unitànumero dell'unità
/dev/hda11
/dev/hdb12
/dev/hdc21
/dev/hdd22

Un PC tipico ha due controller IDE, ognuno dei quali può avere connesse due unità. Per esempio, /dev/hda è la prima unità (master) sul primo controller IDE e /dev/hdd è la seconda unità (slave) sul secondo controller (la quartà unità IDE nel computer).

Si può scrivere su questi device in modo diretto (usando cat o dd). Tuttavia, dato che questi device rappresentano l'intero disco, partendo dal primo blocco, si può per errore sovrascrivere il master boot record e la tabella delle partizioni, il che renderebbe l'unità inutilizzabile.

Tabella 3. Nomi delle partizioni

nome dell'unitàcontroller dell'unitànumero dell'unitàtipo di partizionenumero di partizione
/dev/hda111primaria1
/dev/hda211primaria2
/dev/hda311primaria3
/dev/hda411swapND
/dev/hdb112primaria1
/dev/hdb212primaria2
/dev/hdb312primaria3
/dev/hdb412primaria4

Una volta che un'unità è stata partizionata, le partizioni saranno rappresentate da numeri alla fine dei nomi. Per esempio, la seconda partizione sulla seconda unità sarà /dev/hdb2. Il tipo di partizione (primaria) è per chiarezza elencato nella tabella soprastante, anche se il concetto non verrà spiegato prima de la Sezione 3.3.

Tabella 4. Unità SCSI

nome dell'unitàcontroller dell'unitànumero dell'unitàtipo di partizionenumero di partizione
/dev/sda116primaria1
/dev/sda216primaria2
/dev/sda316primaria3

Le unità SCSI seguono uno schema simile; sono rappresentate da "sd" invece di "hd". La prima partizione della seconda unità SCSI sarà pertanto /dev/sdb1. Nella tabella soprastante, il numero dell'unità, cioè 6, è scelto arbitriamente per introdurre il concetto che i numeri identificativi SCSI non hanno corrispondenza nei nomi di device in Linux.

2.1.2. Assegnazione dei nomi

In (Sun) Solaris e (SGI) IRIX, il nome di device assegnato ad un'unità SCSI ha una relazione con il punto in cui essa è connessa. In Linux, c'è solo pianto e stridore di denti.

Prima


SCSI ID #2        SCSI ID #5       SCSI ID #7        SCSI ID #8
 /dev/sda          /dev/sdb         /dev/sdc          /dev/sdd

Dopo


SCSI ID #2                         SCSI ID #7        SCSI ID #8
 /dev/sda                           /dev/sdb          /dev/sdc

Le unità SCSI hanno numeri identificativi, ID, che vanno da 1 a 15. A numeri identificativi SCSI più bassi sono assegnate lettere di ordine inferiore. Per esempio, se si hanno due unità con numeri 2 e 5, allora la numero 2 è /dev/sda e la 5 è /dev/sdb. Se si rimuove una qualunque di esse, tutte le unità con numero più alto avranno al successivo avvio un nuovo nome.

Se si hanno due controller SCSI nella propria macchina Linux, è necessario esaminare l'output di /bin/dmesg al fine di vedere quale nome è stato assegnato a ciascuna unità. Se si rimuove uno dei due controller, tutte le unità del controller rimanente potrebbero essere rinominate. Grrr...

Ci sono due modi di aggirare l'ostacolo; entrambi comportano l'uso di un programma per assegnare un'etichetta a ciascuna partizione (vedere la la Sezione 6). L'etichetta persiste anche quando l'unità viene spostata fisicamente. Ci si riferisce in seguito alla partizione direttamente o indirettamente tramite la sua etichetta.

2.1.3. Partizioni logiche

Tabella 5. Partizioni logiche

nome dell'unitàcontroller dell'unitànumero dell'unitàtipo di partizionenumero di partizione
/dev/hdb112primaria1
/dev/hdb212estesaND
/dev/hda512logica2
/dev/hdb612logica3

La tabella soprastante illustra un misterioso salto nell'assegnazione dei nomi. Ciò è dovuto all'uso di partizioni logiche (vedere la la Sezione 3.4), che partono sempre dal numero 5, per ragioni spiegate più avanti.

Questo è tutto ciò che si deve sapere per avere a che fare con unità a disco in Linux. Per amor di completezza, si veda la spiegazione di Kristian sui numeri di device qui sotto.

2.2. Numeri di device

Le uniche cose importanti di un file di device sono i suoi numeri di device primario e secondario, che vengono mostrati al posto della dimensione del file:


$ ls -l /dev/hda

Tabella 6. Attributi dei file di device

brw-rw----1rootdisk3,0Jul 18 1994/dev/hda
permessi proprietariogrupponumero primario del devicenumero secondario del devicedatanome del device

Quando si accede ad un file di device, il numero primario seleziona quale driver di device viene chiamato per effettuare l'operazione di input/output. Questa chiamata viene fatta con il numero secondario come parametro e l'interpretazione del numero secondario è totalmente a carico del driver. La documentazione del driver normalmente descrive come il driver usa i numeri secondari. Per i dischi IDE, questa documentazione si trova in /usr/src/linux/Documentation/ide.txt. Per i dischi SCSI, ci si aspetterebbe tale documentazione in /usr/src/linux/Documentation/scsi.txt, ma lì non c'è. Si deve guardare il sorgente dei driver per essere sicuri ( /usr/src/linux/driver/scsi/sd.c:184-196). Per fortuna c'è l'elenco dei numeri e nomi di device di Peter Anvin in /usr/src/linux/Documentation/devices.txt; vedere le voci per i device a blocchi, numero primario 3, 22, 33, 34 per i dischi IDE e numero primario 8 per i dischi SCSI. I numeri primario e secondario sono rappresentati da un byte ciascuno ed è per questo che il numero di partizioni per ciascun disco è limitato.