
                      HOWTO - Disques de grande capacit

Andries Brouwer, aeb@cwi.nl,
version franaise par Xavier Serpaggi, xavier.serpaggi@libertysurf.fr

   v2.2z, 2 fvrier 2002
     _________________________________________________________________

   _Tout sur la gomtrie des disques durs et la limite des 1024
   cylindres. _
     _________________________________________________________________


   Pour obtenir une version toujours  jour, mais en anglais, de ce
   document reportez-vous  la page www.win.tue.nl.

1. nonc du problme

   Supposons que vous ayez un disque dur de plus de 1024 cylindres.
   Supposons galement que vous ayez un systme d'exploitation qui
   utilise l'ancienne interface INT13, d'ntre/Sortie sur disques. Dans
   ce cas, vous avez un problme, parce que cette interface utilise un
   champ de 10 bits pour coder les cylindres sur lesquels sont effectues
   les ntres/Sorties, de telle manire que les cylindres 1024 et
   au-del sont inaccessibles.

   Heureusement, Linux ne se sert pas du BIOS, donc il n'y a pas de
   problme.

   Sauf peut-tre pour deux choses :

   (1) Quand vous dmarrez votre systme, Linux ne fonctionne pas encore
   et ne peut donc pas vous prserver des problmes lis au BIOS. Cela a
   certaines consquences pour LILO et d'autres programmes d'amorage du
   mme acabit.

   (2) Il est ncessaire que tous les systmes d'exploitation qui se
   partagent un mme disque dur se mettent d'accord sur la position
   physique de chaque partition. En d'autres termes, si vous utilisez
   Linux et disons, DOS sur un seul disque dur, alors les deux se doivent
   d'interprter la table des partitions de la mme manire. Cela a
   quelques consquences pour le noyau de Linux et pour fdisk.

   Vous trouverez ci-dessous une description assez pousse de tous les
   dtails importants. Prenez en compte le fait que j'utilise comme
   rfrence un noyau dans sa version 2.0.8. D'autres versions pourront
   donc prsenter quelques diffrences.

2. Rsum

   Vous avez un nouveau disque de grande capacit. Que faire ? Bon, du
   ct logiciel il faut utiliser fdisk (ou mieux, cfdisk), pour crer
   les partitions, ensuite mke2fs pour crer un systme de fichiers et
   enfin mount pour faire le lien entre ce nouveau systme de fichiers et
   l'arborescence dj existante.

   Il n'est pas ncessaire de lire ce HOWTO  partir du moment o, de nos
   jours, il n'y a _pas_ de problme avec les disques de grande capacit.
   La grande majorit des problmes constats est due au fait que les
   gens pensent qu'il peut y avoir un problme et installent un
   gestionnaire de disques durs, ou passent en mode expert dans fdisk, ou
   encore spcifient explicitement une gomtrie de disque  LILO ou sur
   la ligne de commande du noyau.

   Cependant, les domaines dans lesquels interviennent typiquement les
   problmes sont :
     * un matriel ancestral ;
     * plusieurs systmes d'exploitation sur le mme disque dur ;
     * le dmarrage.

   Conseil :

   Pour les disques durs SCSI de grande capacit : Linux les a trs tt
   supports. Il n'y a rien  faire.

   Pour les disques durs IDE de grande capacit (au-del de 8,4 Go) :
   procurez-vous un noyau stable rcent (2.0.34 ou plus). Normalement,
   tout doit se passer correctement, surtout si vous avez eu la sagesse
   de ne pas dire au BIOS de faire des conversions du type LBA ou
   assimil.

   Pour des disques durs IDE de capacit vraiment importante (au-del de
   33,8 Go) : reportez-vous  la section Problmes de l'IDE avec des
   disques durs de 34 Go et plus plus bas dans ce document.

   Si LILO reste bloqu au dmarrage, il faut essayer de spcifier linear
   dans le fichier de configuration /etc/lilo.conf (et si linear tait
   dj prsent, essayez sans). Si vous avez une version rcente de LILO
   (21.4 ou mieux), le mot-cl lba32 devrait vous permettre de dmarrer
   de n'importe o sur le disque. Cela signifie en fait que la limite des
   1024 cylindres a disparue (bien entendu, LILO est un peu fragile et il
   peut tre plus pratique d'utiliser un gestionnaire de dmarrage
   diffrent).

   Il y a des problmes de gomtrie qui peuvent tre rsolus en passant
   explicitement une gomtrie au noyau/LILO/fdisk.

   Si vous avez une vieille version de fdisk et qu'il vous met des
   messages d'erreur du type 'overlapping partitions' : ignorez-les ou
   vrifiez en utilisant cfdisk que tout va effectivement bien.

   Pour le HPT366, reportez-vous au Linux HPT366 HOWTO.

   Si, au moment du dmarrage, le noyau ne peut pas lire la table des
   partitions, envisagez la possibilit que UDMA66 ait-t slectionn
   alors que le contrleur, le cble ou bien le disque dur, ne supportent
   pas ce mode. Dans ce cas, quoi que vous fassiez, vos tentatives de
   lecture resteront vaines et, tenter de lire la table des partitions
   est la premire chose que fait le noyau. Assurez-vous que UDMA66 n'est
   pas utilis.

   Si vous pensez que quelque chose cloche dans la taille de votre disque
   dur, assurez-vous que vous n'tes pas en train de confondre units
   binaires et dcimales et sachez que l'espace libre rapport par df
   pour un disque vide, est infrieur de quelques centimes  la taille
   de la partition, ce  cause d'un en-tte de gestion.

   Si le noyau rapporte deux tailles diffrentes pour un mdia amovible,
   cela veut dire que l'une est donne par le mdia lui-mme et l'autre
   par le disque/la disquette. Cette seconde valeur est gale  zro dans
   le cas o aucun disque/disquette n'est prsent.

   Maintenant, si vous pensez qu'il y a tout de mme des problmes, ou
   simplement si vous tes curieux, lisez la suite.

3. Units et tailles

   Un kilo-octet (Ko) est gal  1000 octets (NdT : un octet se dit byte
   en anglais et est abrg avec un 'B' en majuscule.  ne pas confondre
   avec un bit, qui se dit bit et qui est abrg avec un 'b' en
   minuscule !). Un Mga-octet (Mo) est gal  1000 Ko. Un Giga-octet
   (Go) est gal  1000 Mo. Un Tra-octet (To) est gal  1000 Go. Ceci
   est la norme dans le Systme International (SI).

   Cependant, il y a des personnes qui utilisent la conversion
   1 Mo=1024000 octets et parlent de disquettes de 1,44 Mo et des
   personnes qui pensent que 1 Mo=1048576 octets. L, je me reporte au
   nouveau standard et j'cris Ki, Mi, Gi, Ti pour les units binaires,
   de telle sorte que les disquettes ont une taille de 1440 Kio (1,47 Mo,
   1,41 Mio), 1 Mio est gal  1048576 octets (1,05 Mo), 1 Gio reprsente
   1073741824 octets (1,07 Go) et 1 Tio vaut 1099511627776 octets
   (1,1 To).

   D'une manire assez normale, les constructeurs de disques durs suivent
   la norme SI et utilisent des units dcimales. Cependant, les messages
   de dmarrage du noyau Linux (pour les noyau qui ne sont pas trs
   rcents) et quelques programmes de type fdisk utilisent les symboles
   MB et GB (Mo et Go en franais) pour les units binaires, ou
   binaires-dcimales mlanges. Donc, avant que vous ne pensiez que
   votre disque est plus petit que ce qu'on vous avait promis lors de son
   achat, calculez sa vraie taille en units dcimales (ou simplement en
   octets).

   En ce qui concerne la terminologie et les abrviations des units
   binaires, Knuth propose une alternative qui est d'utiliser KKo, MMo,
   GGo, TTo, PPo, EEo, ZZo, YYo et de les dnommer _grand kilo octet_,
   _grand mga octet_, ... _grand yota octet_. Il crit : _"Remarquez que
   le fait de doubler la lettre a une connotation  la fois binaire et
   d'amplitude."_ C'est une bonne proposition -- _grand giga octet_ sonne
   mieux que _gibi octet_. Cependant, pour le sujet qui est le ntre, la
   seule chose importante est de mettre l'accent sur le fait qu'un mga
   octet contient prcisment 1000000 octets et qu'il est ncessaire
   d'employer d'autres termes ou d'autres abrvations si vous voulez
   dsigner autre chose.

3.1 Taille d'un secteur

   Dans le cadre de ce texte, un secteur a une taille de 512 octets. Cela
   est pratiquement toujours vrai, mais certains disques Magnto-Optiques
   par exemple, utilisent une taille de secteur gale  2048 octets et
   toutes les capacits donnes ci-dessous doivent tre multiplies par
   quatre. (Si vous utilisez fdisk sur de tels disques, assurez-vous
   d'avoir une version 2.9i ou suprieure et passez-lui l'option
   -b 2048.)

3.2 Taille d'un disque

   Un disque avec C cylindres, H ttes (NdT : tte se dit _head_ en
   anglais, d'o l'abrviation !) et S secteurs par piste possde en tout
   CHS secteurs et peut stocker CHS512 octets. Par exemple, si sur
   un disque dur il est crit C/H/S=4092/16/63, alors celui-ci a
   40921663=4124736 secteurs et peut contenir
   4124736512=2111864832 octets (2,11 Go). Il y a une convention dans
   l'industrie qui consiste  donner C/H/S=16383/16/63 pour les disques
   durs de plus de 8,4 Go et donc la taille du disque ne peut plus tre
   dduite des valeurs C/H/S rapportes par ce dernier.

4. Accs  un disque dur

   Si on veut lire ou crire quelque chose  partir de, ou sur un disque
   dur, il faut spcifier une position sur ce disque, en donnant par
   exemple un numro de secteur ou de bloc. Si le disque dur est de type
   SCSI, alors ce numro de secteur va directement au moteur de commande
   SCSI et est compris par le disque. Si le disque dur est de type IDE et
   qu'il utilise le mode LBA, alors il se passe exactement la mme chose.
   Mais si le disque dur est vieux, RLL, MFM ou IDE avant l'apparition du
   LBA, alors l'lectronique qui lui est attache attend un triplet
   (cylindre, tte, secteur) pour dsigner l'endroit voulu.

   La correspondance entre la numrotation linaire et cette notation
   tridimensionnelle est la suivante : pour un disque dur avec
   C cylindres, H ttes et S secteurs/pistes, la position (c,h,s) en 3D,
   ou la notation CHS, est la mme que la position cHS+hS+(s-1) en
   notation linaire ou bien LBA. (Le -1 est d au fait que
   traditionnellement les secteurs sont numrots  partir de 1 et non 0,
   dans cette notation 3D.)

   En consquence, pour pouvoir utiliser un trs vieux disque non-SCSI,
   il faut connatre sa _gomtrie_, c'est--dire les valeurs de C, H et
   S. (Si vous n'avez pas d'information  ce sujet, vous pouvez toujours
   fouiller cette mine : www.thetechpage.com.)

4.1 Accs disques du BIOS et la limite des 1024 cylindres

   Linux ne se sert pas du BIOS, mais d'autres systmes d'exploitation le
   font. Le BIOS, qui existait avant le temps du LBA, offre avec INT13
   des routines d'ntre/Sortie disque qui prennent (c,h,s) comme
   arguments. (Plus prcisment : AH slectionne la fonction  excuter,
   CH correspond aux 8 bits de poids faible du numro de cylindre, CL a
   dans ses bits 7-6 les deux bits de poids fort de ce mme numro et
   dans ses bits 5-0 le numro du secteur, DH est le numro de la tte et
   DL est le numro du lecteur (80h ou 81h). Cela explique en partie
   l'agencement de la table des partitions.)

   Donc, nous obtenons un CHS cod sur trois octets, avec 10 bits pour le
   numro du cylindre, 8 bits pour le numro de tte et 6 bits pour le
   numro de secteur sur la piste (numrot de 1  63). Il s'ensuit que
   le numro de cylindre peut prendre des valeurs allant de 0  1023 et
   que le BIOS ne peut pas adresser plus de 1024 cylindres.

   Les logiciels DOS et Windows n'ont pas volu quand furent introduits
   les disques IDE avec le support LBA et ont toujours eu besoin du
   soutien d'une gomtrie pour grer les disques durs, mme quand cela
   n'a plus t ncessaire pour effectuer des ntres/Sorties, mais
   uniquement pour converser avec le BIOS. Cela signifie bien sr que
   Linux a besoin du support de la gomtrie du disque dur quand il est
   ncessaire de communiquer avec le BIOS ou avec d'autres systmes
   d'exploitation, mme sur des disques durs modernes.

   Cet tat de choses a dur pendant  peu prs quatre ans. Ont alors
   commenc  apparatre sur le march des disques durs qui ne pouvaient
   plus tre adresss avec les fonctions INT13 ( cause du fait que
   10+8+6=24 bits pour (c,h,s) ne peuvent pas adresser plus de 8,5 Go) et
   une nouvelle interface BIOS a t cre : les dnommes Fonctions
   INT13 tendues, o DS:SI pointe sur un paquet reprsentant l'adressage
   du disque sur 16 octets, qui contient un nombre absolu de blocs
   commenant par 8 octets.

   Tout doucement, le monde Microsoft semble aller vers une utilisation
   de ces Fonctions INT13 tendues. Probablement, dans quelques annes,
   plus aucun systme moderne plac dans un ordinateur moderne n'aura
   besoin du concept de 'gomtrie de disque dur'.

4.2 Histoire du BIOS et des limites de l'IDE

   _Spcification ATA (pour les disques durs IDE) -- la limite des 137 Go_
          Au plus 65536 cylindres (numrots de 0  65535), 16 ttes
          (numrotes de 0  15), 255 secteurs par piste (numrots de 1
           255), pour une capacit totale maximale de 267386880 secteurs
          (de 512 octets chacun), ce qui fait 136902082560 octets
          (137 Go). En 2001, le premier disque dur d'un capacit
          suprieure  cela est apparu (le Maxtor Diamondmax de 160 Go).

   _BIOS Int 13 -- la limite des 8,5 Go_
          Au plus 1024 cylindres (numrots de 0  1023), 256 ttes
          (numrotes de 0  255), 63 secteurs par piste (numrots de 1
           63) pour une capacit totale maximale de 8455716864 octets
          (8,5 Go). De nos jours, cela est une srieuse limitation. Cela
          signifie que DOS ne peut utiliser les actuels disques de grande
          capacit.

   _La limite des 528 Mo_
          Si les mmes valeurs c,h,s sont utilises pour les appels aux
          fonctions Int13 du BIOS et pour les oprations
          d'ntres/Sorties du disque dur, alors les deux limitations
          s'ajoutent et l'on ne peut utiliser au plus que 1024 cylindres,
          16 ttes, 63 secteurs par piste, ce qui donne une capacit
          totale maximale de 528482304 octets (528 Mo), l'abominable
          limite des 504 Mio pour DOS avec un vieux BIOS. Cela a commenc
           poser des problmes aux alentours de 1993 et les gens ont eu
          recours  toutes sortes de bidouillages, aussi bien au niveau
          matriel (LBA), qu'au niveau du micro-code (NdT : le
          'firmware') (les conversions du BIOS), ou qu'au niveau logiciel
          (les gestionnaires de disques durs). Le concept de 'conversion'
          a t invent (1994) : un BIOS pouvait utiliser une gomtrie
          quand il s'adressait au lecteur et une autre gomtrie, fausse
          celle-l, quand il parlait  DOS et faire des conversions de
          l'une  l'autre.

   _La limite des 2,1 Go (avril 1996)_
          Quelques vieux BIOS n'utilisent qu'un champ de 12 bits en RAM
          CMOS pour donner le nombre de cylindres. De ce fait, ce nombre
          peut tre au plus gal  4095 et l'on ne peut accder qu'
          40951663512=2113413120 octets. Le fait d'avoir un disque dur
          de plus grande capacit se traduirait par un plantage au moment
          du dmarrage. Cela a pour effet de rendre les disques avec une
          gomtrie de 4092/16/63 assez populaires. Et encore de nos
          jours, beaucoup de gros disques durs ont un cavalier qui permet
          de faire croire qu'ils ont une gomtrie de 4092/16/63. Vous
          pouvez galement jeter un coup d'oeil  la page plus de 2 Go.

   _La limite des 3,2 Go_
          Il y avait un bug dans la gestion des BIOS Phoenix 4.03 et 4.04
          qui bloquait le systme lors de la configuration du CMOS pour
          des disques durs ayant une capacit suprieure  3277 Mo. Jetez
          un oeil  la page plus de 3 Go.

   _La limite des 4,2 Go (fvrier 1997)_
          Une conversion simple du BIOS (ECHS=CHS tendu, parfois appele
          'Large disk support' ou simplement 'Large') fonctionne en
          doublant le nombre de ttes et en divisant par deux le nombre
          de cylindres montrs au DOS, de manire rpte, jusqu' ce que
          le nombre de cylindres soit au plus gal  1024. Maintenant,
          DOS et Windows 95 ne peuvent pas supporter 256 ttes de lecture
          et donc, dans le cas frquent o le disque dit avoir 16 ttes,
          cela signifie que cette moulinette ne fonctionne que jusqu'
          une taille de 81921663512=4227858432 octets (avec une fausse
          gomtrie de 1024 cylindres, 128 ttes et 63 secteurs par
          piste). Remarquez que ECHS ne modifie pas le nombre de secteurs
          par piste, donc si ce n'est pas 63, la limite sera encore plus
          basse. Voyez la page plus de 4 Go.

   _La limite des 7,9 Go_
          Des BIOS un peu plus malins que les autres vitent le problme
          prcdent en ajustant d'abord le nombre de ttes  15 ('revised
          ECHS'), de faon qu'une fausse gomtrie comportant 240 ttes
          soit obtenue, valable jusqu' une taille de
          102424063512=7927234560 octets.

   _La limite des 8,4 Go_
          En dfinitive, si le BIOS fait tout ce qu'il peut pour russir
          la conversion et utilise 255 ttes et 63 secteurs par piste
          ('assisted LBA' ou simplement 'LBA') il peut atteindre
          102425563512=8422686720 octets, soit lgrement moins que la
          prcdente limite de 8,5 Go, cela parce que les gomtries avec
          256 ttes doivent tre vites. (Cette conversion utilisera
          pour le nombre de ttes la premire valeur H, prise dans la
          suite 16, 32, 64, 128, 255, pour laquelle la capacit totale du
          disque dur tient dans 1024H63512 et calcule alors le nombre
          de cylindres C comme tant gal  la capacit totale divise
          par (H63512).)

   _La limite des 33,8 Go (aot 1999)_
          Le prochain obstacle se prsente avec une taille de 33,8 Go. Le
          problme est qu'avec les 16 ttes et les 63 secteurs/piste par
          dfaut, a donne un nombre de cylindres suprieur  65535, qui
          ne rentre pas dans un short. La plupart des BIOS existants ne
          peuvent pas grer de tels disques. (Jetez un oeil, par exemple
           Asus upgrades pour une nouvelle image  flasher qui
          fonctionne.) Les noyaux Linux plus anciens que le 2.2.14/2.3.21
          ont besoin d'un correctif. Voyez les problmes poss par les
          disques durs IDE de 34 Go et plus ci-dessous.

   _la limite des 137 Go (septembre 2001)_
          Comme ceci a dj t mentionn ci-dessus, le vieux protocole
          ATA utilises 16+4+8=28 bits pour donner le numro de secteur et
          de ce fait, ne peut pas adresser plus de 2^28 secteurs. ATA-6
          dcrit une extension qui permet d'adresser 2^48 secteurs, soit
          un million de fois plus. Les noyaux trs rcents incluent un
          support pour cette extension.

   Pour une autre discussion sur ce sujet, vous pouvez consulter la page
   Breaking the Barriers et pour encore plus de dtails, IDE Hard Drive
   Capacity Barriers.

   Les disques durs de plus de 8,4 Go sont supposs donner leur gomtrie
   comme tant 16383/16/63. Cela signifie en fait que la 'gomtrie' est
   obsolte, et qu'elle ne peut plus servir  calculer la taille totale
   d'un disque dur.

5. Dmarrage

   Quand le systme est mis en route, le BIOS lit le secteur 0 (connu
   sous le nom de MBR : le "Master Boot Record", la donne principale
   d'amorage) du premier disque dur (ou de la disquette, ou du cd-rom)
   et saute au code trouv  cet endroit -- en gnral un chargeur
   d'amorce. Les petits chargeurs trouvs  cet endroit n'ont, par
   principe, pas leur propre gestionnaire de disques durs et utilisent
   plutt les services du BIOS. Cela signifie qu'un noyau Linux ne peut
   tre charg que s'il est entirement situ dans les 1024 premiers
   cylindres du disque,  moins que vous ne possdiez un BIOS et un
   chargeur de d'amorce moderne : un BIOS qui supporte les fonctions
   INT13 tendues et un chargeur de d'amorce qui sache les utiliser.

   Ce problme (s'il existe) est rsolu de manire trs simple :
   assurez-vous que le noyau (et peut-tre d'autres fichiers utiliss
   pendant la phase de dmarrage, comme les fichiers 'map' de LILO) soit
   situ sur une partition qui est comprise toute entire dans les 1024
   premiers cylindres d'un disque dur auquel le BIOS peut accder -- il
   est probable qu'il s'agisse du premier ou du second disque.

   Ainsi, crez une petite partition, disons d'une taille de 10 Mo, de
   telle manire qu'il y ait de la place pour une poigne de noyaux, en
   vous assurant qu'elle soit contenue entirement dans les 1024 premiers
   cylindres du premier ou du second disque dur. Montez-le en tant que
   rpertoire /boot ; ainsi, LILO pourra y mettre ses propres fichiers.

   La plupart des systmes depuis 1998 utilisent un BIOS moderne.

5.1 LILO et les options 'lba32' et 'linear'

   Le principal : si vous utilisez LILO comme chargeur d'amorce,
   assurez-vous d'avoir un LILO avec une numro de version d'au
   moins 21.4 (LILO peut tre trouv  l'adresse suivante :
   ftp://metalab.unc.edu/pub/Linux/system/boot/lilo/).

   Un appel  /sbin/lilo (le programme qui installe la carte d'amorage)
   permet de stocker une liste d'adresses dans cette carte, pour que LILO
   (le chargeur d'amorce) sache  partir d'o lire l'image du noyau. Par
   dfaut ces adresses sont stocke au format (c,h,s) et un appel INT13
   ordinaire est utilis au moment du dmarrage.

   Quand le fichier de configuration prcise lba32 ou linear, des
   adresses linaires sont stockes. Avec l'option lba32 les adresses
   linaires sont galement utilises au moment du dmarrage si le BIOS
   supporte les extensions INT13 tendues. Avec l'option linear, ou avec
   un vieux BIOS, ces adresses linaires sont reconverties sous une forme
   (c,h,s) et au moment du dmarrage des appels INT13 ordinaires sont
   utiliss.

   De ce fait, avec l'option lba32 il n'y a pas de problme de gomtrie
   et il n'y a pas de limite  1024 cylindres. Sans elle, il y a une
   limite  1024 cylindres. Qu'en est-il de la gomtrie ?

   Le programme d'amorage et le BIOS doivent tre d'accord sur la
   gomtrie du disque dur. /sbin/lilo demande la gomtrie au noyau,
   mais il n'y a aucune garantie que la gomtrie du noyau Linux concide
   avec celle qu'utilise le BIOS. Donc, la gomtrie fourni par le noyau
   est souvent inutile. Dans de tels cas on peut faciliter la tche 
   LILO en lui passant l'option linear. L'avantage alors est que, l'ide
   qu' le noyau Linux de la gomtrie, n'est plus utilise. Le revers de
   la mdaille est que lilo ne peut plus vous prvenir si une partie du
   noyau est stocke au-del de la limite des 1024 cylindres et vous
   pouvez vous retrouver avec un systme qui ne dmarre plus.

5.2 Un bug de LILO

   Avec les versions de LILO antrieures  la 2.1 il y a un autre
   dsavantage : la conversion des adresses effectue au dmarrage
   comporte un bug. Quand cH est suprieur ou gal  65536, le calcul
   provoque un dpassement de capacit. Pour H suprieur  64 cela donne
    c une limite encore plus stricte que le bien connu c<1024 ; par
   exemple, avec H=255 et un vieux LILO, on doit avoir c<258 (c=cylindre
   o rside l'image du noyau, H=nombre de ttes du disque).

5.3 1024 cylindres ce n'est pas 1024 cylindres

   Tim Williams a crit : _"J'avais ma partition Linux en dessous des
   1024 premiers cylindres et a ne dmarrait quand mme pas. Au dbut
   quand je l'ai dplace en dessous de 1 Go, les choses fonctionnaient."_
   Comment cela est-il possible ? En fait, c'tait un disque dur SCSI
   avec un contrleur AHA2940UW qui utilise soit H=64, S=32 (c'est  dire
   des cylindres de 1 Mio=1,05 Mo), soit H=255, S=63 (c'est  dire des
   cylindres de 8,2 Mo), en fonction des options du micro-code du disque
   dur et du BIOS. Il ne fait aucun doute que le BIOS se basait sur le
   premier groupe de valeurs, c'est pourquoi la limite des 1024 cylindres
   tait trouve  1 Gio, alors que Linux utilisait la seconde mthode et
   LILO estimait que la limite tait  8,4 Go.

5.4 Plus de limite  1024 cylindre sur une vieille machine IDE

   Le chargeur d'amorce nuni ne fait pas appel aux services du BIOS mais
   accde directement aux units IDE. Donc il est possible de le mettre
   sur une disquette ou sur le MBR et de dmarrer de d'importe o de
   n'importe quel disque IDE (pas seulement les deux premiers). Vous
   pouvez trouver ce chargeur 
   ftp://metalab.unc.edu/pub/Linux/system/boot/loaders/

6. Gomtrie du disque dur, partitions et 'overlap'

   Si vous avez plusieurs systmes d'exploitation sur vos disques durs,
   alors chacun utilise une ou plusieurs partitions. Un dsaccord sur la
   localisation de ces partitions peut avoir des consquences
   catastrophiques.

   Le MBR contient une _table des partitions_ qui dcrit o se situent
   les partitions (primaires). Il y a 4 entres  la table, pour 4
   partitions primaires et chacune ressemble  :

struct partition {
        char active;    /* 0x80 : on peut demarrer avec ;
                           0    : on ne peut pas */
        char begin[3];  /* CHS pour le premier secteur */
        char type;
        char end[3];    /* CHS pour le dernier secteur */
        int start;      /* numero de secteur sur 32 bits (en commencant a 0) */
        int length;     /* nombre de secteurs sur 32 bits */
};

   (avec CHS qui signifie Cylinder/Head/Sector -- Cylindre/Tte/Secteur).

   Cette information est redondante : la position de la partition est
   donne  la fois par les champs begin et end cods sur 24 bits et par
   les champs start et length cods sur 32 bits.

   Linux ne se sert que des champs start et length et ne peut de ce fait
   que prendre en compte des partitions qui ne comportent pas plus de
   2^32 secteurs, c'est--dire, des partitions d'au plus 2 Tio. Cette
   capacit est douze fois plus grande que celle des disques durs que
   l'on peut trouver de nos jours, alors peut-tre que cela sera
   suffisant pour, environ, les cinq prochaines annes. (Donc, les
   partitions peuvent tre trs grandes, mais il y a une srieuse
   restriction avec le systme de fichiers ext2 quand il est utilis sur
   des machines avec des entiers cods sur 32 bits : la taille maximale
   d'un fichier est limite  2 Gio.)

   DOS utilise les champs begin et end et se sert des appels INT13 du
   BIOS pour accder aux disques durs ; il ne peut grer de ce fait que
   des disques dont la taille ne dpasse pas 8,4 Go, mme avec un BIOS
   qui fait des conversions. (La taille des partitions ne peut pas
   excder 2,1 Go  cause des restrictions du systme de fichiers FAT16.)
   La mme chose est valable pour Windows 3.11, WfWG et Windows NT 3.*.

   Windows 95 intgre la gestion des interfaces INT13 tendues et utilise
   des types de partition spciaux (c, e, f  la place de b, 6, 5) pour
   indiquer que l'on doit accder  la partition de cette manire. Quand
   ces types de partition sont utiliss, les champs begin et end
   contiennent des informations factices (1023/255/63). Windows 95 OSR2
   introduit le systme de fichier FAT32 (types de partition b ou c), qui
   permet d'avoir des partitions d'au plus 2 Tio.

   Qu'est-ce que c'est que ce message insens que vous rapporte fdisk au
   sujet de partitions qui se chevauchent : 'overlapping', quand pourtant
   tout est en ordre ? En fait, il y a quelque chose de 'problmatique' :
   si vous voyez les champs begin et end de telles partitions, comme DOS
   le fait, il y a chevauchement (et cela ne peut pas tre corrig, parce
   que ces champs ne peuvent pas stocker des numros de cylindre plus
   grands que 1024 : il y aura toujours 'chevauchement' ds que vous
   aurez plus de 1024 cylindres). Cependant, si vous voyez les champs
   start et length, comme les voit Linux et galement Windows 95 dans le
   cas de partitions types c, e ou f, alors tout apparat comme tant en
   ordre. Donc, ne tenez pas compte de ces avertissements quand cfdisk ne
   se plaint pas et que vous avez un disque dur avec uniquement Linux
   dessus. Soyez prudents quand le disque dur est partag avec DOS.
   Servez-vous des commandes cfdisk -Ps /dev/hdx et cfdisk -Pt /dev/hdx
   pour voir la table des partitions du disque /dev/hdx.

6.1 Le dernier cylindre

   Un nombre important de vieux IBM PS/2 utilisent des disques durs avec
   une carte des _dfaillances_ crite  la fin du disque (le bit 0x20
   dans le mot de controle de la table de paramtrage du disque est
   positionn). De ce fait, FDISK n'utilisera pas le dernier cylindre.
   Pour se prmunir d'ventuel problme le BIOS donne souvent un taille
   infrieure d'un cylindre par rapport celle relle du disque, ce qui
   peut faire en tout, deux cylindres de perdus. Les disques rcents ont
   plusieurs fonctions permettant de donner leur taille qui, en interne,
   s'apellent les unes les autres. Quand les deux retirent 1 pour ce
   cylindre rserv et quand FDISK le fait aussi, alors trois cylindres
   peuvent tre perdus. De nos jours tout ceci n'a plus de sens mais peut
   fournir une explication quand on utilise diffrents utilitaires qui
   donnent des valeurs diffrentes pour la taille du disque dur.

6.2 Limites du cylindre

   La croyance populaire racconte que les partitions doivent commencer et
   finir aux frontires des cylindres.

   Puisque _la gomtrie des disques_ est quelque chose qui n'a pas de
   relle existence, des systmes d'exploitation diffrents inventeront
   des gomtries diffrentes pour le mme disque. On voit souvent un
   systme d'exploitation utiliser une gomtrie aprs conversion de
   */255/63 et un autre utiliser une gomtrie avant conversion de
   */16/63. Du coup, il devrait tre impossible d'aligner les partitions
   sur les limites des cylilndres, si l'on se fie  l'ide que chaque
   systme d'exploitation a de la gomtrie du disque. De plus, le fait
   d'activer ou non le BIOS d'une carte SCSI peut changer la fausse
   gomtrie des disques SCSI connects.

   Par chance, pour Linux les alignements ne sont pas ncessaires (sauf
   pour quelques logiciels d'installation boiteux qui aiment bien tre
   sr que tout est d'aplomb ; ce qui peut empcher d'installer une
   RedHat 7.1 sur un disque aux partitions non alignes, DiskDruid
   n'tant pas content).

   Des personnes rapportent qu'il est facile de crer des partitions non
   alignes sous Windows NT, sans qu'il n'y ait de problme apparent.

   MSDOS 6.22 par contre, ncessite un alignement. Les secteurs sur
   partitions tendues qui ne sont pas sur la frontire d'un cylindre son
   ignores par son FDISK. Le systme lui-mme se satisfait de n'importe
   quel alignement mais interprte les adresses de dbut relatives, comme
   si elles taient relatives  une adresse aligne. L'adresse de dpart
   d'une partition logique est donne relativement, non pas  l'adresses
   de la partition tendue qui la dcrit, mais au dbut du cylindre qui
   contient ce secteur (il n'est donc pas tonnant que, mme
   PartitionMagic, ncessite un alignement).

   Quelle est la dfinition de l'alignement ? FDISK de MSDOS 6.22 se
   comportera comme suit : 1. Si le premier secteur d'un cylindre est un
   secteur de table de partition, alors le reste de la piste sera
   inutilis et la partition commencera  la prochaine piste. Ceci
   s'applique au secteur 0 (le MBR) et aux secteurs de table de partition
   prcdant les partitions logiques. 2. Sinon la partition commence sur
   le premier secteur du cylindre. De plus, les partitions tendues
   commencent sur une frontire de cylindre. La page de manuel de cfdisk
   explique que les vieilles versions de DOS n'alignaient pas les
   partitions.

   L'utilisation de partitions de type 85 pour les partitions tendues
   les rend invisible  DOS, ce qui assure que seul Linux pourra regarder
   ce qui s'y trouve.

   Une petite apart : sur une Sparc, la partition d'amorage doit
   commencer sur une frontire de cylindre (mais rien n'est requis pour
   la fin).

7. Conversion et Gestionnaires de Disques Durs

   La gomtrie des disques durs (avec ttes, cylindres et pistes) est
   une notion qui date de l'ge de MFM et RLL. En ces temps l cela
   correspondait  une ralit physique. Aujourd'hui, avec l'IDE ou le
   SCSI, plus personne n'est intress par les 'vritables' valeurs de la
   gomtrie d'un disque dur. En effet, le nombre de secteurs par piste
   est variable -- il y en a plus pour les pistes proches du bord
   extrieur du disque -- donc il n'y a pas de 'bon' nombre de secteurs
   par piste. Pratiquement  l'oppos : la commande IDE, INITIALIZE DRIVE
   PARAMETERS (91h) est utilise pour renseigner le disque dur sur le
   nombre de ttes et de secteurs par piste qu'il est sens avoir  ce
   moment prcis. Il est assez normal de voir un gros disque dur rcent
   qui n'a que 2 ttes, rapporter qu'il en a 15 ou 16 au BIOS, pendant
   que le BIOS peut  son tour dire au logiciel qui va s'en servir qu'il
   en a 255.

   Pour l'utilisateur, le mieux est de voir le disque dur comme un
   tableau linaire de secteurs numrots 0, 1, ... et de laisser le
   micro-code trouver o, sur le disque dur, est situ tel ou tel
   secteur. Cette numrotation linaire est appele LBA.

   Donc,  prsent, la vision conceptuelle est la suivante : DOS, ou quel
   que soit le programme d'amorage, converse avec le BIOS en se servant
   de la notation (c,h,s). Le BIOS convertit (c,h,s) en notation LBA en
   utilisant la gomtrie factice dont l'utilisateur se sert. Si le
   disque dur accepte le LBA, alors cette valeur est utilise pour les
   ntres/Sorties sur le disque. Autrement, elle est  nouveau convertie
   en (c',h',s') en utilisant la gomtrie dont le disque se sert cette
   fois-l et qui est utilise pour les ntres/Sorties.

   Remarquez qu'il y a une lgre confusion dans l'utilisation de
   l'expression 'LBA' : en tant que terme dcrivant les possibilits d'un
   disque dur, cela signifie 'Linear Block Adressing' -- Adressage de
   blocs de manire linaire -- (par opposition  un adressage CHS). En
   tant que terme de configuration du BIOS, il dcrit la mthode de
   conversion parfois appele 'Assisted LBA' -- voir plus haut : La
   limite des 8,4 Go.

   Un comportement  peu prs identique apparat quand le micro-code ne
   parle pas le LBA, mais que le BIOS connat la conversion. (Dans la
   configuration il est souvent mentionn 'Large'.) Donc, le BIOS va
   prsenter une gomtrie (C,H,S) au systme d'exploitation et va
   utiliser (C',H',S') quand il parlera au contrleur du disque dur.
   Habituellement, S=S', C=C'/N et H = H'N, o N est la plus petite
   puissance de deux qui garantisse C' <= 1024 (ainsi un minimum d'espace
   disque est perdu au moment de l'arrondi dans C'=C/N). Encore une fois,
   cela permet un accs  8,4 Go maximum (7,8 Gio).

   (La troisime option de configuration est 'Normal', pour laquelle
   aucune conversion n'est effectue.)

   Si un BIOS ne connat pas 'Large' ou 'LBA', alors il existe quelque
   part une solution logicielle. Les gestionnaires de disques durs comme
   OnTrack ou EZ-Drive remplacent les routines de gestion de disque du
   BIOS par les leurs. Cela est souvent ralis en faisant rsider le
   code du gestionnaire de disque dans le MBR et les secteurs suivants
   (OnTrack nomme ce code DDO : Dynamic Drive Overlay - recouvrement
   dynamique de disque), comme a, il est charg avant n'importe quel
   autre systme d'exploitation. C'est pourquoi on peut avoir des
   problmes en dmarrant depuis une disquette quand un gestionnaire de
   disque dur a t install.

   Le rsultat est plus ou moins le mme avec un BIOS qui fait des
   conversions - mais particulirement, c'est quand on utilise plusieurs
   systmes d'exploitation sur le mme disque dur que ces gestionnaires
   peuvent poser beaucoup de problmes.

   Depuis sa version 1.3.14, Linux supporte le gestionnaire de disque dur
   OnTrack. EZ-Drive quant  lui est support depuis la version 1.3.29.
   Quelques dtails supplmentaires sont donns dans ce qui suit.

8. Conversions du noyau pour les disques durs IDE

   Si le noyau de Linux dtecte la prsence d'un gestionnaire de disque
   sur un disque dur IDE, il va essayer de recartographier le disque de
   la mme manire que l'aurait fait le gestionnaire de disque, comme a
   Linux voit le mme partitionnement pour, par exemple, DOS avec OnTrack
   ou EZ-Drive. Cependant, AUCUNE recartographie n'est effectue quand
   une gomtrie a t passe en ligne de commande -- donc une option de
   la ligne de commande comme 'hd=_cyls_,_ttes_,_secs_' peut trs bien
   briser la compatibilit avec un gestionnaire de disque.

   Si vous tes touch par ce problme 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 ttes (HC reste constant) jusqu'
   ce que C <= 1024 ou que H=255.

   Ci-dessous les dtails -- les titres des sous-sections sont les
   messages qui apparaissent dans les diffrents messages de dmarrage.
   Ici et partout ailleurs dans ce texte, les types des partitions sont
   donns en hexadcimal.

8.1 EZD

   EZ-Drive est dtect par le fait que le type de la premire partition
   primaire est 55. La gomtrie est recartographie comme dcrit
   ci-dessus et la table des partitions du secteur 0 est supprime -- 
   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 rediriges vers le secteur 1. Ce comportement peut tre
   modifi en recompilant le noyau avec #define FAKE_FDISK_FOR_EZDRIVE 0
   dans ide.c.

8.2 DM6 : DDO

   OnTrack DiskManager (sur le premier disque dur) est dtect grce au
   type 54 de la premire partition primaire. La gomtrie est
   recartographie comme dcrit ci-dessus et la totalit du disque est
   dcale de 63 secteurs (comme a, l'ancien secteur 63 devient le
   numro 0). Ensuite un nouveau MBR (avec une table des partitions) est
   lu depuis le nouveau secteur 0. Bien sr ce dcalage a pour but de
   librer de la place pour le DD0 -- c'est pourquoi il n'y a pas de
   dcalage sur les autres disques durs.

8.3 DM6 : AUX

   OnTrack DiskManager (sur les autres disques durs) est dtect grce au
   type 51 ou 53 de la premire partition primaire. La gomtrie est
   recartographie comme dcrit ci-dessus.

8.4 DM6 : MBR

   Une version plus ancienne de OnTrack DiskManager n'est pas dtecte
   grce au type de partition, mais par signature. (Un test est effectu
   pour savoir si la valeur de dcalage trouve dans les octets 2 et 3 du
   MBR n'est pas suprieure  430 et si le short trouv  cette valeur de
   dcalage est gal  0x55AA et qu'il est suivi par un octet impair.)
   Une fois encore, la gomtrie est recartographie comme dcrit
   ci-dessus.

8.5 PTBL

   Finalement, il y a un test qui tente de dduire une conversion 
   partir des valeurs start et end de la partition primaire : si
   n'importe quelle partition a comme secteurs de dbut et de fin
   respectivement 1 et 63 et comme dernier numro de tte 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 ttes, il est suppos qu'une
   conversion du BIOS est active et la gomtrie est recartographie pour
   utiliser respectivement 32, 64, 128 ou 255 ttes. Cependant, le disque
   n'est pas recartographi quand la vision actuelle de la gomtrie a
   dj 63 secteurs par piste et au moins autant de ttes (cela signifie
   sans doute qu'il a dj t recartographi).

8.6 Comment se dbarasser d'un gestionnaire de disque

   Quand Linux dtecte le gestionnaire de disque Ontrack Disk Manager il
   dcale tous les accs disques de 63 secteurs. De la mme manire, si
   Linux dtecte EZ-Drive, tous les accs au secteur 0 seront dcals au
   secteur 1. Cela signifie qu'il peut s'avrer difficile de se dbarasse
   de ces gestionnaires de disque. La plupart de ces gestionnaires ont
   une option de dsinstallation, mais si vous avez besoin de supprimer
   un gestionnaire de disque, une approche peut tre de donner
   explicitement une gomtrie 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'accs  toutes les donnes
   impossible) avec la commande

        dd if=/dev/zero of=/dev/hdx bs=512 count=1

   Les dtails dpendent du numro de version mineur du noyau. Les noyaux
   rcents (depuis le 2.3.21) reconanissen les paramtres de dmarrage
   tels que hda=remap et hdb=noremap. Il est alors possible de conserver
   ou d'viter le dcalage d  EZD sans se soucier de ce qui est dans la
   table des partitions. Le paramtre de dmarrage hdX=noremap permet
   galement d'viter le dcalage d au gestionnaire
   Ontrack Disk Manager.

9. Consquences

   Qu'est-ce que tout cela signifie ? Pour les utilisateurs de Linux
   seulement une chose : qu'ils doivent s'assurer que LILO et fdisk
   utilisent la bonne gomtrie, o 'bonne' pour fdisk est dfinie comme
   la gomtrie utilise par les autres systmes d'exploitation sur le
   mme disque dur et pour LILO comme la gomtrie qui va permettre des
   changes valides avec le BIOS au moment du dmarrage (en gnral les
   deux vont de pair).

   Comment fdisk connat-il la gomtrie ? Il demande au noyau en
   utilisant l'ioctl HDIO_GETGEO. Mais l'utilisateur peut passer outre
   cela en prcisant la gomtrie de manire interactive, ou sur la ligne
   de commande.

   Comment LILO connat-il la gomtrie ? Il demande au noyau en
   utilisant l'ioctl HDIO_GETGEO. Mais l'utilisateur peut passer outre
   cela en utilisant l'option 'disk=' dans le fichier /etc/lilo.conf
   (voyez la page de manuel lilo.conf(5)). On peut galement passer
   l'option linear  LILO, il va alors stocker des adresses LBA  la
   place des CHS dans son fichier 'map' et retrouvera la gomtrie 
   utiliser au moment du dmarrage (en utilisant la fonction 8 de INT13
   pour connatre la gomtrie du disque dur).

   Comment le noyau sait-il rpondre ? Eh bien, en tout premier lieu,
   l'utilisateur doit avoir spcifi de manire explicite, soit  la main
   soit par l'intermdiaire du chargeur d'amorce, la gomtrie avec la
   commande en ligne du noyau 'hda=_cyls_,_ttes_,_secs_' (voyez la page
   de manuel bootparam(7)). Par exemple, vous pouvez demander  LILO de
   fournir une telle option en ajoutant une ligne
   'append="hda=_cyls_,_ttes_,_secs_"' dans le fichier /etc/lilo.conf
   (voyez la page de manuel de lilo.conf(5)). Sinon, le noyau devra
   deviner, probablement en se servant des valeurs obtenues  partir du
   BIOS ou du matriel lui-mme.

   Il est possible (depuis Linux 2.1.79) de changer l'ide qu'a le noyau
   de la gomtrie en utilisant le systme de fichiers /proc. Par
   exemple :

# sfdisk -g /dev/hdc
/dev/hdc: 4441 cylinders, 255 heads, 63 sectors/track
# cd /proc/ide/ide1/hdc
# echo bios_cyl:17418 bios_head:128 bios_sect:32 > settings
# sfdisk -g /dev/hdc
/dev/hdc: 17418 cylinders, 128 heads, 32 sectors/track
#

   Ceci est particulirement utile si vous avez besoin d'un nombre tel de
   paramtres sur la ligne de commande, que LILO est dpass (ce qui
   n'est pas difficile  accomplir).

   Comment le BIOS connat-il la gomtrie ? L'utilisateur peut l'avoir
   donne dans la configuration du CMOS. Peut-tre aussi que la gomtrie
   est lue depuis le disque et convertie comme prcis dans la
   configuration. Dans le cas de disques SCSI, o il n'y a pas de
   gomtrie, celle que le BIOS doit inventer peut galement tre prcis
   via des cavaliers ou des paramtres de configuration (par exemple, les
   contrleurs Adaptec ont la possibilit de choisir entre les valeur
   habituelles H=64, S=32 et les 'conversions tendues' H=255, S=63).
   Parfois, le BIOS lit la table des partitions pour savoir quelle tait
   la gomtrie du disque au moment du dernier partitionnement. -- ceci
   implique l'hypothse qu'une table des partitions valide est prsente
   quand il y a une signature 55aa. Ceci est plutt positif puisque il
   est alors possible de dplacer les disques de machine en machine. Mais
   le fait que le comportement du BIOS dpende du contenu du disque peut
   galement tre la source d'tranges problmes. Par exemple, il a t
   rapport qu'un disque de 2,5 Go tait reconnu comme ayant une capacit
   de 528 Mo  cause du BIOS qui lisait la table des partitions et
   dduisait qu'il pouvait utiliser des valeurs CHS non converties. Un
   autre effet de ce comportement peut tre lu dans ce rapport : des
   disques non partitionns taient plus lents que des disques
   partitionns, ceci  cause du BIOS qui testait des modes 32 bits en
   lisant le MBR et en voyant qu'il possdait effectivement une signature
   55aa.

   Comment le disque connat-il la gomtrie ? En fait, le fabricant
   invente une gomtrie qui,  un facteur prs, donne la bonne capacit.
   De nombreux disques ont des cavaliers qui permettent de modifier la
   gomtrie qu'ils donnent. Ceci permet d'viter les bugs des BIOS. Par
   exemple, tous les disques IBM permettent  l'utilisateur de choisir
   entre 15 et 16 ttes et de nombreux fabricants ajoutent des cavaliers
   pour permettre de faire croire que le disque est plus petit que 2,1 Go
   ou 33,8 Go. Vous pouvez galement lire la partie sur les cavaliers
   plus bas. Parfois, certains utilitaires permettent de changer le
   micro-code du disque dur.

9.1 Calcul des paramtres de LILO

   Parfois il est utile de forcer une certaine gomtrie en ajoutant
   'hda=_cyls_,_ttes_,_secs_'  la ligne de commande du noyau. On voudra
   pratiquement toujours _secs_=63 et le but recherch en ajoutant cela
   est de spcifier _ttes_. (Des valeurs raisonnables de nos jours sont
   _ttes_=16 et _ttes_=255.) Que devra-t-on mettre pour _cyls_ ?
   Prcisment le nombre qui donnera la bonne capacit totale de C*H*S
   secteurs. Par exemple, pour un disque dur avec 71346240 secteurs
   (36529274880 octets) on calculera C comme tant 71346240/(255*63)=4441
   (par exemple en utilisant le programme bc) et on donnera le paramtre
   de dmarrage hdc=4441,255,63. Comment connat-on la capacit totale
   exacte ? Par exemple,

# hdparm -g /dev/hdc | grep sectors
 geometry     = 4441/255/63, sectors = 71346240, start = 0
# hdparm -i /dev/hdc | grep LBAsects
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=71346240

   donne deux manires de trouver le nombre total de secteurs 71346240.
   Les noyaux rcent donnent galement la taille prcise dans les
   messages de dmararge :

# dmesg | grep hde
hde: Maxtor 93652U8, ATA DISK drive
hde: 71346240 sectors (36529 MB) w/2048KiB Cache, CHS=70780/16/63
 hde: hde1 hde2 hde3 < hde5 > hde4
 hde2: <bsd: hde6 hde7 hde8 hde9 >

   Les noyaux plus anciens donnent simplement les Mo et CHS. En gnral
   la valeur CHS et arrondie  l'entier infrieur, ce qui, pour la sortie
   ci-dessus, nous donnerait au moins 707801663=71346240 secteurs. Dans
   cet exemple, il se trouve que ce sont les valeurs prcises. La valeur
   en Mo peut tre arrondie au lieu d'tre tronque et peut, dans les
   vieux noyaux, tre en units 'binaire' (Mio) plutt que dcimale.
   Remarquez la correspondance entre la taille en Mo donne par le noyau
   et le numro de modle du Maxtor. galement, dans le cas des disques
   SCSI, le nombre prcis de secteurs est donn dans les message de
   dmarrage du noyau :

SCSI device sda: 17755792 512-byte hdwr sectors (9091 MB)

10. Dtails

10.1 Dtails de l'IDE - les sept gomtries

   Le gestionnaire IDE a cinq sources d'information concernant la
   gomtrie. La premire (G_user) est celle donne par l'utilisateur sur
   la ligne de commande. La deuxime (G_bios) est la 'BIOS Fixed Disk
   Parameter Table' -- table des paramtres de disque fixe du BIOS --
   (pour le premier et second disque dur seulement) qui est lue au
   dmarrage du systme, avant le passage au mode 32 bits. Les troisime
   (G_phys) et quatrime (G_log) sont donnes par le contrleur IDE en
   rponse  la commande IDENTIFY -- ce sont les gomtries 'physique' et
   'logique du moment'.

   D'un autre ct, le gestionnaire a besoin de deux valeurs pour la
   gomtrie : d'abord G_fdisk, donne par un ioctl HDIO_GETGEO et
   ensuite G_used, qui est effectivement utilise pour les
   ntres/Sorties. G_fdisk et G_used sont toutes deux initialises avec
   la valeur de G_user si elle est fournie, avec G_bios quand le CMOS dit
   que cette valeur est prsente et avec G_phys autrement. Si G_log
   semble vraisemblable, alors G_used est positionne  cette valeur.
   Sinon, si G_used n'est pas vraisemblable et que G_phys semble l'tre,
   alors G_used prend la valeur de G_phys. Ici, 'vraisemblable' signifie
   que le nombre de ttes est compris dans l'intervalle 1-16.

   En d'autres termes : la ligne de commande prend le pas sur le BIOS et
   va dterminer ce que va voir fdisk, mais si elle donne une gomtrie
   convertie (avec plus de 16 ttes), alors pour les ntres/Sorties
   qu'effectuera le noyau elle sera elle-mme remplace par les valeurs
   que fournira la commande IDENTIFY.

   Remarquez que G_bios est assez peu fiable : pour des systmes qui
   dmarrent depuis un priphrique SCSI, les premier et second disques
   durs peuvent trs bien tre SCSI ; et la gomtrie que le BIOS aura
   donn pour sda sera utilise par le noyau pour hda. Du reste, les
   disques durs qui ne sont pas dclars dans la configuration du BIOS ne
   sont pas vus par ce dernier. Cela signifie que, par exemple, dans un
   systme uniquement IDE o hdb n'est pas dclar dans la configuration,
   les gomtries rapportes par le BIOS pour les premier et second
   disques vont tre appliques  hda et hdc.

  Commande IDENTIFY DRIVE

   Quand on envoie la commande IDENTIF DRIVE (0xec)  un disque dur IDE,
   il retournera 256 mots d'information contenant de nombreux dtails
   techniques. Concentrons nous uniquement sur ce qui joue une rle pour
   la gomtrie. Les mots sont numrots de 0  255.

   Nous trouvons ici trois informations : DefaultCHS (mots 1,3,6),
   CurrentCHS (mots 54-58) et LBAcapacity (mots 60-61).

   Description Exemple
   0 Champ de bits : bit 6 : disque fixe, bit 7 : media amovible 0x0040
   1 Nombre par dfaut de cylindres 16383
   3 Nombre par dfaut de ttes 16
   6 Nombre par dfautl de secteurs par piste 63
   10-19 Numro de srie (en ASCII) K8033FEC
   23-26 Rvision du micro-code (en ASCII) DA620CQ0
   27-46 Nom du modle (en ASCII) Maxtor 54098U8
   49 Champ de bits : bit 9 : supporte le LBA 0x2f00
   53 Champ de bits : bit 0 : les mots 54-58 sont valides 0x0007
   54 Nombre actuel de cylindres 16383
   55 Nombre actuel ttes 16
   56 Nombre actuel de secteurs par piste 63
   57-58 Nombre total actuel de secteurs 16514064
   60-61 Nombre par dfaut de secteurs 80041248
   255 _Checksum_ et signature (0xa5) 0xf9a5

   Les chanes ASCII sont composes de mots contenant chacun deux
   caractres, le premier tant l'octet de poids fort et le second
   l'octet de poids faible. Les valeurs 32-bits sont donnes avec le mot
   de poids faible d'abord. Les mots 54-58 sont positionns  l'aide de
   la commande INITIALIZE DRIVE PARAMETERS (0x91). Ils n'ont un sens que
   quand CHS est utilis, mais peuvent aider  trouver la taille relle
   du disque dans le cas o celui-ci donne les valeurs 4092/16/63 
   DefaultCHS (dans le but d'viter les problmes de BIOS).

   Parfois, quand un cavalier force un disque  donner une fausse valeur
   pour LBAcapacity (le plus souvent une valeur de 66055248 secteurs pour
   pouvoir rester en dessous de la valeur limite de 33,8 Go), il faut
   disposer d'une quatrime information pour trouver la taille relle du
   disque : le rsultat de la commande READ NATIVE MAX ADDRESS (0xf8).

10.2 Dtails pour le SCSI

   La situation pour le SCSI est lgrement diffrente, puisque les
   commandes SCSI utilisent dj les numros de blocks logiques, donc une
   'gomtrie' est compltement hors de propos pour les vritables
   ntres/Sorties. Cependant, le format de la table des partitions est
   toujours le mme, donc fdisk ne fait pas la diffrence entre des
   disques IDE et SCSI. Comme on peut le voir  partir de la description
   dtaille ci-dessus, chaque gestionnaire de disques s'invente une
   gomtrie diffrente. Un gros foutoir en fait.

   Si vous n'utilisez pas DOS ou un quivalent, alors vitez toute
   configuration qui met en jeu des conversions tendues et utilisez
   simplement 64 ttes, 32 secteurs par piste (cela a pour effet de
   donner une valeur tout  fait sympathique et commode de 1 Mio par
   cylindre), si possible, comme a il n'y aura pas de problme quand
   vous dplacerez le disque dur d'un contrleur  un autre. Certains
   gestionnaires de disque SCSI (aha152x, pas16, ppa, qlogicfas,
   qlogicisp) sont si sensibles au sujet de la compatibilit avec le DOS
   qu'ils ne permettront pas  un systme uniquement Linux d'utiliser
   plus de 8 Gio. C'est un bug.

   Quelle est la vraie gomtrie ? La rponse la plus facile est qu'elle
   n'existe pas. Et si elle existait, vous ne voudriez pas la connatre
   et  coup sr JAMAIS, AU GRAND JAMAIS ne devrez en dire quoi que ce
   soit  fdisk ou  LILO ou au noyau. C'est uniquement une histoire
   entre le contrleur SCSI et le disque dur. Laissez-moi le redire :
   seules les personnes stupides donnent  fdisk,  LILO ou au noyau la
   vritable gomtrie d'un disque SCSI.

   Mais si vous tes curieux et que vous insistez, vous devez demander au
   disque dur lui-mme. Il y a l'importante commande READ CAPACITY qui
   donnera la capacit complte du disque dur et il y a la commande MODE
   SENSE, qui, dans la Rigid Disk Drive Geometry Page (page 04) donne le
   nombre de cylindres et de ttes (c'est une donne qui ne peut pas tre
   change) et dans la Format Page (page 03) donne le nombre d'octets par
   secteur et de secteurs par piste. Ce dernier nombre est typiquement
   dpendant du rang et le nombre de secteurs par piste varie -- les
   pistes extrieures ont plus de secteurs que les pistes intrieures. Le
   programme Linux scsiinfo donnera cette information. Il y a de nombreux
   dtails et complications et il est clair que personne (probablement
   mme pas le systme d'exploitation) ne dsire utiliser cette
   information. Du reste, tant que nous ne nous intressons qu' fdisk et
    LILO, on a typiquement des rponses du style C/H/S=4476/27/171
   -- valeurs qui ne peuvent pas tre utilises par fdisk parce que la
   table des partitions ne rserve que 10,8 et 6 bits pour respectivement
   C/H/S.

   Mais alors, d'o le HDIO_GETGEO du noyau tire-t-il ses informations ?
   Eh bien, soit du contrleur SCSI, soit en faisant une supposition
   claire. Certains gestionnaires de disque semblent croire que nous
   voulons connatre la 'ralit', mais bien sr nous ne voulons savoir
   que ce que FDISK de DOS ou de OS/2 (ou AFDISK de Adaptec, etc.)
   utiliseront.

   Remarquez que le fdisk de linux a besoin des nombres H et S de ttes
   et de secteurs par piste pour convertir les nombres de secteurs LBA en
   adresses c/h/s, mais le nombre de cylindres C ne joue aucun rle.
   Quelques gestionnaires de disque utilisent (C,H,S)=(1023,255,63) pour
   signaler que la capacit du disque dur est d'au moins 102325563
   secteurs. Ce n'est pas de chance, puisqu'ils ne rvlent pas la vraie
   taille et limiteront les utilisateurs de la plupart des versions de
   fdisk  n'avoir accs qu' environ 8 Gio de leur disque -- une
   srieuse limitation de nos jours.

   Dans le texte ci-dessous, M reprsente la capacit totale du disque
   dur et C, H, S, le nombres de cylindres, de ttes et de secteurs par
   piste. Il suffit de donner H, S si l'on voit C comme tant dfini par
   M/(HS).

   Par dfaut, H=64 et S=32.

   _aha1740, dtc, g_NCR5380, t128, wd7000 :_
          H=64, S=32.

   _aha152x, pas16, ppa, qlogicfas, qlogicisp :_
          H=64, S=32  moins que C ne soit suprieur  1024, auquel cas
          H=255, S=63, C=min(1023, M/(HS)). (Ainsi C est tronqu et
          HSC n'est pas une approximation de la capacit M du disque
          dur. Cela va drouter la plupart des versions de fdisk.) Le
          code de ppa.c utilise M+1  la place de M et dit qu' cause
          d'un bug dans sd.c, M est plus petit de 1.

   _advansys :_
          H=64 et S=32  moins que C ne soit suprieur  1024 ou que,
          encore mieux, l'option du BIOS '> 1 GB' ait t active, auquel
          cas H=255 et S=63.

   _aha1542 :_
          Demande au contrleur lequel des deux schmas de conversion est
          utilis et se sert soit de H=255, S=63, soit de H=64, S=32.
          Dans le dernier cas, il y a un message au dmarrage qui dit
          "aha1542.c: Using extended bios translation" ("aha1542.c:
          Utilisation du mode de conversion tendu du bios")

   _aic7xxx :_
          H=64 et S=32  moins que C ne soit suprieur  1024 ou que,
          mieux encore, le paramtre de dmarrage "extended" ait t
          pass, ou que le bit 'extended' ait t positionn dans la
          SEEPROM ou dans le BIOS, auquel cas H=255, S=63. Dans
          Linux 2.0.36 ce mode de conversion tendu devrait toujours tre
          automatiquement utilis si il n'y a pas de SEEPROM, mais dans
          Linux 2.2.6, si le mme cas se prsente, le mode de conversion
          tendu est utilis seulement si l'utilisateur le demande au
          travers du paramtre de dmarrage (de ce fait, quand une
          SEEPROM est trouve, le paramtre de dmarrage est ignor).
          Cela signifie qu'une configuration qui fonctionne en 2.0.36
          peut ne pas dmarrer avec un noyau 2.2.6 (LILO ncessite alors
          le mot-cl linear, ou le noyau a besoin du paramtre
          aic7xxx=extended au dmarrage).

   _buslogic :_
          H=64 et S=32  moins que C ne soit suprieur  1024, ou que,
          encore mieux, le mode de conversion tendu ait t autoris au
          niveau du contrleur, auquel cas si M<2^22 alors H=128, S=32 ;
          sinon H=255, S=63. Cependant, aprs avoir fait ce choix pour
          (C,H,S), la table des partitions est lue et si pour l'une des
          trois possibilits (H,S)=(64,32),(128,32),(255,63) la valeur
          endH=H-1 est vue quelque part, alors cette paire est utilise
          et le message "Adopting Geometry from Partition Table"
          ("Adoption de la gomtrie lue dans la table des partitions")
          est affich au dmarrage.

   _fdomain :_
          Il trouve l'information sur la gomtrie dans la Table des
          Paramtres des Disques du BIOS (BIOS Drive Parameter Table), ou
          lit la table des partitions et utilise H=endH+1, S=endS pour la
          premire partition,  condition qu'elle ne soit pas vide, ou
          utilise H=64, S=32 pour M<2^21 (1 Gio), H=128, S=63 pout
          M<632^17 (3.9 Gio) et H=255, S=63 dans les autres cas.

   _in2000 :_
          Il utilise le premier couple
          (H,S)=(64,32),(64,63),(128,63),(255,63) qui rendra C<1024. Dans
          le dernier cas, C est ramen  la valeur 1023.

   _seagate :_
          Il lit C,H,S depuis le disque dur. (Horreur !) Si C ou S sont
          trop grands, alors il fixe S=17, H=2 et double la valeur de H
          tant que C<=1024. Cela signifie que H sera mis  0 si
          M>128102417 (1.1 Gio). C'est un bug.

   _ultrastor et u14_34f :_
          Un de ces trois couples de rfrence est utilis
          ((H,S)=(16,63),(64,32),(64,63)) en fonction du mode de
          cartographie du contrleur.

   Si le gestionnaire ne prcise pas la gomtrie, nous retombons dans un
   mode de supposition guid par la table des partitions, ou par la
   capacit totale du disque dur.

   Regardez la table des partitions. Puisque par convention les
   partitions se terminent  la limite d'un cylindre, nous pouvons, tant
   donn que end=(endC,endH,endS) pour n'importe quelle partition,
   simplement fixer H=endH+1 et S=endS. (Il est rappel que le dcompte
   des secteurs commence  1.) Plus prcisment, voil ce qui est fait :
   s'il existe une partition non vide, prendre la partition avec le plus
   grand begin. Pour cette partition, regarder endH+1, calcul  la fois
   en additionnant start et length et en supposant le fait que cette
   partition se termine  la limite d'un cylindre. Si les deux valeurs
   concordent, ou si endC=1023 et start+length est un multiple entier de
   (endH+1)xendS, alors accepter le fait que cette partition se termine
   effectivement sur la frontire d'un cylindre et fixer H=endH+1 et
   S=endS. Si cela choue, soit parce qu'il n'y a pas de partition, soit
   parce qu'elles ont des tailles bizarres, il faut uniquement se fier 
   la capacit totale M du disque dur. Algorithme : fixer H=M/(621024)
   (arrondi au chiffre suprieur), S=M/(1024H) (arrondi au chiffre
   suprieur), C=M/(HS) (arrondi au chiffre infrieur). Cela a pour
   effet de gnrer un triplet (C,H,S) avec C gal  1024 au plus et S
   gal  62 au plus.

11. Limite de Linux pour l'IDE  8 Gio

   Le gestionnaire IDE de Linux obtient la gomtrie et la capacit d'un
   disque (et beaucoup d'autres choses) en utilisant une requte
   ATA IDENTIFY. Rcemment encore le gestionnaire ne croyait pas en la
   valeur retourne pour lba_capacity si elle tait plus de 10%
   suprieure  la capacit calcule par CHS. Cependant, par suite d'un
   accord entre les industriels, les disques IDE de grande capacit
   donnent les valeurs C=16383, H=16 et S=63, pour un total de
   16514064 secteurs (7.8 Go) indpendamment de leur taille relle, mais
   donnent cette taille relle dans lba_capacity.

   Les noyaux rcents de Linux (2.0.34, 2.1.90) savent cela et agissent
   en consquence. Si vous avez un noyau Linux plus ancien et que vous ne
   voulez pas passer  une version plus rcente et que cedit noyau ne
   voit que 8 Gio d'un bien plus gros disque dur, alors essayez de
   remplacer la routine lba_capacity_is_ok dans
   /usr/src/linux/drivers/block/ide.c par quelque chose du genre

static int lba_capacity_is_ok (struct hd_driveid *id) {
        id->cyls = id->lba_capacity / (id->heads * id->sectors);
        return 1;
}

   Pour une modification plus sre, voyez le noyau 2.1.90.

11.1 Complications du BIOS

   Comme nous venons de le dire, les gros disques durs donnent la
   gomtrie C=16383, H=16, S=63 indpendamment de leur vraie taille,
   alors que cette dernire est visible par la valeur de LBAcapacity.
   Certains BIOS ne savent pas cela et convertissent ce 16383/16/63 en
   quelque chose qui a moins de cylindres et plus de ttes, par exemple
   1024/255/63 ou 1027/255/63. Donc, le noyau ne doit pas seulement
   reconnatre la gomtrie particulire 16383/16/63, mais galement
   toutes ses versions mutiles par le BIOS. Depuis le noyau 2.2.2 cela
   est fait correctement (en prenant la vision du BIOS de H et S et en
   calculant C=capacit/(H*S)). En gnral, ce problme est rsolu en
   mettant le disque en mode Normal dans la configuration du BIOS (ou,
   encore mieux,  None, ne le dclarant pas du tout au BIOS). Si cela
   est impossible parce que vous devez dmarrer  partir de ce disque
   dur, ou l'utiliser avec DOS/Windows et que vous n'envisagez pas un
   passage au noyau 2.2.2 ou mieux, utilisez les paramtres de dmarrage
   du noyau.

   Si un BIOS rapporte 16320/16/63, c'est en gnral pour pouvoir aboutir
    1024/255/63 aprs conversion.

   Il y a ici, un autre problme. Si le disque dur a t partitionn en
   utilisant une conversion de gomtrie, alors le noyau peut, au moment
   du dmarrage, voir cette gomtrie qui est utilise dans la table des
   partitions et rapporter hda: [PTBL] [1027/255/63]. Ce n'est pas bon
   parce que maintenant le disque dur n'est que de 8,4 Go. Cela a t
   corrig dans le noyau 2.3.21. Encore un fois, les paramtres de
   dmarrage du noyau seront utiles.

11.2 Des cavaliers pour slectionner le nombre de ttes

   Beaucoup de disques durs ont des cavaliers qui vous permettent de
   choisir entre des gomtries  15 ou  16 ttes. Le rglage par dfaut
   vous donnera une gomtrie  16 ttes. Parfois, les deux gomtries
   adressent le mme nombre de secteurs, parfois la version  15 ttes
   est plus petite. Vous devez avoir une bonne raison pour changer cette
   valeur : Petri Kaukasoina a crit : _"Un disque dur IBM Deskstar 16 GP
   de 10.1 Go (modle IBM-DTTA-351010) avait ses cavaliers positionns
   pour prsenter 16 ttes par dfaut mais ce vieux PC (avec un AMI BIOS)
   ne dmarrait pas et j'ai eu  modifier les cavaliers pour le faire
   passer en 15 ttes. hdparm -i donne RawCHS=16383/15/63 et
   LBAsects=19807200. J'utilise 20960/15/63 pour avoir la capacit
   totale."_ La gomtrie 16383/15/63 n'est pas encore reconnue par le
   noyau, donc il est ncessaire de donner explicitement ces paramtres
   au dmarrage. La gomtrie 16383/15/63 n'est pas encore reconnue par
   le noyau, donc des paramtres de dmarrage explicites sont ici
   ncessaires. Pour le positionnement des cavaliers voyez
   http://www.storage.ibm.com/techsup/hddtech/hddtech.htm.

11.3 Des cavaliers pour limiter la capacit totale

   De nombreux disques durs ont des cavaliers qui vous permettent de
   faire apparatre leur taille infrieure  leur valeur relle. C'est
   une btise que de le faire et probablement aucun utilisateur de Linux
   ne voudra utiliser cette fonctionnalit, mais certains BIOS plantent
   avec de gros disques. En gnral la solution consiste  conserver le
   disque entirement en dehors du contrle du BIOS. Cela n'est faisable
   que si ce disque dur n'est pas votre disque de dmarrage.

  Limitation  2,1 Go

   La premire limite srieuse fut celle des 4096 cylindres (soit, avec
   16 ttes et 63 secteurs par piste, 2,11 Go). Par exemple un disque dur
   Fujitsu MPB3032ATU de 3,24 Go a une gomtrie par dfaut de
   6704/15/63, mais ses cavaliers peuvent tre positionns pour qu'elle
   apparaisse comme tant 4092/16/63. Le disque rapportera une capacit
   LBA de 4124736 secteurs et de ce fait le systme d'exploitation ne
   pourra pas deviner qu'il est en ralit plus grand. Dans un tel cas
   (avec un BIOS qui plante s'il sait que le disque dur est en ralit si
   grand et donc avec lequel les cavaliers sont ncessaires) on aura
   besoin de paramtres de dmarrage pour donner  Linux la taille du
   disque.

   C'est pas de chance. La plupart des disques durs ont des cavaliers qui
   peuvent tre positionns pour qu'ils apparaissent comme tant des 2 Go
   et pour qu'ils rapportent une gomtrie tronque comme 4092/16/63 ou
   4096/16/63, mais qui leur permettent toujours de rapporter une
   capacit LBA complte. De tels disques durs fonctionneront bien et
   utiliseront l'intgralit de leur capacit sous Linux, que les
   cavaliers aient t positionns ou pas.

  Limitation  33 Go

   Une limite plus rcente est celle des 33,8 Go. Les noyaux Linux plus
   anciens que le 2.2.14/2.3.21 ncessitent l'application d'un correctif
   pour tre capable de s'en sortir avec des disques durs IDE d'une
   taille plus importante que celle-l.

   Avec un vieux BIOS et un disque de plus de 33,8 Go, il se peut que le
   BIOS se bloque et dans ce cas il devient impossible de dmarrer, mme
   lorsque le disque est retir des options dans le CMOS. Vous pouvez
   regarder  cette adresse la limite du BIOS  33,8 Go.

   C'est pourquoi les disques de grande capacit de chez Maxtor ou IBM
   disposent d'un cavalier qui les font apparaitre comme ayant une taille
   de 33,8 Go. Par exemple, l'IBM Deskstar 37,5 Go (DPTA-353750) avec
   73261440 secteurs (ce qui correspond  72680/16/63, ou  4560/255/63)
   a un cavalier qui peut tre positionn de telle manire que le disque
   dur apparat avec une taille de 33,8 Go et donc rapporte une gomtrie
   de 16383/16/63 comme n'importe quel gros disque dur, mais avec une
   capacit LBA de 66055248 (correspondant  65531/16/63, ou 
   4111/255/63). Ceci reste valable pour les disques de grande capacit
   rcents de chez Maxtor.

  Maxtor

   Quand le cavalier est positionn, la gomtrie (16383/16/63) et la
   taille (66055248) sont toutes deux conventionnelles et ne donnent
   aucune information sur la taille relle. De plus, si l'on essaye
   d'accder au secteur 66055248 ou plus, on obtient des erreurs
   d'entre/sortie. Cependant, sur les disques Maxtor, la taille relle
   peut tre trouve et mise  disposition,  l'aide des commandes
   READ NATIVE MAX ADDRESS et SET MAX ADDRESS. Nous pouvons prsumer que
   c'est ce que font MaxBlast et EZ-Drive. Il existe galement pour ceci
   un petit utilitaire Linux ( setmax.c) ainsi qu'un correctif pour le
   noyau.

   Il y a un dtail supplmentaire  prciser en ce qui concerne les
   premiers gros disques de chez Maxtor : le cavalier J46 pour ces
   disques de 34-40 Go fait passer la gomtrie de 16383/16/63 
   4092/16/63 et ne modifie pas la valeur donne de LBAcapacity. Ceci
   signifie que, mme si le cavalier est prsent, les BIOS (les vieux
   Award 4.5*) se bloqueront au dmarrage. Pour ce cas prcis, Maxtor
   fournit l'utilitaire JUMPON.EXE qui met  jour le micro-code pour que
   le cavalier J46 se comporte comme dcrit ci-dessus.

   Sur les disques Maxtor rcents, la la commande setmax -d 0 /dev/hdX
   vous donnera galement accs  la capacit maximale. Cependant, sur
   des disques lgrement plus anciens, un bug du micro-code ne vous
   permet pas d'utiliser -d 0  setmax -d 255 /dev/hdX vous mettra
   pratiquement la capacit maximale. Pour les Maxtor D540X-4K, voir plus
   bas.

  IBM

   Pour IBM les choses sont pires : le cavalier limite effectivement la
   capacit et il n'existe pas de solution logicielle pour retrouver la
   vraie taille. La solution alors, n'est pas d'utiliser la cavalier mais
   de limiter par voie logicielle la capacit du disque avec la commande
   setmax -m 66055248 /dev/hdX. _"Comment ?"_ me direz-vous -- _"Je ne
   peux pas dmarrer !"_ IBM vous donne le truc : _Si un systme avec un
   BIOS Award bloque pendant la dtection des disques, redmarrez votre
   systme et maintenez la touch F4 enfonce pour court-circuiter
   l'autodtection des disques._ Si cela ne fonctionne pas, trouvez un
   autre ordinateur, branchez-y le disque et lancez-y la commande setmax.
   Une fois que ceci est fait, vous pouvez retourner sur votre premire
   machine et l, la situation est identique  ce qui se passe avec un
   Maxtor : vous parvenez  dmarrer et une fois le BIOS pass vous
   pouvez, soit appliquer un correctif au noyau, soit excuter la
   commande setmax -d 0 pour retrouver la capacit maximale.

  Maxtor D540X-4K

   Les disques Maxtor Diamond Max 4K080H4, 4K060H3, 4K040H2 (alias
   D540X-4K) sont identiques aux disques 4D080H4, 4D060H3, 4D040H2 (alias
   D540X-4D), si ce n'est le configuration des cavaliers qui change. Une
   FAQ MAxtor donne les configurations Matre/Esclave/CableSelect pour
   ces disques, mais le cavalier qui limite la capacit des versions "4K"
   semble ne pas tre document. Nils Ohlmeier prtent avoir trouv de
   manire exprimentale que c'est le cavalier J42 (_"reserved for
   factory use"_ -- "rserv  une utilisation en usine"),  ct du
   connecteur d'alimentation (les disques "4D" utilisent le cavalier J46,
   comme les autres disques Maxtor).

   Cependant, il se peut que ce cavalier non document se comporte comme
   le cavalier IBM : la machine dmarre sans problme mais le disque est
   limit  33 Go et setmax -d 0 ne permet pas de retrouver la capacit
   maximale. Et la solution IBM fonctionne : il ne faut pas limiter la
   capacit du disque avec le cavalier, mais d'abord le brancher  une
   machine dont le BIOS est saint, le limiter par voie logicielle avec
   setmax -m 66055248 /dev/hdX et le remettre dans la premire machine.
   Aprs avoir dmarr, la commande setmax -d 0 /dev/hdX permet de
   retrouver la capacit maximale.

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 apparatre comme ne faisant que
   16 Gio. Une fois que le problme a t dtect, 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 connatre le nombre de
   ttes et de secteurs par piste et, si ncessaire, il est possible
   d'obtenir C avec la formule C=taille/(HS).

12.1 Problmes de l'IDE avec des disques durs de 34 Go et plus

   Ci-dessous se trouve une discussion sur les problmes du noyau Linux.
   Les problmes lis au BIOS et au positionnement des cavalier ont-t
   traits ci-dessus.

   Des units d'une taille suprieure  33,8 Go ne fonctionneront pas
   avec les noyaux antrieurs au 2.2.14/2.3.21. Les dtails 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 paramtres hdc=4160,255,63 au dmarrage
   n'aide en rien -- ils sont tout simplement ignors. Que se
   passe-t-il ? La routine idedisk_setup() retrouve la gomtrie
   rapporte par le disque dur (qui est 16383/16/63) et crase ce que
   l'utilisateur avait demand sur la ligne de commande, de telle manire
   que les donnes de l'utilisateur ne sont utilises que pour la
   gomtrie 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 dtruit 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 dbarrasser des tags html). Les noyaux 2.2.14
   supportent ces disques durs. Dans la srie 2.3.* des noyaux, le
   support pour ces disques existe depuis le 2.3.21. Il est galement
   possible de rsoudre ce problme avec une mthode matrielle en
   positionnant des cavaliers pour limiter la taille  33,8 Go. Dans la
   plupart des cas, une mise  jour du BIOS sera ncessaire pour pouvoir
   dmarrer depuis ce disque dur.

13. Partitions tendues et partitions logiques

   Ci-dessus, nous avons vu la structure du MBR (secteur 0) : code du
   programme d'amorage suivi par 4 entres de la table des partitions de
   16 octets chacune, suivies par une signature AA55. Les entres de la
   table des partitions de type 5 ou F ou 85 (en hexadcimal) ont une
   signification particulire : elles dcrivent les partitions
   _tendues_ : espaces qui seront ultrieurement fractionns en partitions
   _logiques_. (Donc, une partition tendue n'est qu'une bote et ne peut
   pas tre utilise par elle-mme ; on utilise alors les partitions
   logiques qu'elle contient.) Ce n'est que la position du premier
   secteur de la partition tendue qui est important. Ce premier secteur
   contient une table des partitions avec quatre entres : une est une
   partition logique, une est une partition tendue et deux sont
   inutilises. De cette manire, on obtient une chane de secteurs de
   table des partitions, disperss sur le disque dur, o le premier
   dcrit trois partitions primaires et la partition tendue et chaque
   secteur de table des partitions qui suit dcrit une partition logique
   et la position du prochain secteur de table des partitions.

   Il est important de comprendre cela : quand les gens font des btises
   en partitionnant leur disque, ils veulent savoir : _"est-ce que mes
   donnes sont toujours l ?"_ Et la rponse est gnralement : _"oui"_.
   Mais si des partitions logiques ont t cres, alors les secteurs de
   table des partitions les dcrivant sont crits au dbut des ces
   partitions logiques et les donnes qui taient initialement  ces
   emplacements sont perdues.

   Le programme sfdisk montre la chane complte. Par exemple,

# sfdisk -l -x /dev/hda

Disk /dev/hda: 16 heads, 63 sectors, 33483 cylinders
Units = cylinders of 516096 bytes, blocks of 1024 bytes, counting from 0

   Device Boot Start     End   #cyls   #blocks   Id  System
/dev/hda1          0+    101     102-    51376+  83  Linux
/dev/hda2        102    2133    2032   1024128   83  Linux
/dev/hda3       2134   33482   31349  15799896    5  Extended
/dev/hda4          0       -       0         0    0  Empty

/dev/hda5       2134+   6197    4064-  2048224+  83  Linux
    -           6198   10261    4064   2048256    5  Extended
    -           2134    2133       0         0    0  Empty
    -           2134    2133       0         0    0  Empty

/dev/hda6       6198+  10261    4064-  2048224+  83  Linux
    -          10262   16357    6096   3072384    5  Extended
    -           6198    6197       0         0    0  Empty
    -           6198    6197       0         0    0  Empty
...
/dev/hda10     30581+  33482    2902-  1462576+  83  Linux
    -          30581   30580       0         0    0  Empty
    -          30581   30580       0         0    0  Empty
    -          30581   30580       0         0    0  Empty

#

   Il est possible de construire une mauvaise table des partitions.
   Beaucoup de noyaux entrent dans une boucle s'il y a des partitions
   tendues qui pointent sur elles-mmes ou sur une partition place
   avant dans la chane. Il est possible d'avoir deux partitions tendues
   dans un de ces secteurs de table des partitions, de sorte que la
   chane de la table de partitions se divise. (Cela peut arriver par
   exemple avec un fdisk qui ne reconnat pas les partitions types 5, F
   ou 85 comme tendues et qui cre une 5  la suite d'une F.) Des
   programmes de type fdisk non standards peuvent provoquer de telles
   situations et quelques manipulations sont ncessaires pour les
   rparer. Le noyau de Linux acceptera une division au niveau le plus
   extrieur. Ainsi, vous pouvez avoir deux chanes de partitions
   logiques. C'est parfois utile -- par exemple, on peut utiliser pour
   l'une le type 5 afin qu'elle soit vue par DOS, et pour l'autre le type
   85, invisible pour DOS, ainsi DOS FDISK ne plantera pas  cause d'une
   partition logique au-del du cylindre 1024. En gnral il faut sfdisk
   pour crer une telle configuration.

14. Rsolution des problmes

   Beaucoup de personnes pensent qu'elles ont des problmes, alors qu'en
   ralit rien ne cloche. Elles peuvent galement penser que leurs
   problmes sont dus  la gomtrie du disque, alors que cela n'a rien 
   voir. Tout ce que nous avons vu ci-dessus peut vous avoir paru
   compliqu, mais matriser le domaine de la gomtrie des disques durs
   est trs facile : ne faites rien du tout et tout ira bien ; ou
   peut-tre faudra-t-il donner  LILO le mot-cl lba32 s'il ne dpasse
   pas le stade LI au dmarrage. Regardez bien les messages de dmarrage
   du noyau et souvenez-vous que plus vous tripoterez les gomtries (en
   spcifiant le nombre de ttes et de cylindres  LILO et  fdisk et en
   les passant comme argument au noyau), moins cela aura de chances de
   fonctionner. En gros, les valeurs par dfaut sont les bonnes.

   Et souvenez-vous : la gomtrie des disques durs n'est utilise nulle
   part dans Linux, donc les problmes que vous pouvez avoir en vous
   servant de Linux ne sont pas dus  a. En fait, la gomtrie des
   disques durs n'est utilise que par LILO et par fdisk. Donc, si LILO
   ne parvient pas  charger le noyau, ce peut tre un problme de
   gomtrie. Si d'autres systmes d'exploitation ne comprennent pas la
   table des partitions, ce peut tre un problme de gomtrie. Rien
   d'autre. En particulier, si mount ne semble pas vouloir fonctionner,
   ne vous posez jamais de question sur la gomtrie -- le problme est
   ailleurs.

14.1 Problme : La gomtrie de mon disque dur IDE est fausse quand je dmarre
depuis du SCSI.

   Il est assez possible qu'un disque dur obtienne une mauvaise
   gomtrie. Le noyau de Linux questionne le BIOS au sujet de hd0 et hd1
   (les disques du BIOS numrots 80H et 81H) et suppose que ces donnes
   sont pour hda et hdb. Mais, sur un systme qui dmarre depuis du SCSI,
   les deux premiers disques peuvent trs bien tre des disques durs SCSI
   et de ce fait il peut arriver que le cinquime disque, qui est hda,
   c'est--dire le premier disque IDE, se voie assigner une gomtrie
   appartenant  sda. Cela est facilement rsolu en donnant, au dmarrage
   ou dans le fichier /etc/lilo.conf, les paramtres pour hda 'hda=C,H,S'
   avec les valeurs appropries pour C, H et S.

14.2 Faux problme : des disques identiques ont des gomtries diffrentes ?

   _"Je possde deux disques durs IBM identiques de 10 Go. Cependant,
   fdisk donne des tailles diffrentes pour les deux. Voyez :_

# fdisk -l /dev/hdb
Disk /dev/hdb: 255 heads, 63 sectors, 1232 cylinders
Units = cylinders of 16065 * 512 bytes

   Device Boot  Start      End   Blocks   Id  System
/dev/hdb1           1     1232  9896008+  83  Linux native
# fdisk -l /dev/hdd
Disk /dev/hdd: 16 heads, 63 sectors, 19650 cylinders
Units = cylinders of 1008 * 512 bytes

   Device Boot  Start      End   Blocks   Id  System
/dev/hdd1           1    19650  9903568+  83  Linux native

   _Comment cela est-il possible ?"_

   Que se passe-t-il ici ? Eh bien, avant tout ces disques sont
   rellement de 10 Giga : hdb a comme taille 255631232512=10133544960
   et hdd a pour taille 166319650512=10141286400, donc tout va bien et
   le noyau voit les deux comme des 10 Go. Pourquoi y a-t-il cette
   diffrence de taille ? C'est parce que le noyau obtient ses donnes du
   BIOS pour les deux premiers disques IDE et le BIOS a recartographi
   hdb pour qu'il ait 255 ttes (et 1619650/255=1232 cylindres).
   L'arrondi infrieur cote ici au moins 8 Mo.

   Si vous voulez recartographier hdd de la mme manire, donnez au noyau
   l'option de dmarrage 'hdd=1232,255,63'.

14.3 Faux problme : fdisk voit beaucoup plus d'espace que df ?

   fdisk vous donnera le nombre de blocs qu'il y a sur le disque dur. Si
   vous avez cr un systme de fichiers sur le disque, disons avec
   mke2fs, alors ce systme de fichiers a besoin d'un peu de place pour
   sa comptabilit -- typiquement quelque chose comme 4% de la taille du
   systme de fichier, un peu plus si vous demandez beaucoup d'inodes 
   mke2fs. Par exemple :

# sfdisk -s /dev/hda9
4095976
# mke2fs -i 1024 /dev/hda9
mke2fs 1.12, 9-Jul-98 for EXT2 FS 0.5b, 95/08/09
...
204798 blocks (5.00%) reserved for the super user
...
# mount /dev/hda9 /quelque/part
# df /quelque/part
Filesystem         1024-blocks  Used Available Capacity Mounted on
/dev/hda9            3574475      13  3369664      0%   /mnt
# df -i /quelque/part
Filesystem           Inodes   IUsed   IFree  %IUsed Mounted on
/dev/hda9            4096000      11 4095989     0%  /mnt
#

   Nous avons une partition de 4095976 blocs, crez sur cette dernire un
   systme de fichiers ext2, montez-la quelque part et remarquez qu'elle
   n'a que 3574475 blocs -- 521501 blocs (12%) ont t perdus en inodes
   et autres pour de la comptabilit. Remarquez que la diffrence entre
   le total de 3574475 blocs et les 3369664 disponibles pour
   l'utilisateur est gale aux 13 blocs utiliss plus les 204798 blocs
   rservs  root. Cette dernire valeur peut tre change  l'aide de
   tune2fs. Ce '-i 1024' n'est raisonnable que dans le cadre d'un spoule
   de forums d'utilisateurs ou quelque chose du mme style, avec
   normment de petits fichiers. Par dfaut on mettrait :

# mke2fs /dev/hda9
# mount /dev/hda9 /quelque/part
# df /quelque/part
Filesystem         1024-blocks  Used Available Capacity Mounted on
/dev/hda9            3958475      13  3753664      0%   /mnt
# df -i /quelque/part
Filesystem           Inodes   IUsed   IFree  %IUsed Mounted on
/dev/hda9            1024000      11 1023989     0%  /mnt
#

    prsent, seulement 137501 blocs (3,3%) sont utiliss pour les
   inodes, comme cela, nous disposons de 384 Mo de plus qu'avant.
   (Apparemment, chaque inode occupe 128 octets.) D'un autre ct, ce
   systme de fichiers peut avoir au plus 1024000 fichiers (plus
   qu'assez), contre 4096000 (trop) auparavant.
