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.
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)