Page suivantePage précédenteTable 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
#
Ceci est particulièrement utile si vous avez besoin d'un nombre tel de paramètres sur la ligne de commande, que LILO est dépassé (ce qui n'est pas difficile à accomplir).

Comment le BIOS connaît-il la géométrie ? L'utilisateur peut l'avoir donnée dans la configuration du CMOS. Peut-être aussi que la géométrie est lue depuis le disque et convertie comme précisé dans la configuration. Dans le cas de disques SCSI, où il n'y a pas de géométrie, celle que le BIOS doit inventer peut également être précisé via des cavaliers ou des paramètres de configuration (par exemple, les contrôleurs Adaptec ont la possibilité de choisir entre les valeur habituelles H=64, S=32 et les 'conversions étendues' H=255, S=63). Parfois, le BIOS lit la table des partitions pour savoir quelle était la géométrie du disque au moment du dernier partitionnement. -- ceci implique l'hypothèse qu'une table des partitions valide est présente quand il y a une signature 55aa. Ceci est plutôt positif puisque il est alors possible de déplacer les disques de machine en machine. Mais le fait que le comportement du BIOS dépende du contenu du disque peut également être la source d'étranges problèmes. Par exemple, il a été rapporté qu'un disque de 2,5 Go était reconnu comme ayant une capacité de 528 Mo à cause du BIOS qui lisait la table des partitions et déduisait qu'il pouvait utiliser des valeurs CHS non converties. Un autre effet de ce comportement peut être lu dans ce rapport : des disques non partitionnés étaient plus lents que des disques partitionnés, ceci à cause du BIOS qui testait des modes 32 bits en lisant le MBR et en voyant qu'il possédait effectivement une signature 55aa.

Comment le disque connaît-il la géométrie ? En fait, le fabricant invente une géométrie qui, à un facteur près, donne la bonne capacité. De nombreux disques ont des cavaliers qui permettent de modifier la géométrie qu'ils donnent. Ceci permet d'éviter les bugs des BIOS. Par exemple, tous les disques IBM permettent à l'utilisateur de choisir entre 15 et 16 têtes et de nombreux fabricants ajoutent des cavaliers pour permettre de faire croire que le disque est plus petit que 2,1 Go ou 33,8 Go. Vous pouvez également lire la partie sur les cavaliers plus bas. Parfois, certains utilitaires permettent de changer le micro-code du disque dur.

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. Les noyaux récent donnent également la taille précise dans les messages de démararge :
# dmesg | grep hde
hde: Maxtor 93652U8, ATA DISK drive
hde: 71346240 sectors (36529 MB) w/2048KiB Cache, CHS=70780/16/63
 hde: hde1 hde2 hde3 < hde5> hde4
 hde2: <bsd: hde6 hde7 hde8 hde9>
Les noyaux plus anciens donnent simplement les Mo et CHS. En général la valeur CHS et arrondie à l'entier inférieur, ce qui, pour la sortie ci-dessus, nous donnerait au moins 70780×16×63=71346240 secteurs. Dans cet exemple, il se trouve que ce sont les valeurs précises. La valeur en Mo peut être arrondie au lieu d'être tronquée et peut, dans les vieux noyaux, être en unités 'binaire' (Mio) plutôt que décimale. Remarquez la correspondance entre la taille en Mo donnée par le noyau et le numéro de modèle du Maxtor. Également, dans le cas des disques SCSI, le nombre précis de secteurs est donné dans les message de démarrage du noyau :
SCSI device sda: 17755792 512-byte hdwr sectors (9091 MB)


Page suivantePage précédenteTable des matières