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)
Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:42