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.
La convention de programmation est d'utiliser l'ioctl BLKGETSIZE
pour
obtenir la taille totale et HDIO_GETGEO
pour connaître le nombre de
têtes et de secteurs par piste et, si nécessaire, il est possible d'obtenir C
avec la formule C=taille/(H×S).
Ci-dessous se trouve une discussion sur les problèmes du noyau Linux. Les problèmes liés au BIOS et au positionnement des cavalier ont-été traités ci-dessus.
Des unités d'une taille supérieure à 33,8 Go ne fonctionneront pas avec les noyaux antérieurs au 2.2.14/2.3.21. 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 plus anciens que le 2.3.21 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 correctif est disponible pour de nombreux noyaux. Un correctif pour le 2.0.38 peut être trouvé à ftp.kernel.org. Un correctif pour le 2.2.12 peut être trouvé à www.uwsg.indiana.edu (il se peut qu'il faille le modifier un peu pour se débarrasser des tags html). Les noyaux 2.2.14 supportent ces disques durs. Dans la série 2.3.* des noyaux, le support pour ces disques existe depuis le 2.3.21. Il est également possible de résoudre ce problème avec une méthode matérielle en positionnant des cavaliers pour limiter la taille à 33,8 Go. Dans la plupart des cas, une mise à jour du BIOS sera nécessaire pour pouvoir démarrer depuis ce disque dur.