Page suivante Page précédente Table des matières

12. Limite de Linux à 65535 cylindres

L'ioctl HDIO_GETGEO retourne le nombre de cylindres dans un short. Cela signifie que si vous avez plus de 65535 cylindres, le nombre est tronqué, et (pour une configuration SCSI typique avec 1 Mio de cylindres) un disque de 80 Gio peut apparaître comme ne faisant que 16 Gio. Une fois que le problème a été détecté, il est facile de l'éviter.

12.1 Problèmes de l'IDE avec des disques durs de 34 Go et plus

Des unités avec une taille supérieure à 33,8 Go ne fonctionneront pas avec les noyaux récents. Les détails sont les suivants. Supposez que vous ayez acheté un tout nouveau disque dur IBM-DPTA-373420 qui offre une capacité de 66835440 secteurs (34,2 Go). Les noyaux récents vous diront que la taille est de 769*16*63 = 775152 secteurs (0,4 Go), ce qui est quelque peu étonnant. Et le fait de donner les paramètres hdc=4160,255,63 au démarrage n'aide en rien -- ils sont tout simplement ignorés. Que se passe-t-il ? La routine idedisk_setup() retrouve la géométrie rapportée par le disque dur (qui est 16383/16/63) et écrase ce que l'utilisateur avait demandé sur la ligne de commande, de telle manière que les données de l'utilisateur ne sont utilisées que pour la géométrie du BIOS. La routine current_capacity() ou idedisk_capacity() recalcule le nombre de cylindres comme étant 66835440/(16*63)=66305 mais comme il est stocké dans un short, il devient 769. Comme lba_capacity_is_ok() a détruit id->cyls, tous les appels se solderont par un échec, et la capacité du disque deviendra 769*16*63. Un patch est disponible -- il fera probablement bientôt partie intégrante d'un noyau officiel.


Page suivante Page précédente Table des matières