Page suivantePage précédenteTable 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.

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).

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

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.


Page suivantePage précédenteTable des matières