
                              Software-RAID HOWTO

Jakob  ;stergaard ( jakob@ostenfeld.dk)

   v. 0.90.7 ; 19th of January 2000
     _________________________________________________________________

   _Ce document dcrit l'utilisation du RAID logiciel 0.90 sous Linux mis
   au point par Ingo Molnar et d'autres dveloppeurs. Il s'agit de la
   couche RAID qui sera standard pour les versions 2.4.x du noyau Linux
   et qui est galement disponible sous forme de patches pour la branche
   2.2. La couche d'adaptation RAID 0.90 est disponible sous forme de
   patches pour les branches 2.0 et 2.2. De nombreuses personnes la
   considrent comme bien plus robuste que la couche RAID courante. those
   kernels._
     _________________________________________________________________

1. Introduction

   Pour une description de la version antrieure de l'interface RAID
   standard dans les noyaux 2.0 et 2.2, reportez vous  l'excellent
   document de Linas Vepstas ( linas@linas.org) disponible via le Linux
   Documentation Project  l'adresse linuxdoc.org.

   http ://ostenfeld.dk/~jakob/Software-RAID.HOWTO/ est la page de
   rfrence pour ce HOWTO o les dernires mises  jour seront
   disponibles. Ce document a t rdig par Jakob Ostergaard  partir de
   nombreux messages lectroniques changs entre l'auteur et Ingo Molnar
   (mingo@chiara.csoma.elte.hu) - un des dveloppeurs du RAID - , la
   liste de diffusion linux-raid (linux-raid@vger.rutgers.edu) ainsi que
   diverses personnes.

   La rdaction de ce HOWTO a t motive par le besoin de documentation
   du nouveau systme RAID alors que le Software-RAID existant ne
   documentait que les versions prcdentes. Des fonctionnalits
   nouvelles ont notamment t introduites.

   Pour utiliser la nouvelle mouture du RAID avec les noyaux 2.0 ou 2.2,
   vous devez rcuprer le patch correspondant, par exemple  l'adresse
   ftp://ftp.[your-country-code].kernel.org/pub/linux/daemons/raid/alpha,
   ou depuis http://people.redhat.com/mingo/. Les noyaux 2.2 officiels ne
   grent directement que l'ancien type de RAID et les patches sont donc
   ncessaires. _L'ancien systme RAID des noyaux 2.0 et 2.2 est bugg_.
   De surcrot, il lui manque d'importantes fonctionnalites prsentes
   dans la nouvelle version.

   La nouvelle mouture du RAID est en cours d'intgration dans les noyaux
   de dveloppement 2.3.x et sera donc disponible dans la branche 2.4.
   Jusqu' la sortie de celle-ci, il sera ncessaire de patcher
   manuellement les noyaux.

   Peut-tre esssayerez vous les versions -ac du noyau proposes par Alan
   Cox pour disposer du RAID. _Certaines_ d'entre elles incluent le
   nouveau systme et vous pargneront donc l'application de patches.

   Le HOWTO contient des informations triviales pour ceux qui matrisent
   dj les principes des systmes RAID. Inutile de vous y attarder.

1.1 Avertissement

   L'avertissement indispensable  :

   Bien que le fonctionnement du systme RAID semble stable chez moi et
   chez de nombreuses personnes, cela pourrait ne pas tre le cas pour
   vous. Si vous perdez vos donnes, votre emploi, votre femme ou que
   vous vous faites craser par un camion, ce ne sera ni de ma faute, ni
   de celle des dveloppeurs. Vous utilisez les fonctionnalits RAID,
   ainsi que toutes les informations contenues dans ce documenti,  vos
   risques et prils. Il n'y a pas la moindre garantie concernant le
   logiciel ou ce document ni la moindre assurance que cela puisse servir
    quoi que ce soit. Sauvegardez toutes vos donnes avant la moindre
   manipulation. Il vaut mieux tre prudent que dsol.

   Ceci tant, je dois reconnaitre que je n'ai pas eu de problmes de
   stabilit avec le RAID logiciel, que je l'employe sur quelques
   machines et que je n'ai entendu personne voquer des plantages
   alatoires ou des instabilits avec le RAID.

1.2 Prrequis

   Le HOWTO suppose que vous utilisez un des derniers noyaux 2.2.x ou
   2.0.x modifi par le patch raid0145 adquat ainsi que la version 0.90
   des raidtools ou que vous vous servez d'un 2.3 postrieur  la >
   2.3.46, voire d'un 2.4. Les patches et les outils se trouvent par
   exemple   : ftp://ftp.fi.kernel.org/pub/linux/daemons/raid/alpha ou
   pour certains  l'adresse  : http://people.redhat.com/mingo/. Les
   patches RAID, le paquetage des raidtools et le noyau doivent
   s'accorder autant que possible. Il sera peut-tre parfois ncessaire
   de se restreindre  des noyaux plus anciens si les patches ne sont pas
   disponibles pour le dernir noyau sorti.

2. Motivation du RAID

   Il existe diffrentes bonnes raisons pour se servir du RAID parmis
   lesquelles figurent la possibilit de fusionner plusieurs disques
   physiques en un priphrique virtuel plus important, l'amlioration
   des performances et la redondance.

2.1 Aspects techniques

   Le RAID Linux est adapt  la majeure partie des priphriques de type
   bloc. Peu importe que vous utilisiez de l'IDE, du SCSI ou un mlange
   des deux. Certains ont galement obtenu quelques succs en s'en
   servant avec des priphriques de type bloc en rseau (Network Block
   Device ou NBD).

   Vrifiez que les bus d'accs aux priphriques sont assez rapides. Il
   n'est pas conseill d'installer 14 disques Ultra Wide sur une mme
   chaine si chacun d'entre eux peut dbiter 10 Mo/s car le bus, lui, ne
   dpassera pas les 40 Mo/s. Vous avez galement intrt  ne pas mettre
   plus d'un disque par interface IDE sans quoi les performances ne vont
   pas tre fameuses. L'IDE n'est pas adapt pour l'accs simultan 
   plusieurs disques sur une mme interface. Toutes les cartes mres
   rcentes incluent deux ports et vous pourrez donc configurer deux
   disques en RAID sans acheter de contrleur supplmentaire.

   La couche RAID est indpendante du systme de fichier. Vous pourrez
   donc y superposer celui de votre choix.

2.2 Vocabulaire

   RAID sera employ pour "RAID logiciel Linux". Le document ne traite
   pas du RAID matriel.

   Dans la description des configurations, on utilise frquemment le
   nombre de disques et leur taille. _N_ dsignera le nombre de disques
   dans une matrice RAID, les disques de secours tant exclus, _S_ sera
   la taille du plus petit disque et _P_ le dbit d'un disque en Mo/s.
   Quand on se servira de P, on supposera que les disques ont tous les
   mmes performances ( vrifier).

   Priphrique et disque seront synonymes. En gnral, les matrices RAID
   sont davantage construites avec des partitions qu'avec des disques
   complets. La combinaison de plusieurs partitions appartenant  un mme
   disque ne prsente gure d'intrt et on entendra donc par
   priphrique et disque "des partitions sur diffrents disques".

2.3 Niveaux RAID

   Voici une brve description des niveaux de RAID grs par Linux.
   Certaines de ces infos sont basiques mais j'ai fait mention d'lments
   spcifiques  la mise en oeuvre au sein de Linux. Sautez cette section
   si vous savez ce qui se cache derrire le RAID. Vous y reviendrez
   quand vous aurez des problmes :o)

   Les patches RAID pour Linux offrent les possibilits suivantes  :
     * _mode linaire_
          + Deux disques et plus sont combins par concatnation.
            L'criture sur le disque RAID se fera donc d'abord sur le
            premier puis sur le second quand il sera plein et ainsi de
            suite. Il n'est pas ncessaire que les disques soient de la
            mme taille et, pour tout dire, la taille n'est ici d'aucune
            importance.
          + Il n'y a aucune redondance  ce niveau. Si un disque tombe en
            panne, vous perdrez surement toutes vos donnes. Vous aurez
            peut tre la chance d'en rcuprer une partie si, du point de
            vue du systme de fichiers, il ne manque qu'un gros bloc
            conscutif de donnes.
          + Les performances en lecture/criture ne vont pas s'amliorer
            automatiquement mais si plusieurs utilisateurs se servent
            simultanment du priphrique, il se peut qu'ils accdent 
            des disques diffrents et que les performances en soient
            augmentes.
     * _RAID-0_
          + Ou "stripe". Semblable au mode linaire  ceci prs que les
            lectures et les critures ont lieu en parallle sur les
            disques. Les disques doivent avoir sensiblement la mme
            taille. Les priphriques se remplissent progressivement de
            la mme faon. Si l'un des deux est plus grand que l'autre,
            l'espace supplmentaire est toujours employ pour la matrice
            RAID mais vous n'utiliserez qu'un des deux disques vers la
            fin. Les performances en patiront.
          + Comme en linaire, il n'y a pas de redondance des donnes
            mais en plus vous ne serez pas capable de rcuprer vos
            donnes si un disque tombe en panne. Au lieu de ce qu'il vous
            manque un gros bloc de donnes, votre systme de fichiers
            comprendra de nombreux petits trous. e2fsck ne sera
            vraisemblablement pas en mesure de reconstituer quoi que ce
            soit.
          + Les performances en lecture/criture augmenteront puisque les
            lectures et les critures auront lieu sur les deux disque en
            mme temps. C'est souvent ce qui motive l'emploi du RAID-0.
            Si les bus sont assez rapides, vous pourrez flirter avec N*P
            Mo/s.
     * _RAID-1_
          + Il s'agit du premier mode redondant. Le RAID-1 s'employe 
            partir de deux disques auxquels viennent ventuellement se
            greffer des disques de secours. Ce mode duplique les
            informations d'un disque sur l(es)'autre(s). Bien sr, les
            disques doivent tre de mme taille. Si un disque est plus
            grand que les autres, la matrice sera de la taille du plus
            petit.
          + Jusqu' N-1 disques ots (ou dfectueux), les donnes restent
            intactes et si le contrleur (SCSI, IDE, etc...) survit, la
            reconstruction sera immdiatement entame sur un des disques
            de secours aprs dtection de l'anomalie.
          + Les performances en criture sont lgrement infrieures 
            celles d'un disque unique vu que les donnes doivent tre
            crites sur chaque disque de la matrice. Les performances en
            lecture sont _en gnral_ bien plus mauvaises en raison de la
            mise en oeuvre au sein du code d'une stratgie d'quilibrage
            simpliste. Cependant, cette partie des sources a t revue
            pour le noyau 2.4.
     * _RAID-4_
          + Ce niveau RAID n'est pas utilis trs souvent. Il s'employe 
            partir de trois disques et plus. Au lieu d'effectuer une
            copie des informations, on conserve la parit sur un disque
            et on crit les donnes sur les autres comme on le ferait
            avec une matrice RAID-0. Un disque tant ddi  la parit,
            la taille de la matrice sera (N-1)*S ou S est la taille du
            plus petit disque. Comme en RAID-1, les disques doivent avoir
            la mme taille sans quoi le S prcdent correspondra  celui
            du plus petit disque.
          + Si un disque lache, l'information de parit permet de
            reconstruire toutes les donnes. Si deux disques lachent,
            toutes les donnes sont perdues.
          + On n'utilise pas beaucoup ce niveau en raison du stockage de
            la parit sur un disque unique. L'information doit tre mise
             jour  _chaque_ fois qu'on crit sur un des disques, ce qui
            constitue un goulot d'tranglement si le disque de parit
            n'est pas nettement plus rapide que les autres. Cependant, si
            vous avez beaucoup de petits disques lents et un disque trs
            rapide, le RAID-4 peut s'avrer trs utile.
     * _RAID-5_
          + Il s'agit surement du mode le plus appropri quand on
            souhaite combiner un grand nombre de disques tout en
            conservant de la redondance. Le RAID-5 s'employe  partir de
            trois disques avec ventuellement des disques de secours. La
            matrice sera de taille (N-1)*S, comme en RAID-4. A la
            diffrence du RAID-4, l'information de parit est rpartie
            quitablement entre les diffrents disques, vitant ainsi le
            goulot d'tranglement du RAID-4.
          + Si un des disques tombe en panne les donnes restent
            intactes. La reconstruction peut commencer immdiatement si
            des disques de secours sont disponibles. Si deux disques
            rendent simultanment l'me, toutes les donnes sont perdues.
            Le RAID-5 ne survit pas  la dfaillance de plus d'un disque.
          + Les performances en lecture/criture s'amliorent mais il est
            difficile de prvoir de combien.

  Disques de secours

   Les disques de secours ne prenent pas part  la matrice RAID jusqu'
   ce qu'un des disques de celle-ci tombe en panne. Quand un disque
   lache, il est marqu dfectueux et la reconstruction est entame sur
   le premier disque de secours disponible.

   Les disques de secours renforcent donc la scurit de systmes RAID-5
   qui peuvent tre difficilement accessibles. Le systme peut
   fonctionner pendant un certain temps aec un disque dfectueux tant que
   le disque de secours assure la redondance.

   Vous ne pouvez tre sr de la survie de votre systme en cas de
   dfaillance d'un disque. La couche RAID peut faire son travail mais
   les gestionnaires SCSI peuvent receller des erreurs, les composants
   IDE peuvent se bloquer et d'autres phnomnes peuvent se produire.

2.4 RAID et swap

   Il n'y a aucune raison d'employer le RAID au dessus du swap pour en
   amliorer les performances. Le noyau se charge lui-mme d'quilibrer
   le swap sur plusieurs priphriques si toutes les partitions ont la
   mme priorit dans la fstab.

   Un fichier fstab correct ressemble  ce qui suit  :
/dev/sda2       swap           swap    defaults,pri=1   0 0
/dev/sdb2       swap           swap    defaults,pri=1   0 0
/dev/sdc2       swap           swap    defaults,pri=1   0 0
/dev/sdd2       swap           swap    defaults,pri=1   0 0
/dev/sde2       swap           swap    defaults,pri=1   0 0
/dev/sdf2       swap           swap    defaults,pri=1   0 0
/dev/sdg2       swap           swap    defaults,pri=1   0 0

   Cette configuration permet  la machine de swaper en parallle avec
   sept priphriques SCSI. Aucun besoin du RAID pour a vu qu'il s'agit
   d'une fonctionnalit prsente dans le noyau de longue date.

   Le RAID s'emploie pour le swap  des fins de haute disponibilit. Si
   vous configurez un systme pour dmarrer sur un priphrique RAID-1,
   le systme doit tre capable de survivre  une dfaillance de disque.
   Seulement si le systme tait en train de swaper sur le priphrique
   dfectueux, vous allez surement avoir des problmes. Swaper sur une
   matrice RAID-1 aide dans ce genre de situations.

   Il y a eu beaucoup de discussions concernant la stabilit du swap sous
   une couche RAID logicielle. Le dbat continue car il dpend fortement
   d'autres aspects du noyau. A la date de rdaction de ce document, il
   semble que swaper via le RAID soit parfaitement stable _ l'exception_
   des phases de reconstruction (i.e. lorsqu'un nouveau disque est insr
   dans une matrice dgrade). La question ne se posera plus lorsque le
   noyau 2.4 sortira mais jusque l,  vous de pousser le systme dans
   ses retranchements afin de savoir si la stabilit vous satisfait ou
   bien si vous ne vous servirez pas du RAID pour le swap.

   Vous pouvez utiliser un fichier de swap sur un systme de fichiers au
   dessus d'une couche RAID, activer le RAID pour le fichier lui mme ou
   dclarer un priphrique RAID en tant que swap. A vous de voir. Comme
   d'habitude, le disque RAID apparaitra comme un priphrique de type
   bloc.

3. Aspects matriels

   Cette section a trait  certaines problmes matriels qui se posent
   lorsqu'on se sert du RAID logiciel.

3.1 Configuration IDE

   Le RAID fonctionne avec des disques IDE. On peut d'ailleur obtenir
   d'excellentes performances. En fait, compte tenu du prix actuel des
   disques et des contrleurs IDE, le choix de ce matriel est  examiner
   lors de la mise en place d'un systme RAID.
     * _Stabilit :_ les caractristiques de tenue des disques IDE ont
       jusqu'ici t moins bonnes que celles des disques SCSI.
       Aujourd'hui encore, la garantie des disques IDE se cantonne
       typiquement  un an tandis qu'elle est de trois  cinq ans pour
       les disques SCSI. Bien qu'il soit exagr d'affirmer que les
       disques IDE ont une qualit intrinsque moindre, il faut
       reconnaitre que _certains_ disques auront tendance  tomber en
       panne plus souvent que leurs quivalents SCSI. Maintenant, la
       mcanique est la mme pour le SCSI et l'IDE. Il faut juste rester
       conscient de ce que tous les disques lachent, un jour ou l'autre.
       Il suffit de s'y prparer.
     * _Intgrit des donnes :_autrefois, il n'y avait aucune garantie
       que les donnes crites sur le disques fussent bien celles qui
       avaient t mises sur le bus (pas de vrification de parit ni de
       code d'erreur, etc...). Les disques durs IDE conformes aux
       spcifications Ultra-DMA effectuent un calcul de vrification sur
       les donnes qu'ils reoivent. Il devient donc fortement improbable
       que des donnes soient corrompues.
     * _Performance :_ je ne vais pas m'tendre sur cet aspect des
       disques IDE. En rsum  :
          + les disques IDE sont rapides (12 Mo/s et plus)
          + le systme IDE consomme plus de ressources CPU (mais qui s'en
            soucie ?)
          + n'utilisez qu'_un_ disque IDE par adaptateur sans quoi les
            performances vont se dgrader.
     * _Rsistance aux pannes :_ le gestionnaire IDE survit gnralement
        la dfaillance d'un disque IDE. La couche RAID tiquetera le
       disque comme dfectueux et si vous employez du RAID-1 et au del,
       la machine devrait continuer  fonctionner normalement jusqu' ce
       que vous l'arrtiez pour les oprations de maintenance.

   Il est _trs_ important que vous n'utilisiez _qu'un_ disque IDE par
   nappe. Outre la question des performances, la dfaillance d'un disque
   provoque gnralement le blocage de l'interface. Avec une
   configuration RAID qui supporte les dfaillances (RAID-1, 4, 5), la
   panne d'un disque est supporte mais l'arrt simultan de deux disques
   bloque la matrice. Un bus, un disque, telle est la rgle.

   Les contrleurs PCI IDE ne manquent pas et vous pourrez vous procurer
   deux  quatre bus supplmentaires autour de 600 FF. Au vu de la
   diffrence de prix entre les disques SCSI et le disques IDE, je dirais
   qu'un systme RAID IDE est des plus attractifs si on est prt  se
   cantonner  un nombre de disques relativement peu important (autour de
   8  moins que l'on ne dispose de suffisamment de connecteurs PCI).

   L'IDE est limit par la longueur des cables lorsqu'il s'agit de mettre
   en oeuvre des matrices importantes. Mme si votre machine comprend
   suffisament de connecteurs PCI il est peu probable que vous puissiez
   loger plus de huit disques sans vous heurter  des problmes de
   corruption des donnes dus  la longueur des cables.

3.2 Ajout et suppression de disque  chaud  :

   Le sujet a effectivement chauff la liste de diffusion linux-kernel il
   y a quelques temps. Bien que la fonctionnalit soit prsente dans une
   certaine mesure, il ne s'agit pas de quelque chose de facile.

  Disques IDE

   _N'essayez pas_ de manipuler  chaud vos disques IDE ! L'IDE n'est pas
   prvu pour. Bien sr, a se passera peut-tre correctement chez vous
   si le gestionnaire IDE est compil en tant que module (vous utilisez
   donc un noyau 2.2 et au del) et que vous le rechargez une fois le
   disque remplac mais vous pouvez tout aussi bien vous retrouver avec
   un controleur IDE grill. Le temps d'arrt du systme en cas de
   problme n'aura alors pas grand chose  voir avec celui d'une
   maintenance programme.

   Outre les aspects purement lectriques qui dtruiront joyeusement
   votre matriel, le problme rside en ce que l'interface IDE doit tre
   rexamine aprs que des disques soient changs. Le gestionnaire IDE
   actuel ne le permet pas. Si le nouveau disque est rigoureusement
   identique  l'ancien, il se _peut_ que cela fonctionne sans nouvel
   examen du bus mais, franchement, vous tes en train de tenter le
   diable.

  Disques SCSI

   Le matriel SCSI n'est pas davantage prvu pour. Ca _peut_ nanmoins
   fonctionner. Si votre contrleur SCSI est capable de rexaminer le
   bus, d'autoriser l'ajout et la suppression de disques, vous y
   arriverez peut-tre. Je ne vous le conseille vraiment pas mais a peut
   fonctionner. Griller un disque neuf pousse parfois  revoir ses faons
   de faire...

   La couche SCSI _devrait_ supporter la dfaillance d'un disque mais
   tous les gestionnaires SCSI n'en sont pas capables. Si le pilote SCSI
   accompagne le disque dfectueux, pouvoir changer ce dernier  chaud
   est inutile.

  SCA

   L'change  chaud doit tre possible mais je ne dispose pas du
   matriel ncessaire pour le vrifier et personne ne m'a fait part
   d'expriences de ce type. Je ne peux donc pas vous en dire plus.

   Si vous voulez essayer, il vous faudra connaitre le fonctionnement
   interne du SCSI et du RAID. Je ne vais pas crire quelque chose que je
   ne peux pas vrifier mais juste vous donner quelques indications  :
     * partez  la recherche de _remove-single-device_ dans le fichier
       _linux/drivers/scsi/scsi.c_
     * jetez un oeil  _raidhotremove_ et  _raidhotadd_

   Tous les gestionnaires SCSI ne permettent pas l'ajout et la
   suppression  chaud. Dans la srie 2.2.x des noyaux, les pilotes
   Adaptec 2940 et Symbios NCR53C8xx en semblent capables. Toute
   information concernant les autres pilotes sera la bienvenue.

4. Configuration du RAID

4.1 Configuration gnrale

   Voici ce que requirent tous les niveaux de RAID  :
     * Un noyau, de prfrence un 2.2.x ou le dernier 2.0.x. Si la
       branche 2.4.x est disponible quand vous lirez ces lignes, servez
       vous en.
     * Les patches RAID. Ils existent gnralement pour les noyaux
       rcents. Les noyaux 2.4.x ne ncessiteront pas de patch.
     * Les utilitaires RAID.
     * De la patience, des pizzas et des amph^H^H^H^H substances  la
       cafine.

   Tous les logiciels se trouvent sur ftp://ftp.fi.kernel.org/pub/linux
   Les outils et les patches RAID sont dans le rpertoire
   daemons/raid/alpha. Le noyau se trouve dans le rpertoire kernel.

   Patchez le noyau, configurez le de faon  inclure la gestion du RAID
   pour les niveaux qui vous intressent. Compilez et installez.

   Dtarrez, configurez, compilez et installez les outils RAID.

   Jusqu'ici, tout va bien. A prsent, si vous redmarrez, vous devriez
   avoir un fichier appel /proc/mdstat. N'oubliez jamais que ce fichier
   est votre alli. Examinez son contenu avec un cat /proc/mdstat. Il
   devrait vous confirmer que vous disposez du niveau (personality) RAID
   voulu et qu'aucun priphrique RAID n'est actif.

   Crez les partitions que vous souhaitez inclure dans votre matrice
   RAID.

   La suite des oprations dpend  prsent du mode RAID.

4.2 Mode linaire

   On dispose  prsent de deux partitions (ou plus) qui ne sont pas
   ncessairement de la mme taille et que l'on va concatner.

   Editez le fichier /etc/raidtab de faon  correspondre  votre
   configuration. Pour deux disques en mode linaire, voici un fichier
   type  :

raiddev /dev/md0
        raid-level      linear
        nr-raid-disks   2
        chunk-size      32
        persistent-superblock 1
        device          /dev/sdb6
        raid-disk       0
        device          /dev/sdc5
        raid-disk       1

   On ne peut disposer de disques de secours. Si un disque tombe en
   panne, toute la matrice s'effondre. Il n'y a rien  stocker sur un
   disque de secours.

   Vous vous demanderez peut-tre pourquoi on prcise un paramtre
   chunk-size quand le mode linaire ne fait que concatner les disques
   en un disque virtuel plus important sans y accder en parallle. Vous
   avez tout  fait raison. Mettez y une valeur quelconque et pensez 
   autre chose.

   On cre la matrice  :
  mkraid /dev/md0

   La commande initialise la matrice, crit les superblocs persistants et
   active le priphrique.

   Jetez un oeil  /proc/mdstat. Vous devriez y voir que la matrice
   fonctionne.

   A prsent crez un systme de fichiers comme sur un priphrique
   quelconque, montez le, incluez le dans votre fstab etc...

4.3 RAID-0

   On dispose de deux disques (ou davantage) de taille sensiblement gale
   dont on veut additionner les capacits de stockage tout en en
   amliorant les performances au moyen d'accs simultans.

   Editez le fichier /etc/raidtab de faon  correspondre  votre
   configuration. Voici un fichier type  :
raiddev /dev/md0
        raid-level      0
        nr-raid-disks   2
        persistent-superblock 1
        chunk-size     4
        device          /dev/sdb6
        raid-disk       0
        device          /dev/sdc5
        raid-disk       1

   Comme en mode linaire, il n'y a pas de disque de secours. Le RAID-0
   n'offre aucune redondance et la dfaillance d'un disque signifie celle
   de la matrice entire.

   On excute  :
  mkraid /dev/md0

   La commande initialise la matrice, crit les superblocs persistants et
   active la matrice.

   /dev/md0 est prt  tre format, mont et  subir les pires outrages.

4.4 RAID-1

   On dispose de deux disques de taille sensiblement gale que l'on
   souhaite mettre en mirroir. On peut avoir des disques supplmentaires
   que l'on gardera en attente comme disques de secours et qui prendront
   automatiquement place dans la matrice si un disque actif tombe en
   panne.

   Voici le fichier /etc/raidtab typique  :
raiddev /dev/md0
        raid-level      1
        nr-raid-disks   2
        nr-spare-disks  0
        chunk-size     4
        persistent-superblock 1
        device          /dev/sdb6
        raid-disk       0
        device          /dev/sdc5
        raid-disk       1

   Pour prendre en compte des disques de secours  :
        device          /dev/sdd5
        spare-disk      0

   N'oubliez pas d'ajuster la variable nr-spare-disks en consquence.

   A prsent, on peut initialiser la matrice RAID. Son contenu doit tre
   construit et les contenus des deux disques (sans importance pour
   l'instant) synchroniss.

   Excutez  :
  mkraid /dev/md0

   L'initialisation de la matrice dmarrera.

   Examinez le fichier /proc/mdstat. On doit y lire que /dev/md0 a t
   dmarr, que le mirroir est en cours de reconstruction et y trouver
   une estimation de la dure de reconstruction.

   La reconstruction a lieu durant les priodes d'inactivit au niveau
   des entres/sorties. L'interactivit du systme ne devrait donc pas en
   souffrir. Les LED des disques palpiteront gaiement.

   Le processus de reconstruction est transparent et on peut utiliser le
   priphrique RAID pendant cette phase.

   Formattez la matrice pendant la reconstruction. On peut galement la
   monter et s'en servir. Bien sr, si le mauvais disque lache  ce
   moment l, il ne s'agissait pas d'un jour de chance.

4.5 RAID-4

   _Remarque :_ je n'ai pas test personnellement cette configuration et
   ce qui suit correspond  ce qui me parat le plus vraisemblable.

   On dispose de trois disques ou plus de taille sensiblement
   quivalente, l'un d'eux est nettement plus rapide que les autres et on
   souhaite les combiner en un priphrique de taille plus leve tout en
   conservant un certain niveau de redondance. En outre, on peut
   introduire des disques de secours.

   Fichier /etc/raidtab typique  :
raiddev /dev/md0
        raid-level      4
        nr-raid-disks   4
        nr-spare-disks  0
        persistent-superblock 1
        chunk-size      32
        device          /dev/sdb1
        raid-disk       0
        device          /dev/sdc1
        raid-disk       1
        device          /dev/sdd1
        raid-disk       2
        device          /dev/sde1
        raid-disk       3

   Les disques de secours sont traits par les lignes suivantes  :
        device         /dev/sdf1
        spare-disk     0

   La matrice s'initialise comme d'habitude  :
   mkraid /dev/md0

   On se reportera aux options particulires de mke2fs avant de formater
   le priphrique.

4.6 RAID-5

   On dispose de trois disques ou plus de taille sensiblement quivalente
   que l'on veut combiner en un priphrique de taille plus leve tout
   en assurant la redondance des donnes. On peut introduire des disques
   de secours.

   Si on employe N disques dont le plus petit est de taille S, la taille
   de la matrice sera (N-1)*S. L'espace manquant sert au stockage des
   donnes de parit (redondance). Si un disque tombe en panne, les
   donnes restent intactes. Si deux disques lachent, toutes les donnes
   sont perdues.

   Fichier de configuration /etc/raidtab typique  :
raiddev /dev/md0
        raid-level      5
        nr-raid-disks   7
        nr-spare-disks  0
        persistent-superblock 1
        parity-algorithm        left-symmetric
        chunk-size      32
        device          /dev/sda3
        raid-disk       0
        device          /dev/sdb1
        raid-disk       1
        device          /dev/sdc1
        raid-disk       2
        device          /dev/sdd1
        raid-disk       3
        device          /dev/sde1
        raid-disk       4
        device          /dev/sdf1
        raid-disk       5
        device          /dev/sdg1
        raid-disk       6

   Les disques de secours sont traits par les lignes suivantes  :
        device         /dev/sdh1
        spare-disk     0

   Et ainsi de suite.

   Une taille de bloc (chunk-size) de 32 ko est un bon choix par dfaut
   pour de nombreux systmes de fichiers. La matrice drive du fichier
   de configuration prcdent est de 7 fois 6 Go soit 36 Go (n'oubliez
   pas que (n-1)*s = (7-1)*6 = 36). Il contient un systme de fichiers
   ext2 avec une taille de blocs de 4 ko. Rien n'empche d'aller au-del
   via les paramtres de bloc de la matrice et du systme de fichiers si
   ce dernier est plus grand ou s'il doit contenir des fichiers de grande
   taille.

   A prsent, on excute  :
  mkraid /dev/md0

   Normalement les disques devraient s'activer furieusement durant la
   construction de la matrice. On examinera le contenu du fichier
   /proc/mdstat pour savoir ce qui se passe.

   Si le priphrique a t cr avec succs, la reconstruction est en
   cours. La matrice ne sera pas cohrente tant que celle-ci n'aura pas
   pris fin. La matrice est cependant parfaitement oprationnelle ( la
   gestion des dfaillances prs) et on peut dj la formater et s'en
   servir.

   On se reportera aux options particulires de mke2fs avant de formatter
   le priphrique.

   Maintenant que le disque RAID fonctionne, on peut l'arrter ou le
   redmarrer via les commandes  :
  raidstop /dev/md0

   et
  raidstart /dev/md0

   Au lieu de mettre ces commandes dans les scripts d'initialisation et
   de rebooter un milliard de fois pour arriver  tout faire fonctionner,
   on lira les paragraphes suivants qui traitent de l'autodtection.

4.7 Les superblocs persistants

   Autrefois (TM), les utilitaires RAID analysaient le fichier de
   configuration et initialisaient la matrice. Il fallait donc que le
   systme de fichiers sur lequel figurait le fichier /etc/raidtab soit
   mont  : plutt pnible pour dmarrer sur un systme de fichiers RAID.

   L'ancienne approche conduisait de surcrot  des complications pour
   monter des systmes de fichiers reposant sur priphriques RAID. Ils
   ne pouvaient tre simplement mis dans le fichier /etc/fstab habituel
   et ncessitaient des interventions chirurgicales dans les scripts de
   dmarrage.

   Les superblocs persistants rsolvent ces problmes. Lorsqu'une matrice
   est initialise avec l'option persistent-superblock dans le fichier
   /etc/raidtab, un superbloc de type particulier est crit au dbut de
   chaque disque prenant part  la matrice. Le noyau est alors capable
   d'obtenir directement la configuration de la matrice depuis les
   disques qui la composent au lieu de devoir analyser un fichier de
   configuration  la disponibilit alatoire.

   On gardera quand mme cohrent le fichier /etc/raidtab puisqu'on peut
   en avoir besoin ultrieurement en cas de reconstruction de la matrice.

   Les superblocs persistants sont obligatoires si on souhaite bnficier
   de l'auto-dtection des priphriques RAID au dmarrage du systme. On
   se reportera  la section _Autodtection_.

4.8 Taille des blocs (chunk size)

   Ce paramtre mrite quelques explications. On ne peut jamais crire de
   faon rigoureusement parallle sur un ensemble de disques. Dans le cas
   de deux disques sur lesquels on devrait crire un octet, on pourrait
   souhaiter que les quatres bits de poids fort aillent toujours sur le
   mme disque, ceux de poids faible allant sur l'autre. Le matriel ne
   le permet pas. On dfinit donc de faon plus ou moins arbitraire une
   taille de bloc lmentaire qui correspondra  la plus petite quantit
   de donnes "atomique" qui sera crite sur les disques. L'criture de
   16 ko avec une taille de bloc de 4 ko provoquera l'envoi du premier et
   du troisime bloc de 4 ko vers le premier disque et celui du deuxime
   et du quatrime bloc vers le second disque pour une matrice RAID-0
   comportant deux disques. Pour de grosses critures, la consommation de
   ressources sera minimise par une taille de blocs importante tandis
   qu'une matrice compose essentiellement de petits fichiers profitera
   davantage d'une taille de blocs rduite.

   Ce paramtre peut tre spcifi pour tous les niveaux de RAID, mme le
   mode linaire o il n'a aucun effet.

   A vous de modifier ce paramtre, ainsi que la taille de blocs du
   systme de fichier, pour obtenir les meilleurs performances possibles.

   L'argument de l'option chunk-size dans le fichier /etc/raidtab prcise
   la taille en ko.

  RAID-0

   Les donnes sont crites successivement sur chaque disque par paquets
   de chunk-size octets.

   Pour une taille de bloc de 4 ko, lors de l'criture de 16 ko de
   donnes sur un systme muni de trois disques, la couche RAID crira
   simultanment 4 ko sur chacun des trois disques puis crira les 4 ko
   restant sur le disque 0.

   32 ko semble un bon point de dpart pour une majorit de matrices mais
   la valeur optimale dpend troitement du nombre de disques impliqus,
   du contenu du systme de fichiers et de divers autres facteurs. A vous
   d'exprimenter pour trouver la meilleure valeur.

  RAID-1

   Pour les critures le paramtre importe peu vu que les donnes doivent
   tre crites sur tous les disques. Cependant, pour les lectures, il
   fixe la quantit de donnes  lire en une fois depuis un disque. Tous
   les disques contenant la mme information, les lectures peuvent tre
   quilibres d'une faon similaire au RAID-0.

  RAID-4

   Lors d'une criture dans une matrice RAID-4, l'information de parit
   doit tre mise  jour sur le disque ddi. La taille de bloc spcifie
   alors la taille des blocs de parit. Si un octet est crit dans une
   matrice RAID-4, chunk-size octets seront lus depuis N-1 disques, la
   parit sera calcule et chunk-size octets seront crits sur le disque
   de parit.

   Le paramte affecte les performances de la mme faon que pour le
   RAID-0 puisque les lectures fonctionnent de la mme faon.

  RAID-5

   Le paramtre a la mme signification que pour le RAID-4.

   128 ko est une valeur raisonnable. A vous de l'ajuster.

   On se reportera galement  la section traitant des options
   particulires de mke2fs qui affectent les performances du RAID-5.

4.9 Options de mke2fs

   L'option -R stride=nn permet  mke2fs d'optimiser l'emplacement des
   structures de contrle spcifiques  ext2 lors du formatage d'un
   disque RAID-4 ou RAID-5.

   Si la taille de bloc RAID est de 32 ko, 32 ko de donnes conscutives
   rsideront sur un mme disque. Si on souhaite construire un systme de
   fichiers ext2 avec une taille de blocs de 4 ko, il y aura 8 blocs de
   donnes conscutifs dans un bloc du tableau. On fournit l'information
    mke2fs de la manire suivante  :
  mke2fs -b 4096 -R stride=8 /dev/md0

   Les performances du RAID-{4,5} dpendent fortement de cette option. Je
   ne suis pas sr de son influence sur les autres niveaux RAID. Si
   quelqu'un a des informations  ce sujet, elles seront les bienvenues.

   La taille de bloc ext2 joue trs fortement sur les performances du
   systme de fichier. Ds que la taille de ce dernier dpasse quelques
   centaines de Mo, une taille de bloc de 4 ko est conseille ( moins
   que le systme de fichiers ne doivent stocker de trs nombreux petits
   fichiers).

4.10 Autodtection

   L'autodtection permet une reconnaissance automatique des
   priphriques par le noyau au dmarrage, jsute aprs l'identification
   des partitions usuelles.

   Requis  :
    1. La gestion de l'autodtection par le noyau.
    2. Les disques RAID doivent avoir t crs avec l'option de
       persistance des superblocs.
    3. Les partitions doivent tre de type _0xFD_ ( positionner avec
       fdisk).

   Remarque  : on vrifiera que la matrice RAID est arrte avant de
   changer le type des partitions (raidstop /dev/md0).

   En suivant les trois tapes prcdentes, l'autodtection devrait tre
   en place. Essayez de redmarrer. Une fois le systme initialis,
   /proc/mdstat doit confirmer que la matrice RAID fonctionne.

   Des messages semblables aux suivants apparaitront au dmarrage  :
 Oct 22 00:51:59 malthe kernel: SCSI device sdg: hdwr sector= 512
  bytes. Sectors= 12657717 [6180 MB] [6.2 GB]
 Oct 22 00:51:59 malthe kernel: Partition check:
 Oct 22 00:51:59 malthe kernel:  sda: sda1 sda2 sda3 sda4
 Oct 22 00:51:59 malthe kernel:  sdb: sdb1 sdb2
 Oct 22 00:51:59 malthe kernel:  sdc: sdc1 sdc2
 Oct 22 00:51:59 malthe kernel:  sdd: sdd1 sdd2
 Oct 22 00:51:59 malthe kernel:  sde: sde1 sde2
 Oct 22 00:51:59 malthe kernel:  sdf: sdf1 sdf2
 Oct 22 00:51:59 malthe kernel:  sdg: sdg1 sdg2
 Oct 22 00:51:59 malthe kernel: autodetecting RAID arrays
 Oct 22 00:51:59 malthe kernel: (read) sdb1's sb offset: 6199872
 Oct 22 00:51:59 malthe kernel: bind<sdb1,1>
 Oct 22 00:51:59 malthe kernel: (read) sdc1's sb offset: 6199872
 Oct 22 00:51:59 malthe kernel: bind<sdc1,2>
 Oct 22 00:51:59 malthe kernel: (read) sdd1's sb offset: 6199872
 Oct 22 00:51:59 malthe kernel: bind<sdd1,3>
 Oct 22 00:51:59 malthe kernel: (read) sde1's sb offset: 6199872
 Oct 22 00:51:59 malthe kernel: bind<sde1,4>
 Oct 22 00:51:59 malthe kernel: (read) sdf1's sb offset: 6205376
 Oct 22 00:51:59 malthe kernel: bind<sdf1,5>
 Oct 22 00:51:59 malthe kernel: (read) sdg1's sb offset: 6205376
 Oct 22 00:51:59 malthe kernel: bind<sdg1,6>
 Oct 22 00:51:59 malthe kernel: autorunning md0
 Oct 22 00:51:59 malthe kernel: running: <sdg1><sdf1><sde1><sdd1><sdc1><sdb1>
 Oct 22 00:51:59 malthe kernel: now!
 Oct 22 00:51:59 malthe kernel: md: md0: raid array is not clean --
  starting background reconstruction

   Il s'agit des messages  l'autodtection des partitions d'une matrice
   RAID-5 qui n'a pas t arrte correctement (la machine a plant). La
   reconstruction a lieu spontanment. Le montage de l'unit est
   parfaitement licite puisque la reconstruction est transparente et que
   toutes les donnes sont cohrentes (seule l'information de parit qui
   ne sert qu'en cas de dfaillance d'un disque est incohrente).

   Les priphriques reconnus automatiquement sont stopps de mme quand
   le systme s'arrte. Oubliez les scripts d'initialisation et servez
   vous des disques /dev/md comme s'il s'agissait de /dev/sd ou /dev/hd.

   C'est aussi simple que a.

   Les lignes comportant les commandes raidstart et raidstop dans les
   scripts d'initialisation ne servent que pour les matrices RAID qui
   reposent sur l'ancienne mouture du code. Elles peuvent tre supprimes
   sans hsitation dans le cadre de matrices RAID qui ont recours 
   l'autodtection.

4.11 Dmarrage sur un disque RAID

   Il existe plusieurs faons de mettre en place un systme qui monte
   directement sa partition racine depuis un priphrique RAID. Pour
   l'instant, seuls les outils d'installation graphiques de la RedHat 6.1
   permettent l'installation directe sur une matrice RAID. Il vous faudra
   donc surement effectuer quelques manipulations  la main mais il n'y a
   l rien d'impossible.

   La dernire version officielle de lilo (21) ne gre pas les disques
   RAID et le noyau ne peut donc pas tre charg au dmarrage depuis ce
   genre de priphriques. Il faudra donc que le rpertoire /boot rside
   sur un systme de fichier hors RAID. Afin d'tre sr que le systme
   dmarre quel que soit son tat, dupliquez une partition /boot
   similaire sur chaque disque. Le BIOS sera ainsi toujours capable de
   charger les donnes depuis, par exemple le premier disque disponible.
   Il faudra donc que le systme ne dmarre pas avec un disque
   dfectueux.

   Avec la RedHat 6.1 est fourni un patch pour lilo 21 qui permet
   d'accder  /boot sur du RAID-1. On notera que le patch n'est pas
   adapt aux autres niveaux RAID. Le patch est disponible dans tous les
   mirroirs RedHat via dist/redhat-6.1/SRPMS/SRPMS/lilo-0.21-10.src.rpm.
   La version modifie de lilo acceptera un argument du type
   boot=/dev/md0 dans le fichier /etc/lilo.conf et rendra chaque disque
   du mirroir utilisable au dnarrage.

   On peut galement avoir recours  une disquette de dmarrage.

4.12 Installer le systme de fichiers racine sur une couche RAID

   Deux mthodes sont fournies ci-dessous. A ma connaissance, aucune
   distribution ne permet l'installation sur un disque RAID et la mthode
   que je suggre suppose que vous installez d'abord le systme sur une
   partition normale avant de mouvoir les fichiers sur la matrice RAID
   une fois l'installation complte.

  Premire mthode  :

   On dispose d'un disque supplmentaire o on peut installer le systme.

     * Installez un systme normal sur le disque supplmentaire.
     * Mettez en place un noyau incluant les patches ncessaires pour le
       RAID et vrifiez que le systme s'initialise correctement avec ce
       noyau. Il faudra veiller  ce que le support RAID soit _dans_ le
       noyau et non sous forme de modules.
     * A prsent, configurez et crez la matrice RAID dont vous comptez
       vous servir en tant que racine. Il s'agit de la procdure standard
       telle que dcrite prcdemment dans le document.
     * Redmarrez le systme afin de vrifier que la matrice est dtecte
       correctement (elle devrait en tout cas).
     * Crez un systme de fichier sur la nouvelle matrice avec mke2fs et
       montez la en /mnt/newroot (par exemple).
     * Copiez le contenu de la racine courante sur le disque RAID. Il
       existe diffrentes faons de faire, par exemple  :
 cd /
 find . -xdev | cpio -pm /mnt/newroot
     * modifiez le fichier /mnt/newroot/etc/fstab de faon  ce qu'il
       pointe vers le priphrique /dev/md? adquat pour la racine.
     * Dmontez le rpertoire /boot courant et montez le  la place en
       /mnt/newroot/boot.
     * Mettez  jour /mnt/newroot/etc/lilo.conf de faon  pointer vers
       le bon priphrique. Le priphrique de boot doit rester un disque
       normal (non-RAID) mais le disque racine doit pointer vers la
       matrice RAID. Ceci fait, excutez un
lilo -r /mnt/newroot
       . Lilo ne devrait pas mettre d'erreurs.
     * Redmarrez le systme et admirez avec quel facilit tout se passe
       comme on le souhaite :o)

   Dans le cas de disques IDE, on spcifiera dans le BIOS les disques
   comme tant de type ``auto-detect'' pour que la machine puisse
   redmarrer mme si un disque manque.

  Seconde mthode  :

   Cette mthode ncessite l'emploi d'outils RAID et du patch qui
   autorisent la directive failed-disk. Il faut donc disposer d'un noyau
   2.2.10 ou au del.

   Il _faut_ que la matrice soit au moins de type 1. L'ide consiste 
   installer le systme sur un disque marqu dfectueux du point de vue
   RAID puis  copier le systme sur la partie restante de la matrice
   RAID qui sera considre comme dgrade avant de rinsrer le disque
   d'installation et de dclencher sa resynchronisation.

     * Installez un systme normal sur un des deux disques (qui fera plus
       tard partie de la matrice). Il est important que ce disque ne soit
       pas le plus petit sans quoi il ne sera pas possible de l'ajouter 
       la matrice !
     * Rcuprez le noyau, le patch, les outils, etc... Redmarrez le
       systme avec le noyau qui est muni de la gestion RAID.
     * Crez votre matrice en indiquant le disque qui occupe la racine
       actuelle comme failed-disk dans le fichier raidtab Ne mettez pas
       ce disque en premire position dans le fichier ou vous aurez du
       mal  dmarrer la matrice. Activez la matrice et mettez y un
       systme de fichiers.
     * Redmarrez et vrifiez que la matrice RAID est correctement
       active.
     * Copiez les fichiers de la racine et modifiez les fichiers systme
       du disque RAID de faon  ce qu'il se rfrence bien en tant que
       racine.
     * Lorsque le systme dmarre correctement depuis le disque RAID,
       modifiez le fichier raidtab en emplaant la directive failed-disk
       par une directive raid-disk. Ajoutez  prsent ce disque  la
       matrice avec raidhotadd
     * Le systme doit  prsent dmarrer depuis une matrice
       non-dgrade.

4.13 Dmarrer le systme depuis le RAID

   Pour que le noyau soit capable de monter le systme de fichiers
   racine, les pilotes des priphriques ncessaires doivent tre
   prsents dans le noyau (NdT : ou chargs via un initrd qui peut
   galement contenir les modules RAID).

   La faon normale de procder consiste  compiler un noyau qui inclut
   en dur toutes les options RAID ncessaires (NdT : je proteste !).

   La redHat-6.0 tant fournie avec un noyau modulaire qui gre la
   nouvelle mouture du RAID, je vais cependant en dcrire l'emploi si on
   souhaite s'en servir pour dmarrer son systme depuis un volume RAID.

  Dmarrage avec le RAID modularis

   Il faut prciser  lilo qu'il doit galement charger un quivalent de
   ramdisk en sus du noyau au dmarrage. La commande mkinitrd permet de
   crer un ramdisk (ici un initrd) contenant les modules ncessaires au
   montage de la racine. Commande type  :
 mkinitrd --with=<module> <ramdisk name> <kernel>

   Par exemple  :
 mkinitrd --with=raid5 raid-ramdisk 2.2.5-22

   Ceci garantit que le module RAID adquat sera disponible au dmarrage
   lorsque le noyau devra monter la racine.

4.14 Mises en garde

   Ne repartitionnez _JAMAIS_ un disque qui appartient  une matrice
   RAID. Si vous devez modifier la table des partitions d'un disque au
   sein d'une matrice, arrtez d'abord la matrice et repartitionnez
   ensuite.

   On a vite fait de saturer un bus. Un bus Fast-Wide SCSI courant
   n'offre que 10 Mo/s, ce qui est largement en dessous des performances
   des disques actuels. Mettre six disques sur un canal de ce type
   n'apportera bien entendu pas le gain en performances souhait.

   L'ajout de contrleurs SCSI n'est susceptible d'amliorer les
   performances que si les bus dj prsents sont proches de la
   saturation. Vous ne tirerez rien de plus de deux contrleurs 2940 si
   vous n'avez que deux vieux disques SCSI qui ne satureraient mme pas
   un seul contrleur.

   Si vous omettez l'option de persistance des superblocs votre matrice
   ne redmarrera pas spontanment aprs un arrt. Reprenez la cration
   de la matrice avec l'option correctement positionne.

   Si la resynchronisation d'une matrice RAID-5 choue aprs qu'un disque
   ait t ot puis reinsr, l'ordre des disques dans le fichier raidtab
   est peut-tre le responsable. Essayez de dplacer la premire paire
   ``device ...'' et ``raid-disk ...'' en dbut de description de la
   matrice.

   La plupart des retours d'erreur observs sur la liste de diffusion
   linux-kernel proviennent de gens qui ont procd  des mlanges
   douteux entre les patches et les outils RAID. Si vous utilisez le RAID
   0.90, vrifiez que vous vous servez bien de la bonne version des
   utilitaires.

5. Test de la couche RAID

   Si vous utilisez le RAID pour amliorer la tolrance aux pannes, vous
   voudrez surement tester votre installation afin de vrifier son
   fonctionnement. Comment simule-t-on donc une dfaillance ?

   En rsum, on ne peut pas  moins de titiller un disque au
   lance-flammes pour "simuler" une dfaillance. On ne peut pas prvoir
   ce qui va se passer en cas de perte d'un disque. Il pourrait trs bien
   verouiller lectriquement le bus et rendre tous les disques sur le bus
   inaccessibles. Je n'ai nanmoins jamais entendu d'histoire de ce
   genre. Le disque signalera peut-tre une erreur de lecture/criture 
   la couche IDE ou SCSI qui permettra  son tour  la couche RAID de
   grer la situation avec lgance. Heureusement, les choses se passent
   assez souvent ainsi.

5.1 Dfaillance d'un disque

   Dbranchez le disque. Ceci n'est  faire qu'avec le systme
   _hors-tension _. Inutile de jouer les aventuriers de
   l'ajout/suppression  chaud pour vrifier que les donnes supportent
   bien la disparition d'un disque. Arrtez le systme, dbranchez le
   disque et redmarrez le de nouveau.

   Syslog et /proc/mdstat permettent de vrifier l'tat de la matrice.

   N'oubliez pas que vous _devez_ employer du RAID-{1,4,5} pour que la
   matrice soit capable de supporter la dfaillance d'un disque. Les
   modes linaire et RAID-0 chouent compltement dans ce genre de
   situation.

   Une fois le disque rebranch (avec le courant arrt, merci), on
   ajoutera le ``nouveau'' disque au systme RAID avec la commande
   raidhotadd.

5.2 Corruption de donnes

   Le RAID, qu'il soit matriel ou logiciel, suppose que si une criture
   ne renvoie pas une erreur, alors elle s'est droule normalement.
   Donc, si un diseue corrompt les donnes sans retourner d'erreur, les
   donnes _seront_ corrompues. Bien que ce soit fortement improbable, on
   ne peut l'exclure et cela aura pour consquence la corruption du
   systme de fichiers.

   Le RAID ne peut rien faire face  ce genre de dfaillances et il n'a
   pas t prvu pour de toutes faons. Il est donc inutile de dclencher
   sciemment des corruptions de donnes (avec dd par exemple) pour
   vrifier le comportement de la couche RAID. A moins de modifier le
   superbloc RAID, il est vraisemblable que la couche RAID ne remarque
   rien mais que le systme de fichiers soit dtruit.

   Il s'agit du fonctionnement normal du systme. Le RAID ne garantit pas
   l'intgrit des donnes. Il permet juste de les conserver si un disque
   tombe en panne (pourvu qu'on utilise un niveau de RAID suprieur ou
   gal  1).

6. Reconstruction

   Si vous avez lu le reste du document, vous devez dj avoir une bonne
   ide de la procdure  suivre pour la reconstruction d'une matrice
   dgrade. Pour rsumer  :
     * Arrtez le systme.
     * Remplacez le disque dfectueux.
     * Redmarrez le systme.
     * Utilisez raidhotadd /dev/mdX /dev/sdX pour rinsrer le disque
       dans la matrice.
     * Allez prendre un caf pendant que la reconstruction s'effectue.

   C'est tout.

   Enfin, c'est gnralement tout. Sauf si vous jouez de malchance et que
   le systme RAID est devenu inutilisable  cause de la dfaillance de
   plus de disques qu'il n'y en a de redondant. Ca risque de se produire
   si plusieurs disques rsident sur un mme bus qui est bloqu par le
   disque en panne. Bien qu'en tat, les autres disques sur le bus vont
   tre inaccessibles  la couche RAID et marqus comme dfectueux. Pour
   une matrice RAID5 o on peut utiliser un disque en secours, la perte
   de deux disques ou davantage risque de s'avrer fatale.

   La section suivante est tire d'une explication que m'a donne Martin
   Bene et prsente une mthode possible de rcupration dans le cas d'un
   scnario catastrophe tel que celui dcrit. Elle implique l'emploi de
   la directive failed-disk dans le fichier /etc/raidtab. Elle ne pourra
   donc fonctionner qu'avec un noyau 2.2.10 et au del.

6.1 Rattrapage d'une dfaillance de plusieurs disques

   Scnario  :
     * un contrleur rend l'me et bloque simultanment l'accs  deux
       disques ;
     * tous les disques d'un mme bus SCSI sont bloqus  cause d'un mme
       disque dfectueux ;
     * un cable s'envole pour le grand centre de traitement automatis.

   En bref  : le plus souvent, une panne _temporaire_ se produit sur
   plusieurs disques. Les superblocs RAID sont dsynchroniss et la
   matrice RAID refuse de s'initialiser.

   Une seule chose  faire  : recrire les superblocs RAID via mkraid
   --force.

   Pour que a marche, le fichier /etc/raidtab ; doit tre  jour. S'il
   ne correspond pas _exactement_  l'organisation des disques et  leur
   ordre, a ne marchera pas.

   Examinez la sortie de syslog produite lors de la tentative de
   dmarrage de la matrice, vous y releverez le compteur d'venements
   pour chaque superbloc. En gnral, il vaut mieux laisser de ct le
   disque avec le compteur le plus faible, c'est  dire le plus ancien.

   Si vous excutez mkraid sans la directive failed-disk, le thread de
   rcupration va se mettre  fonctionner immdiatement et commencer 
   reconstruire les blocs de parit - ce qui est surement un peu
   prmatur.

   Avec failed-disk, vous prciserez quels disques vous souhaitez voir
   actifs et essaierez peut-tre diffrentes combinaisons pour obtenir
   les meilleurs rsultats. Pendant la reconstruction, ne montez le
   systme de fichier qu'en lecture seule. J'ai t en contact avec deux
   personnes qui s'en sont sorties ainsi.

7. Performances

   Cette partie offre quelques valuations de performances issues de
   tests de systmes employant le RAID.

   Les tests ont t conduits avec bonnie et  chaque fois sur des
   fichiers de taille gale  deux fois ou plus celle de la mmoire
   physique de la machine.

   Ces tests ne mesurent _que_ la bande passante en lecture/criture pour
   un seul fichier de grande taille. On ne sait donc rien des
   performances qu'on observerait avec un serveur web, un serveur de
   news, etc... Peu d'applications du monde rel font la mme chose que
   bonnie et bien que ce genre de nombres soit agrable  regarder, il ne
   s'agit pas d'indicateurs de performances pour de vritables
   applications. On en est loin.

   Concernant ma machine  :
     * Bi-Pentium Pro 150 MHz
     * 256 Mo RAM (60 MHz EDO)
     * trois IBM UltraStar 9ES 4.5 GB, SCSI U2W
     * Adaptec 2940U2W
     * un IBM UltraStar 9ES 4.5 GB, SCSI UW
     * Adaptec 2940 UW
     * un noyau 2.2.7 avec les patches RAID

   Les trois disques U2W sont connects au contrleur U2W et le disque UW
   au contrleur UW.

   Avec ou sans RAID, il ne semble pas possible de tirer plus de 30 Mo/s
   du bus SCSI sur cette machine. Je souponne que cela vienne de la
   vtust de ce dernier et de la limitation de la bande passante de la
   mmoire (Nd : pardon ?).

7.1 RAID-0

   _Lecture_ correspond  _Sequential block input_, et _Ecriture_ 
   _Sequential block output_. La taille du fichier tait de 1 Go pour tous
   les tests. Les test ont eu lieu en mono-utilisateur. Le gestionnaire
   SCSI tait configur de faon  ne pas utiliser la queue de commands
   SCSI.

              Chunk size Block size Lecture ko/s Ecriture ko/s
              4k         1k         19712        18035
              4k         4k         34048        27061
              8k         1k         19301        18091
              8k         4k         33920        27118
              16k        1k         19330        18179
              16k        2k         28161        23682
              16k        4k         33990        27229
              32k        1k         19251        18194
              32k        4k         34071        26976

   A la lecture de ce tableau il semble que le paramtre chunk-size du
   RAID n'ait pas un impact important. Nanmoins, la taille de bloc pour
   ext2 a intrt  tre aussi leve que possible, soit 4 ko (i.e. la
   taille d'une page) avec une architecture IA32.

7.2 RAID-0 avec queue de commandes SCSI (TCQ)

   La queue de commandes est cette fois-ci active avec une profondeur
   gale  8. Le reste est inchang.

              Chunk size Block size Lecture ko/s Ecriture ko/s
              32k        4k         33617        27215

   Aucun autre test n'a t men. L'emploi de la queue de commandes
   amliore les performances en criture mais la diffrence n'est pas
   norme.

7.3 RAID-5

   On reprend les mmes tests.

              Chunk size Block size Lecture ko/s Ecriture ko/s
              8k         1k         11090        6874
              8k         4k         13474        12229
              32k        1k         11442        8291
              32k        2k         16089        10926
              32k        4k         18724        12627

   Les deux paramtres semblent jouer.

7.4 RAID-10

   On dsigne sous ce terme la mise en mirroir de disques concatns ou
   un RAID-1 au dessus d'un RAID-0. La taille de bloc est commune  tous
   les disques RAID. Je n'ai pas procd  des tests avec des tailles
   diffrentes bien qu'il s'agisse l d'une configuration tout  fait
   licite.

              Chunk size Block size Lecture ko/s Ecriture ko/s
              32k        1k         13753        11580
              32k        4k         23432        22249

   Il n'y a pas eu d'autres tests. La taille des fichiers tait de 900 Mo
   car les partitions n'offraient que 500 Mo chacune, ce qui ne suffit
   pas pour un fichier de 1 Go dans cette configuration (RAID-1 de deux
   matrices de 1000 Mo).

8. Remerciements

   Les personnes suivantes ont contribu  la cration de ce document  :
     * Ingo Molnar
     * Jim Warren
     * Louis Mandelstam
     * Allan Noah
     * Yasunori Taniike
     * Martin Bene
     * Bennett Todd
     * les abonns de la liste de diffusion Linux-RAID
     * ceux que j'ai oubli, dsol :o)

   Envoyez vos remarques et suggestions  l'auteur de ce document. Il n'y
   a pas d'autre faon d'en amliorer la qualit.
