Si le noyau de Linux détecte la présence d'un gestionnaire de disque sur un
disque dur IDE, il va essayer de recartographier le disque de la même
manière que l'aurait fait le gestionnaire de disque, comme ça Linux voit le
même partitionnement pour, par exemple, DOS avec OnTrack ou EZ-Drive.
Cependant, AUCUNE recartographie n'est effectuée quand une géométrie a été
passée en ligne de commande -- donc une option de la ligne de commande comme
`hd=
cyls,
têtes,
secs' peut très bien briser
la compatibilité avec un gestionnaire de disque.
Si vous êtes touché par ce problème et que vous connaîssez quelqu'un qui peut
compiler pour vous un nouveau noyau, trouvez le fichier linux/drivers/block/ide.c
et supprimez, dans la routine ide_xlate_1024()
, le test
if (drive->forced_geom) { ...; return 0; }
.
La nouvelle cartographie est obtenue en essayant les valeurs 4, 8, 16, 32, 64,
128, 255 pour le nombre de têtes (H*
C reste constant) jusqu'à ce
que C <= 1024 ou que H = 255.
Ci-dessous les détails -- les titres des sous-sections sont les messages qui apparaissent dans les différents messages de démarrage. Ici et partout ailleurs dans ce texte, les types des partitions sont donnés en hexadécimal.
EZ-Drive est détecté par le fait que le type de la première partition primaire
est 55. La géométrie est recartographiée comme décrit ci-dessus, et la table
des partitions du secteur 0 est supprimée -- à la place, la table des
partitions est celle lue sur le secteur 1. Le nombre de blocs du disque n'est
pas changé, mais les écritures sur le secteur 0 sont redirigées vers le
secteur 1. Ce comportement peut être modifié en recompilant le noyau
avec #define FAKE_FDISK_FOR_EZDRIVE 0
dans ide.c
.
OnTrack DiskManager (sur le premier disque dur) est détecté grâce au type 54 de la première partition primaire. La géométrie est recartographiée comme décrit ci-dessus et la totalité du disque est décalée de 63 secteurs (comme ça, l'ancien secteur 63 devient le numéro 0). Ensuite un nouveau MBR (avec une table des partitions) est lu depuis le nouveau secteur 0. Bien sûr ce décalage a pour but de libérer de la place pour le DD0 -- c'est pourquoi il n'y a pas de décalage sur les autres disques durs.
OnTrack DiskManager (sur les autres disques durs) est détecté grâce au type 51 ou 53 de la première partition primaire. La géométrie est recartographiée comme décrit ci-dessus.
Une version plus ancienne de OnTrack DiskManager n'est pas détectée
grâce au type de partition, mais par signature. (Un test est effectué
pour savoir si la valeur de décalage trouvée dans les octets 2 et 3 du MBR
n'est pas supérieure à 430, et si le short
trouvé à cette valeur de
décalage est égal à 0x55AA et qu'il est suivi par un octet impair.) Une fois
encore, la géométrie est recartographiée comme décrit ci-dessus.
Finalement, il y a un test qui tente de déduire une conversion à partir des
valeurs start
et end
de la partition primaire : si n'importe quelle
partition a comme secteurs de début et de fin respectivement 1 et 63, et
comme dernier numéro de tête 31, 63, 127 ou 254, alors, à partir du
moment où il est habituel de terminer des partitions sur une limite de
secteur, et qui plus est depuis que l'interface IDE utilise au plus 16
têtes, il est supposé qu'une conversion du BIOS est active, et la
geométrie est recartographiée pour utiliser respectivement 32, 64, 128 ou 255
têtes.
Cependant, le disque n'est pas recartographié quand la vision actuelle de la
géométrie a déjà 63 secteurs par piste et au moins autant de têtes (cela
signifie sans doute qu'il a déjà été recartographié).