
                              Mini-HOWTO Gros IDE

Ou comment utiliser ces gros hideux sous Linux et DOS

Patrick LoPresti, patl@lcs.mit.edu, version franaise par Herv Mignot

   v1.1, 19 Janvier 1995.
     _________________________________________________________________

   _Les noyaux des versions de Linux ultrieures  la version 1.1.40 de
   Linux grent sans aucune difficult de gros disques IDE (c'est--dire
   comportant plus de 1024 cylindres). Toutefois, de nombreuses
   distributions utilisent des versions de noyau plus anciennes sur leur
   disque d'installation, et ce Mini-HOWTO peut donc vous tre utile _

     Il servira surtout aux personnes utilisant conjointement Linux et
     MS-DOS, sur une mme machine. En effet, si le BIOS de cette machine
     n'est pas un BIOS EIDE, il est ncessaire de procder comme dcrit
     dans ce mini-HOWTO pour permettre une cohabitation tranquille des
     deux systmes d'exploitation. (_N.D.T._)

   .
     _________________________________________________________________

1. Introduction

   Il est possible d'utiliser Linux avec de gros disques durs EIDE sans
   aucune restriction. Seuls les cas de DOS et Linux seront abords dans
   ce document, mais je pense que l'approche prsente ici est utilisable
   avec tout autre systme d'exploitation.

   J'utilise actuellement la version 1.0.9 du noyau, mais tout ce qui est
   dit ici s'applique pareillement jusqu' la version 1.1.34. Les
   versions ultrieures de Linux grent compltement les disques EIDE, ce
   qui rduit l'intrt de tout ce qui suit. Je pense toutefois que cela
   continuera de fonctionner avec les versions de noyau  venir, mme si
   cela devient inutile.

2. Un peu de technique et de terminologie

   Les secteurs des disques ATA (IDE) comportent 512 octets. On peut
   adresser un secteur de deux manires : par son adresse logique (_LBA,
   Logical Block Address_), qui est un numro compris entre 0 et le
   nombre total de secteurs du disque, ou par son adresse physique qui
   est un triplet cylindre-tte-secteur (_CHS, Cylinder-Head-Sector_).
   Pour convertir des adresses logiques en adresses physiques, il est
   ncessaire de connatre la _gomtrie du disque_, c'est--dire le
   nombre de ttes par cylindre, le nombre de secteurs par tte et le
   nombre de cylindres qu'il comporte. Ces informations permettent aussi
   de calculer la taille du disque.

   Les anciens contrleurs et les vieux BIOS ne permettent d'utiliser que
   l'adresse physique pour adresser un secteur. Tous les contrleurs et
   tous les BIOS permettent d'utiliser l'adresse physique pour reprer un
   secteur. Linux manipule le plus souvent possible des adresses
   logiques, sauf au plus bas niveau, o il effectue une conversion de
   ces adresses en adresses physiques pour dialoguer avec le contrleur.
   Linux n'utilise pas le BIOS pour tout cela, sauf pour dterminer la
   gomtrie du disque.

   La table des partitions contient les adresses de dbut et de fin des
   partitions sous forme logique ET physique. _fdisk_ sous DOS et _fdisk_
   sous Linux s'attendent bien sr  ce que les deux formes soient
   cohrentes entre elles pour chaque partition. _fdisk_ sous DOS demande
   au BIOS la gomtrie du disque, et _fdisk_ sous Linux la demande au
   noyau.

   C'est ici que les choses se corsent. MS-DOS et l'interface BIOS
   utilisent un champ de dix bits pour stocker les numros de cylindre,
   ne permettant d'utiliser que des numros compris entre 0 et 1023, ce
   qui est tout  fait insuffisant pour les disques modernes qui
   comportent habituellement 63 secteurs par tte, 16 ttes par cylindre,
   et un trs grand nombre de cylindres (_N.D.T._ plus de 2 000 pour un
   disque de 1 Go). La solution pour pouvoir exploiter ces disques, en
   dpit de cette limitation est une bidouille : un BIOS EIDE ment au
   sujet de la gomtrie du disque en divisant par deux (ou par quatre)
   le nombre de cylindres et en doublant (respectivement, en quadruplant)
   le nombre de ttes. Quand une requte comportant une adresse physique
   lui arrive, le BIOS considrera que cette requte utilise la gomtrie
   bidon et la convertira pour dialoguer avec le contrleur du disque. Ce
   mcanisme est appel une _conversion d'adresse_.

3. Le problme

   Quand le noyau Linux demande au BIOS la gomtrie du disque (il se
   contente en fait de lire les paramtres CMOS), il obtiendra une
   rponse errone indiquant qu'il y a plus de seize ttes. Mais Linux
   sait que cela n'est pas possible, et le noyau (source dans hd.c)
   abandonne et ignore le disque. (Notons que mme si le BIOS retourne
   une gomtrie trafique, les requtes faites au contrleur de disque
   doivent se faire conformment  la gomtrie relle du disque.
   liminer le test effectu dans hd.c ne suffit donc pas.)

3.1 La mauvaise solution

   Une solution est d'utiliser le programme de paramtrage (_setup_) du
   BIOS pour supprimer compltement la conversion d'adresse. On peut soit
   fixer soi-mme le nombre de cylindres/ttes/secteurs conformment  la
   gomtrie du disque, soit simplement inhiber la conversion d'adresse
   selon ce que permet son programme de paramtrage du BIOS.

   Vous pouvez alors repartitionner votre disque dur avec _fdisk_ sous
   DOS et/ou sous Linux, puis installer les deux systmes d'exploitation.
   Cela fonctionnera sous rserve d'observer les restrictions suivantes.

   Le problme reste que le BIOS ne peut tre utilis pour accder aux
   cylindres au-del du 1024-ime. Toutes vos partitions DOS devront donc
   se situer avant cette limite, ainsi que toutes informations auxquelles
   le BIOS aura besoin d'accder. Ainsi, LILO utilise le BIOS pour faire
   le sale boulot et donc, si vous voulez utiliser LILO pour lancer
   Linux, vous devez vous assurer que le noyau (plus prcisment toute la
   partition racine) se situe avant cette limite du 1024-ime secteur.
   Linux, lui, accdera sans problme  l'intgralit du disque.

3.2 La bonne solution

   Les limitations sont toujours gnantes, et nous allons donc nous
   dbrouiller pour les viter. Nous devons donc continuer  utiliser le
   mcanisme de conversion d'adresses et rsoudre chacun des problmes
   que cela engendre.

   Pour rsoudre le problme au niveau du noyau, nous allons passer en
   paramtre la vritable gomtrie au noyau grce  une ligne d'option
   au dmarrage. Ceci peut se faire  partir de l'invite d'initialisation
   de LILO, en tapant <image name>
   hd=<nb. cylindres>,<nb. tte>,<nb. secteurs>. On peut aussi utiliser
   un ordre append= dans le fichier de configuration de LILO
   (_lilo.conf_) pour que cela se fasse automatiquement.

   Le noyau peut maintenant reconnatre et utiliser le disque, mais
   lorsqu'un programme utilisateur (comme _fdisk_ ou le programme
   d'installation de LILO) demande au noyau la gomtrie du disque, le
   noyau lui renvoie la vraie gomtrie et non celle obtenue aprs
   conversion. Et donc _fdisk_ sous Linux (qui interroge le noyau) et
   _fdisk_ sous DOS (qui interroge le BIOS) n'utilisent pas la mme
   gomtrie, ce qui est trs gnant au niveau des informations  placer
   dans la table des partitions du disque dur. De mme, le programme
   d'installation de LILO calculera des adresses physiques incompatibles
   avec ce dont le BIOS (donc LILO lors du dmarrage) a besoin.

   Le problme avec _fdisk_ est simple  rsoudre : lorsque vous lancez
   _fdisk_ sous Linux, passez en mode expert, et fixez le nombre de
   cylindres/ttes/secteurs aux valeurs utilisables par le BIOS. Puis
   ditez votre table des partitions et crivez-la, _fdisk_ sous Linux et
   sous DOS seront ainsi d'accord.

   Le problme de LILO est aussi simple  rsoudre : ajouter l'ordre
   linear  votre fichier _lilo.conf_. LILO utilisera alors des adresses
   logiques et non des adresses physiques, l'obligeant ainsi  calculer
   les adresses physiques au dmarrage et non lors de son installation.
   C'est donc la gomtrie fournie par le BIOS qui sera utilise, plutt
   que celle fournie par le noyau, et ainsi tout fonctionnera.

3.3 Exemple rsum

   Nous disposons d'un disque EIDE d'un giga-octet sur lequel nous allons
   installer Linux. Voici comment procder.

    1. Noter au niveau du programme de paramtrage (_setup_) du BIOS la
       gomtrie trafique du disque. Par exemple, il est indiqu que le
       disque comporte 525 cylindres, 64 ttes, et 63 secteurs. Comme il
       n'est pas possible qu'il y ait plus de seize ttes sur ce disque,
       on en dduit qu'il comporte en fait 2100 cylindres, 16 ttes et 63
       secteurs.
    2. Dmarrer sous DOS, lancer fdisk pour crer une partition DOS.
    3.  partir d'une disquette de dmarrage de la Slackware, taper
       ramdisk hd=2100,16,63 avant le lancement du chargement du noyau.
       Puis lancer fdisk (sous Linux). Si on tape p, un tas de messages
       d'erreur apparat. Passer en mode expert x, fixer le nombre de
       cylindres  525, le nombre de ttes  64. Une fois revenu en mode
       normal, si on tape p pour voir la liste des partitions, il n'y a
       plus d'erreur. Il est alors possible crer ses partitions. crire
       la table, puis redmarrer avec la disquette de la Slackware (il
       est conseill de redmarrer la machine aprs avoir modifi la
       table des partitions).
    4. Procder ensuite  l'installation de la Slackware, normalement, en
       crant (entre autres) un fichier lilo.conf classique.
    5. diter le fichier lilo.conf (dans ce cas /mnt/etc/lilo.conf) pour
       y ajouter les lignes suivantes au dbut :
append="hd=2100,16,63"
linear
    6. Lancer la commande lilo -r /mnt.
    7. Installer, ventuellement, si c'est absolument ncessaire, DOS
       et/ou Windows.

   Bonne chance  tous !

     Patrick LoPresti

     patl@lcs.mit.edu
