Poco dopo che dischi fissi furono
inventati, la gente volle installare più di un sistema operativo, anche se
disponevano di un solo disco. Nacque così la necessità di un meccanismo che
dividesse un singolo disco fisico in tante unità logiche. Quindi ecco cos'è
una partizione: un insieme di blocchi contigui sul vostro hard disk che
viene trattato dal sistema operativo come se fosse un disco completamente
autonomo e separato.
È abbastanza evidente che le partizioni non devono sovrapporsi: un sistema
operativo non sarebbe felice se un altro sistema operativo installato
sulla stessa macchina gli sovrascrivesse informazioni importanti a causa
della sovrapposizione delle due partizioni. Non ci dovrebbe neanche essere
dello spazio vuoto tra una partizione e un'altra, in quanto anche se non
comporterebbe alcun danno, significherebbe sprecare prezioso spazio su disco
lasciandolo inutilizzato.
Un disco non ha bisogno di essere completamente partizionato. Potete
decidere di lasciare un po' di spazio alla fine senza assegnarlo ad alcun
sistema operativo e, successivamente, quando sarà chiaro quale
userete per la maggior parte del tempo, potrete partizionare
questo spazio vuoto rimanente e metterci sopra un file system.
Le partizioni non possono essere spostate né ridimensionate senza
distruggere il file system che contengono. Il ripartizionamento quindi
comporta il backup e il ripristino di tutti i file system coinvolti nel
ripartizionamento. In effetti, è molto facile fare dei pasticci durante il
ripartizionamento, così dovreste in ogni caso fare una copia di backup di
tutto prima ancora di usare cose come fdisk.
Beh, veramente alcuni tipi di partizione che contengono alcuni tipi di file
system possono essere divisi in due senza alcuna perdita di dati
(se siete fortunati). Per esempio, esiste un programma chiamato ``fips'' per
dividere le partizioni MS-DOS in due per far spazio a una partizione Linux
senza dover reinstallare MS-DOS. In ogni caso, non andreste a maneggiare
queste cose senza aver prima fatto un accurato e completo backup, vero?
I nastri sono molto utili per fare i backup. Sono veloci, affidabili e
facili da usare, quindi potrete effettuare il backup spesso, preferibilmente
in modo automatico e senza disagi.
Parlando di cassette: quello di cui sto parlando sono i veri nastri, non
quelle porcherie pilotate dal controller dei dischetti. Tenete in
considerazione SCSI: Linux lo supporta in modo nativo. Non occorre caricare
driver ASPI, non sprecate preziosa HMA e una volta che l'adattatore SCSI è
installato, potete attaccarci anche dischi, nastri, scanner e CD-ROM. Niente
più indirizzi I/O, acrobazie con IRQ né master/slave e livelli PIO da
abbinare.
In aggiunta: un buon adattatore SCSI fornisce alte prestazioni di I/O senza
occupare troppo la CPU. Anche durante una pesante attività di disco, avrete
tempi di risposta molto buoni. Se intendete usare un sistema Linux come un
server USENET o se volete entrare nel mercato degli ISP, non pensate
nemmeno di impostare un sistema senza SCSI.
Il numero di partizioni di un sistema basato su Intel è stato limitato
fin dall'inizio: la tabella delle partizioni era installata come parte del
settore di boot e aveva spazio solo per 4 partizioni. Queste partizioni
adesso sono chiamate partizioni primarie. Quando divenne chiaro che la gente
voleva più partizioni nei loro sistemi, sono state inventate le partizioni
logiche. Il loro numero non è limitato: ogni partizione logica contiene un
puntatore alla prossima, così da avere una catena potenzialmente illimitata
di partizioni.
Per ragioni di compatibilità, lo spazio occupato da tutte le partizioni
logiche deve essere tenuto in conto. Se state usando partizioni logiche, una
partizione primaria viene marcata come ``partizione estesa'' e il suo blocco
di inizio e di fine segnano l'area occupata dalle partizioni logiche in essa
contenute. Questo implica che lo spazio assegnato a tutte le partizioni
logiche deve essere contiguo. Ci può essere solo una partizione estesa per
disco: nessun programma fdisk può creare più di una partizione
estesa.
Linux non può gestire più di un limitato numero di partizioni per disco.
Così in Linux potrete avere 4 partizioni primarie (3 delle quali usabili, se
state usando partizioni logiche) e al massimo 15 partizioni totali su un
disco SCSI (63 in tutto su un disco IDE)
In Linux, le partizioni sono rappresentate come file di device. Un file di
device è un file con tipo c (che sta per ``carattere'', cioè device che non
usano un buffer di cache) oppure b (ossia device a ``blocchi'', che passano
dal buffer di cache). In Linux, tutti i dischi sono rappresentati solo come
device a blocchi. A differenza di altri unix, Linux non offre ``pure''
versioni a caratteri dei dischi e delle loro partizioni.
La sola cosa importante con un file di device sono il suo numero primario e
secondario, visualizzato invece delle dimensioni del file:
$ ls -l /dev/hda
brw-rw---- 1 root disk 3, 0 Jul 18 1994 /dev/hda
^ ^
| numero secondario di device
numero primario di device
cm
Quando un file di device viene aperto, il numero primario indica quale
driver viene usato per effettuare l'operazione di input/output. Alla
chiamata viene passato il numero secondario come parametro e spetta al
driver l'interpretazione del numero secondario. Di solito la documentazione
del driver riporta come viene usato il numero secondario. Per i dischi IDE,
questa documentazione è in
/usr/src/linux/Documentation/ide.txt. Per
i dischi SCSI, ci si aspetterebbe questa documentazione in
/usr/src/linux/Documentation/scsi.txt, ma non c'è. Per accertarsene,
occorrerebbe leggere il sorgente del driver,
(
/usr/src/linux/driver/scsi/sd.c:184-196). Fortunatamente, c'è la
lista dei numeri e dei nomi di device curata da Peter Anvin in
/usr/src/linux/Documentation/devices.txt; vedere le voci per i device
a blocchi, primario 3, 22, 33, 34 per i dischi IDE e primario 8 per gli
SCSI. Il numero primario e secondario sono un byte ognuno ed è per questo
che il numero di partizioni per disco è limitato.
Per convenzione, i file di device hanno determinati nomi e molti programmi
di sistema riconoscono questi nomi essendo stati compilati nel loro codice.
Si aspettano che i vostri dischi IDE si chiamino /dev/hd* e i
dischi SCSI /dev/sd*. I dischi sono numerati come a, b, c e così
via, quindi /dev/hda è il primo disco IDE e /dev/sda il
primo disco SCSI. Entrambi rappresentano interi dischi, iniziando dal primo
blocco. Scrivere su questi device con il programma sbagliato distruggerà il
master boot loader e la tabella delle partizioni dei dischi, rendendo così
tutti i dati inutilizzabili o facendo sì che il sistema non possa più eseguire il
boot. Siate sicuri di quello che fate e, ripeto, copiate su backup prima di
farlo.
Le partizioni primarie su un disco sono numerate 1, 2, 3 e 4. Così
/dev/hda1 è la prima partizione primaria del primo disco IDE
eccetera. Le partizioni logiche hanno numeri che vanno da 5 in su, così
/dev/sdb5 è la prima partizione logica del secondo disco SCSI.
Ogni voce nella tabella delle partizioni è contrassegnata da un blocco di
inizio, uno di fine, e un tipo. Il tipo è un codice numerico (a un byte) che
indica l'appartenenza di quella partizione a un determinato sistema
operativo. Per la gioia dei consulenti informatici i codici dei tipi di
partizione non sono del tutto univoci, cioè esiste la probabilità che due
sistemi operativi usino lo stesso codice.
Linux riserva per le sue partizioni di swap il codice 0x82, e lo 0x83 per il
filesystem ``nativo'' (che è ext2 per quasi tutti). L'oramai sorpassato e una
volta famoso Linux/Minix filesystem usava il codice 0x81. OS/2 segna le sue
partizioni con il tipo 0x07, lo stesso del NTFS di Windows NT. MS-DOS usa
diversi codici per i vari tipi di filesytem FAT: 0x01, 0x04 e 0x06. DR-DOS
usava il codice 0x81 per indicare partizioni FAT protette, creando una
ambiguità con Linux/Minix, ma ormai né Linux/Minix, né DR-DOS vengono
largamente usati. Per finire, le partizioni estese che fungono da
contenitori per le partizioni logiche hanno codice 0x05.
Le partizioni vengono create e cancellate con il programma fdisk.
Ogni sistema operativo che si rispetti viene fornito con una versione di
fdisk e per tradizione si chiama proprio fdisk (oppure
FDISK.EXE) in quasi tutti i sistemi operativi. Qualcuno di questi
fdisk, come ad esempio quello del DOS, mostra qualche limitazione
quando ha a che fare con partizioni di altri sistemi operativi. Queste
limitazioni includono l'impossibilità di gestire altri tipi di
codice, l'impossibilità di trattare numeri cilindro superiori a 1024, e
l'impossibilità di creare o gestire partizioni che non terminano esattamente
su un cilindro. Per esempio, fdisk di MS-DOS non può cancellare le
partizioni NTFS, quello di OS/2 è conosciuto per ``correggere'' senza
preavviso le partizioni create con fdisk di Linux che non terminano
esattamente sul cilindro e entrambi, sia quello DOS sia quello OS/2, hanno
problemi con i dischi che risultano avere più di 1024 cilindri (vedere il
Mini-HOWTO ``Large disk'' per i dettagli)