Page suivante Page précédente Table des matières

9. Conséquences

Qu'est-ce que tout cela signifie ? Pour les utilisateurs de Linux seulement une chose : qu'ils doivent s'assurer que LILO et fdisk utilisent la bonne géométrie, où `bonne' pour fdisk est définie comme la géométrie utilisée par les autres systèmes d'exploitation sur le même disque dur, et pour LILO comme la géométrie qui va permettre des échanges valides avec le BIOS au moment du démarrage. (En général les deux vont de pair.)

Comment fdisk connaît-il la géométrie ? Il demande au noyau en utilisant l'ioctl HDIO_GETGEO. Mais l'utilisateur peut passer outre cela en précisant la géométrie de manière interactive, ou sur la ligne de commande.

Comment LILO connaît-il la géométrie ? Il demande au noyau en utilisant l'ioctl HDIO_GETGEO. Mais l'utilisateur peut passer outre cela en utilisant l'option `disk=' dans le fichier /etc/lilo.conf (voyez la page de manuel lilo.conf(5)). On peut également passer l'option linear à LILO, il va alors stocker des adresses LBA à la place des CHS dans son fichier `map', et retrouvera la géométrie à utiliser au moment du démarrage (en utilisant la fonction 8 de INT13 pour connaître la géométrie du disque dur).

Comment le noyau sait-il répondre ? Eh bien, en tout premier lieu, l'utilisateur doit avoir spécifié de manière explicite, soit à la main soit par l'intermédiaire du chargeur d'amorce, la géométrie avec la commande en ligne du noyau `hda=cyls,têtes,secs' (voyez la page de manuel bootparam(7)). Par exemple, vous pouvez demander à LILO de fournir une telle option en ajoutant une ligne `append = "hda=cyls,têtes,secs"' dans le fichier /etc/lilo.conf (voyez la page de manuel de lilo.conf(5)). Sinon, le noyau devra deviner, probablement en se servant des valeurs obtenues à partir du BIOS ou du matériel lui-même.

Il est possible (depuis Linux 2.1.79) de changer l'idée qu'a le noyau de la géométrie en utilisant le système de fichiers /proc. Par exemple :

# 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 Calcul des paramètres de LILO

Parfois il est utile de forcer une certaine géométrie en ajoutant `hda=cyls,têtes,secs' à la ligne de commande du noyau. On voudra pratiquement toujours secs=63, et le but recherché en ajoutant cela est de spécifier têtes. (Des valeurs raisonnables de nos jours sont têtes=16 et têtes=255.) Que devra-t-on mettre pour cyls ? Précisément le nombre qui donnera la bonne capacité totale de C*H*S secteurs. Par exemple, pour un disque dur avec 71346240 secteurs (36529274880 octets) on calculera C comme étant 71346240/(255*63)=4441 (par exemple en utilisant le programme bc), et on donnera le paramètre de démarrage hdc=4441,255,63. Comment connaît-on la capacité totale exacte ? Par exemple,

# 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
donne deux manières de trouver le nombre total de secteurs 71346240. Le message du noyau
# dmesg | grep hdc
...
hdc: Maxtor 93652U8, 34837MB w/2048kB Cache, CHS=70780/16/63
 hdc: [PTBL] [4441/255/63] hdc1 hdc2 hdc3! hdc4 < hdc5 > ...
nous donne (au moins) 34837*2048=71346176 et (au moins) 70780*16*63=71346240 secteurs. Dans ce cas c'est la seconde valeur qui apparaît comme correcte, mais en général les deux peuvent être arrondies à des valeurs inférieures. C'est une bonne façon d'approximer la taille du disque dur quand hdparm n'est pas disponible. Ne donnez jamais une valeur trop grande à cyls ! Dans le cas de disques durs SCSI, le nombre précis de secteurs est donné dans les messages de démarrage du noyau :
SCSI device sda: hdwr sector= 512 bytes. Sectors= 17755792 [8669 MB] [8.7 GB]
(et Mo, Go sont arrondis, pas arrondis à la valeur inférieure, et `binaires').


Page suivante Page précédente Table des matières