La formattazione

La formattazione è il processo con cui si segnano sul mezzo magnetico le tracce e i settori. Prima che venga formattato il disco ha una superficie in cui i segnali magnetici si sovrappongono in maniera caotica, mentre dopo la formattazione si porta un certo ordine nel caos, essenzialmente tracciando delle linee dove vanno le tracce e dove esse vengono suddivise in settori. I dettagli reali non sono proprio questi, ma è irrilevante; quello che è importante è che un disco non può essere usato se non è stato formattato.

La terminologia a questo proposito è piuttosto confusa: nell'MS-DOS, la parola formattazione viene usata anche per il processo di creazione di un filesystem (che verrà discusso più avanti); in questo caso i due processi sono spesso combinati, specialmente per i floppy. Quando sarà necessaria una distinzione, la formattazione reale viene chiamata formattazione a basso livello, mentre la creazione del filesystem si chiama formattazione ad alto livello. Nei circoli UNIX, i due processi vengono chiamati formattazione e creazione di un filesystem, quindi in questo libro verranno usati questi termini.

Per i dischi IDE ed alcuni dischi SCSI la formattazione viene fatta in realtà in fabbrica e non c'è bisogno di ripeterla, quindi la maggior parte delle persone non avranno bisogno di preoccuparsene. In effetti, formattare un hard disk può provocarne un malfunzionamento, perché può essere necessario farlo in maniera particolare per permettere la sostituzione automatica dei settori danneggiati.

I dischi che devono o possono essere formattati spesso richiedono comunque un programma speciale, dato che l'interfaccia alla logica di formattazione all'interno del disco è diversa da caso a caso. Il programma di formattazione spesso è sul BIOS del controller o viene fornito come programma MS-DOS; in nessuno dei due casi può essere usato facilmente da Linux.

Durante la formattazione si possono incontrare dei punti danneggiati sul disco, che vengono chiamati blocchi danneggiati o settori danneggiati; qualche volta vengono gestiti dallo stesso drive, ma anche in questi casi, se se ne sviluppano altri, bisogna fare qualcosa per evitare di usare quelle parti del disco. La logica per farlo è interna al filesystem; come aggiungervi le informazioni utili viene descritto qui sotto. In alternativa si può creare una piccola partizione che ricopra solo la parte danneggiata del disco: può essere una buona idea se si è danneggiata una parte piuttosto grande, dato che i filesystem possono avere dei problemi con aree danneggiate di grandi dimensioni.

I floppy vengono formattati con fdformat. Il file di device del floppy da usare viene dato come parametro; ad esempio, il seguente comando formatterebbe un dischetto ad alta densità, da 3.5 pollici, nel primo lettore di floppy:

$ fdformat /dev/fd0H1440
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting ... done
Verifying ... done
$
Notate che se volete usare un dispositivo che venga rilevato automaticamente (ad esempio /dev/fd0), dovete per prima cosa impostarne i parametri con setfdprm. Per avere lo stesso effetto del comando qui sopra, bisognerebbe fare così:
$ setfdprm /dev/fd0 1440/1440
$ fdformat /dev/fd0
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting ... done
Verifying ... done
$
Di solito è più conveniente scegliere il file di device corretto che corrisponda al tipo di floppy. Notate che non è saggio formattare i floppy ad una capacità maggiore di quella per cui sono stati progettati.

fdformat convaliderà anche il floppy, cioè controllerà che non ci siano blocchi danneggiati; proverà a leggere e scrivere su un blocco danneggiato diverse volte (lo si può sentire, dato che il rumore del lettore cambia moltissimo). Se il floppy è solo leggermente danneggiato (a causa dello sporco sulla testina del lettore alcuni errori sono segnali falsi), fdformat non si lamenterà, ma un errore reale farà abortire il processo di convalida. Il kernel stamperà dei messaggi di log per ogni errore di I/O che trova, messaggi che andranno in console o, se si usa syslog, nel file /var/log/messages. fdformat non dice dove si trova l'errore (di solito non ci interessa, i floppy sono abbastanza a buon mercato da poterne buttare uno automaticamente, se è danneggiato).

$ fdformat /dev/fd0H1440
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting ... done
Verifying ... read: Unknown error
$

Per cercare soltanto i blocchi danneggiati su un disco o su una partizione si usa il comando badblocks (anche per i floppy); non formatta il disco, quindi lo si può usare anche su filesystem esistenti. L'esempio qui sotto controlla un floppy da 3.5 pollici con due blocchi danneggiati.

$ badblocks /dev/fd0H1440 1440
718
719
$

badblocks rende in output i numeri dei blocchi che trova danneggiati. La maggior parte dei filesystem riesce ad evitarli, mantenendone un elenco che viene inizializzato quando viene creato il filesystem e può essere modificato in seguito. La prima ricerca dei blocchi danneggiati può essere fatta con il comando mkfs (che inizializza il filesystem), ma i controlli successivi vanno fatti con badblocks ed i nuovi blocchi dovrebbero essere aggiunti con fsck. Descriveremo mkfs e fsck più avanti.

Molti dischi moderni individuano automaticamente i blocchi danneggiati, e tentano di recuperarli usando al loro posto un blocco speciale, integro, riservato per questo scopo, che non è visibile al sistema operativo. Questa caratteristica dovrebbe essere documentata nel manuale del disco, se siete curiosi di sapere se ce l'avete. Anche in dischi di questo tipo si può avere perdita di dati, se il numero di blocchi danneggiati diventa troppo grande, anche se è probabile che a quel punto il disco sarebbe troppo rovinato per essere utile.