Avanti Indietro Indice

9. Conclusioni

Cosa significa tutto ciò? Per gli utenti Linux una sola cosa: che devono verificare che LILO e fdisk utilizzino la geometria corretta. Per fdisk la geometria `corretta' è quella utilizzata dagli altri sistemi operativi installati sullo stesso disco mentre per LILO è quella che permette un'interazione senza errori con il BIOS in fase di inizializzazione (di solito i due aspetti coincidono).

Come rileva la geometria fdisk? Interroga il kernel, utilizzando la funzione ioctl.h HDIO_GETGEO. L'utente è tuttavia in grado di forzare la geometria in modo interattivo o da linea di comando.

Come rileva la geometria LILO? Interroga il kernel utilizzando la ioctl HDIO_GETGEO. Tuttavia l'utente può forzare la geometria utilizzando l'opzione `disk=' nel file /etc/lilo.conf (cfr lilo.conf(5)). È possibile fornire a LILO l'opzione linear in modo da memorizzare nella mappa dei file i valori della LBA invece dei CHS e recupererà la geometria da utilizzare in fase di avvio mediante la funzione 8 dell'INT 13 per richiedere la geometria del disco.

Com'è in grado di rispondere il kernel? Bene, prima di tutto, l'utente può aver specificato una geometria esplicita fornendo le opzioni `hda=cyls,heads,secs' al kernel da riga di comando (cfr. bootparam(7)), probabilmtente di persona od indicando al "boot loader" di fornire tali valori al kernel. Per esempio, si può indicare a LILO di fornire tali informazioni opzionali aggiungendo una riga del tipo `append = "hda=cyls,heads,secs"' in /etc/lilo.conf (cfr. lilo.conf(5)). D'altrocanto il kernel è in grado di congetturare una geometria utilizzando possibilmente i valori ottenuti dal BIOS o dai dispositivi hardware.

È possibile (a partire dalla versione 2.1.79) cambiare i valori della geometria congetturata dal kernel utilizzando il filesystem /proc. Per esempio:

# sfdisk -g /dev/hdc
/dev/hdc: 4441 cylinders, 255 heads, 63 sectors/track
# cd /proc/ide/ide1/hdc
# echo bios_cyl:17418 bios_head:128 bios_sect:32 > settings
# sfdisk -g /dev/hdc
/dev/hdc: 17418 cylinders, 128 heads, 32 sectors/track
#

9.1 Calcolo dei parametri di LILO

Qualche volta è utile impostare una precisa geometria da riga di comando: `hda=cyls,heads,secs'. Quasi sempre si vuole un valore di secs=63, lo scopo di fornire tale valore è quello di specificare il valore heads (valori ragionevoli in questo periodo sono heads=16 e heads=255). Quali valori si potrebbero specificare per cyls? Quei valori che forniranno la capacità totale corretta di C*H*S settori. Per esempio, per un drive con 71346240 settori (36529274880 byte) si potrebbe calcolare C come 71346240/(255*63)=4441 (usando, e.g., il programma bc) e fornire quindi come parametri di avvio: hdc=4441,255,63. Come si può stabilire la capacità totale corretta? Per esempio:

# hdparm -g /dev/hdc | grep sectors
 geometry     = 4441/255/63, sectors = 71346240, start = 0
# hdparm -i /dev/hdc | grep LBAsects
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=71346240
indica due modi per stabilire il numero totale si settori pari a 71346240. I messaggi del kernel:
# dmesg | grep hdc
...
hdc: Maxtor 93652U8, 34837MB w/2048kB Cache, CHS=70780/16/63
 hdc: [PTBL] [4441/255/63] hdc1 hdc2 hdc3! hdc4 < hdc5 > ...
riportano (perlomeno) 34837*2048=71346176 settori e 70780*16*63=71346240 settori (almeno). In questo caso il secondo valore è quello corretto ma in generale entrambi sono arrotondati per difetto. Questo è un buon modo per definire in maniera approssimata le dimensioni del disco quando hdparm non è disponibile. Non assegnate mai a cyls un valore troppo grande! Nel caso di dischi SCSI il numero preciso dei settori è indicato dai messaggi forniti dal kernel all'avvio:
SCSI device sda: hdwr sector= 512 bytes. Sectors= 17755792 [8669 MB] [8.7 GB]
(MB e GB sono arrotondati, non per difetto, e in `notazione binaria').


Avanti Indietro Indice