Avanti Indietro Indice

14. Risoluzione dei problemi

Molte persone pensano di avere problemi anche quando non ce ne sono. Oppure pensano che i loro problemi siano legati alla geometria del disco quando alla fine dei conti la geometria non c'entra nulla con il problema. Tutto quello che ho esposto potrà sembrare complicato ma maneggiare la geometria dei dischi è estremamente facile: non fate niente e tutto funzionerà correttamente; o forse passate a LILO l'opzione `linear' se al boot non andate oltre a LI. Guardate i messaggi del kernel al boot e ricordate: meno giocherellate con le geometrie (specificando il numero di testine e cilindri a LILO o a fdisk o dalla riga di comando al kernel) e più possibilità avete che tutto funzioni. Per dirla in poche parole, va già tutto bene così com'è configurato in maniera predefinita.

E ricordate che Linux non utilizza in nessuna riga di codice la geometria del disco per questo motivo non avrete problemi utilizzandolo dovuti alla geometria. La geometria del disco è utilizzata solamente da LILO e da fdisk. Di converso, se LILO fallisce l'inizializzazione del sistema ci può essere un problema legato alla geometria. Se sistemi operativi diversi non capiscono la tavola delle partizioni allora c'è un problema legato alla geometria. Non c'è nient'altro. In particolare se il montaggio delle periferiche ha dei problemi, state tranquili non sono legati alla geometria del disco ma a qualcos'altro.

14.1 Problema: avviando il sistema da un disco SCSI viene assegnata ai dischi IDE una geometria errata.

È possibile che un disco fornisca la sua geometria in modo errato. Il kernel di Linux interroga il BIOS per conoscere la geometria di hd0 e hd1 (i driver del BIOS indicati come 80H e 81H) e assume che questi dati siano per hda e hdb. Ma in un sistema SCSI, in cui i primi due dischi possono essere SCSI, può succedere che al quinto disco, che è il primo disco IDE hda, sia assegnata la geometria di sda. Questo tipo di problemi si risolvono facilmente fornendo i parametri della geometria `hda=C,H,S' in fase di inizializzazione o in /etc/lilo.conf.

14.2 Un non problema: dischi identici possono avere geometria diversa?

`Posseggo due dischi eguali da 10 GB della IBM. Tuttavia fdisk fornisce delle dimensioni diverse. Guarda:

# fdisk /dev/hdb
Disk /dev/hdb: 255 heads, 63 sectors, 1232 cylinders
Units = cylinders of 16065 * 512 bytes

   Device Boot  Start      End   Blocks   Id  System
/dev/hdb1           1     1232  9896008+  83  Linux native
# fdisk /dev/hdd
Disk /dev/hdd: 16 heads, 63 sectors, 19650 cylinders
Units = cylinders of 1008 * 512 bytes

   Device Boot  Start      End   Blocks   Id  System
/dev/hdd1           1    19650  9903568+  83  Linux native
Cos'è capitato?'

Cosa sta succedendo? Bene, prima di tutto questi dischi sono entrambi da 10 giga: le dimensioni di hdb sono 255*63*1232*512 = 10133544960, e quelle di hdd 16*63*19650*512 = 10141286400, così non c'è nulla di errato e il kernel li vede entrambi come dischi da 10.1 GB. Perché la differenza di dimensione? È dovuta al fatto che il kernel acquisisce i dati per i primi due dischi IDE da BIOS e il BIOS ha rimappato hdb in modo che abbia 255 testine (e 16*19650/255=1232 cilindri). L'arrotondamento ti costa almeno 8 MB.

Se vuoi rimappare hdd devi passare, come fatto prima, i parametri `hdd=1232,255,63' al kernel in fase di inizializzazione.

14.3 Un non problema: fdisk vede molti blocchi in meno di df?

fdisk ti dice quanti blocchi ci sono nel disco. Se tu crei un filesystem sul disco, diciamo con mke2fs, allora questo filesystem ha bisogno di spazio per mantenere le informazioni relative a se stesso - di solito circa il 4% della dimensione del filesystem, di più se il numero degli inode è alto. Per esempio:

# sfdisk -s /dev/hda9
4095976
# mke2fs -i 1024 /dev/hda9
mke2fs 1.12, 9-Jul-98 for EXT2 FS 0.5b, 95/08/09
...
204798 blocks (5.00%) reserved for the super user
...
# mount /dev/hda9 /somewhere
# df /somewhere
Filesystem         1024-blocks  Used Available Capacity Mounted on
/dev/hda9            3574475      13  3369664      0%   /mnt
# df -i /somewhere
Filesystem           Inodes   IUsed   IFree  %IUsed Mounted on
/dev/hda9            4096000      11 4095989     0%  /mnt
#
Abbiamo una partizione con 4095976 blocchi, creiamo un filesystem di tipo ext2 nella stessa, la montiamo e scopriamo che ha solo 3574475 blocchi - 521501 blocchi (12%) sono "persi" perché dedicati agli inode e ad altre informazioni. È da osservare che la differenza tra il numero di blocchi totale 3574475 e il numero di blocchi disponibili per gli utenti 3369664 è pari a 13 blocchi in più dei 204798 riservati al root. Quest'ultimo numero può esserre modificato utilizzando tune2fs. Questa opzione `-i 1024' è ragionevole solo per sistemi che devono contenere molti piccoli file come le news e simili. Il valore predefinito sarebbe:
# mke2fs /dev/hda9
# mount /dev/hda9 /somewhere
# df /somewhere
Filesystem         1024-blocks  Used Available Capacity Mounted on
/dev/hda9            3958475      13  3753664      0%   /mnt
# df -i /somewhere
Filesystem           Inodes   IUsed   IFree  %IUsed Mounted on
/dev/hda9            1024000      11 1023989     0%  /mnt
#
Ora solo 137501 blocchi (3.3%) sono usati per gli inode, così abbiamo guadagnato rispetto a prima 384 MB (ogni inode accupa 128 byte). D'altro canto, questo filesystem può contenere al massimo 1024000 di file (più che sufficienti), contro i 4096000 (troppi) di prima.


Avanti Indietro Indice