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 connaissez 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
géomé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é).
Quand Linux détecte le gestionnaire de disque Ontrack Disk Manager il
décale tous les accès disques de 63 secteurs. De la même manière, si Linux
détecte EZ-Drive, tous les accès au secteur 0 seront décalés au secteur 1.
Cela signifie qu'il peut s'avérer difficile de se débarasse de ces gestionnaires
de disque. La plupart de ces gestionnaires ont une option de désinstallation,
mais si vous avez besoin de supprimer un gestionnaire de disque, une approche
peut être de donner explicitement une géométrie de disque sur la ligne de
commande. De ce fait Linux saute la routine ide_xlate_1024()
et il est
du coup possible de supprimer la table des partitions ainsi que le gestionnaire
de disque (rendant l'accès à toutes les données impossible) avec la commande
dd if=/dev/zero of=/dev/hdx bs=512 count=1
Les détails dépendent du numéro de version mineur du noyau.
Les noyaux récents (depuis le 2.3.21) reconanissen les paramètres de démarrage
tels que hda=remap
et hdb=noremap
. Il est alors possible de
conserver ou d'éviter le décalage dû à EZD sans se soucier de ce qui est dans la
table des partitions. Le paramètre de démarrage hdX=noremap
permet
également d'éviter le décalage dû au gestionnaire
Ontrack Disk Manager.