  Recettes pour le HOWTO Root RAID
  Michael         A.         Robinton,         michael@bzs.org
  <mailto:michael@bzs.org>, traduit par Olivier Tharan,  <tha-
  ran@int-evry.fr>
  v1.06, 12 fevrier 1998

  Ce  document  fournit  quelques  recettes  pour  creer  un  systeme de
  fichiers RAID monte a la racine et le  systeme  de  secours  utilisant
  initrd qui l'accompagne. Il y a des instructions completes, pas a pas,
  pour le peripherique md0 en RAID 1. Chaque etape  est  accompagnee  de
  l'explication  de  son  but.  Cette  procedure peut etre utilisee pour
  toutes les autres structures RAID avec des modifications mineures.

  11..  IInnttrroodduuccttiioonn

  Nous supposerons que le lecteur est familier  avec  les  divers  types
  d'implementation  RAID,  leurs  avantages et inconvenients. Ceci n'est
  pas un guide, juste une serie d'instructions sur la maniere de  mettre
  en  place  du  RAID sur la partition montee a la racine sur un systeme
  Linux. Toutes les informations necessaires a une familiarisation  avec
  RAID  sous  Linux  sont  listees  ici  directement  ou par reference ;
  veuillez les lire avant d'envoyer des questions par e-mail.

  11..11..  OOuu ttrroouuvveerr uunnee ccooppiiee aa jjoouurr ddee ccee ddooccuummeenntt..

  Root-RAID-HOWTO

  Disponible en LaTeX (pour le DVI et le PostScript), texte pur et HTML.

       sunsite.unc.edu/mdw/HOWTO/                      <http://sun-
       site.unc.edu/mdw/HOWTO/>

  Disponible en SGML et HTML.

       ftp.bizsystems.com/pub/raid/              <ftp://ftp.bizsys-
       tems.com/pub/raid/>

  11..22..  BBoogguueess

  Au  moment d'ecrire ce document, le probleme qui consiste a arreter un
  peripherique RAID monte a la racine  n'a  pas  encore  ete  resolu  de
  maniere  satisfaisante.  Une solution de contournement proposee par Ed
  Welbon et implementee par Bohumil Chalupa est incluse dans ce document
  et  elimine  le  besoin de faire un ckraid qui prend du temps a chaque
  demarrage pour  des  peripheriques  RAID  1  et  RAID  5.  Sans  cette
  solution,  il est necessaire de faire un cckkrraaiidd sur le peripherique mmdd
  a chaque fois que le systeme est redemarre.  Sur  une  grande  matrice
  ceci  peut entrainer une degradation importante de la performance pour
  la disponibilite du systeme. Sur mon  peripherique  RAID  1  de  6  Go
  tournant  sur  un Pentium 166 avec 128 Mo de RAM, il faut au moins une
  demi-heure pour faire le ckraid :-( apres chaque redemarrage.

  La solution de contournement stocke l'etat de la matrice au moment  de
  l'extinction  sur le peripherique de demarrage rreeeell et le compare a un
  etat de reference place la a la premiere construction du  systeme.  Si
  les  etats  concordent au redemarrage, le superblock de la matrice est
  reconstruit, sinon l'administrateur est averti de l'erreur  d'etat  et
  le  systeme  de  secours  reste en fonctionnement avec tous les outils
  RAID disponibles.

  La reconstruction du superblock permet au  systeme  d'ignorer  que  la
  matrice  a  ete  eteinte sans mdstop en marquant tous les disques d'un
  OOKK, comme si rien ne s'etait passe. Ceci ne fonctionne que si tous les
  disques  sont  OK  a  l'extinction. Si la matrice fonctionnait avec un
  disque  defectueux,  l'administrateur  devrait   enlever   le   disque
  defectueux  avant  de  redemarrer  le  peripherique  md ou des donnees
  pourraient etre corrompues.

  Ceci ne s'applique pas pour RAID 0 qui  n'a  pas  besoin  d'un  mdstop
  avant l'extinction.

  Des  solutions  finales  proposees  pour  ce  probleme  comprennent un
  ffiinnaallrrdd similaire a iinniittrrdd, et un mmddrroooottssttoopp qui  ecrit  les  drapeaux
  cclleeaann  (propre)  sur  la matrice pendant l'extinction quand la matrice
  est montee en lecture seule. Je suis sur qu'il y en a d'autres.

  Pendant ce temps, le probleme a ete contourne pour l'instant. Veuillez
  me  tenir  au  courant  quand  ce probleme sera resolu de maniere plus
  propre !

  11..33..  RReemmeerrcciieemmeennttss

  Les ecrits et courriers electroniques des  personnes  suivantes  m'ont
  aides  a  realiser  ce  document.  Beaucoup  d'idees ont ete _v_o_l_e_e_s du
  travail utile d'autres personnes, j'ai simplement essaye de les mettre
  sous  forme  de  RREECCEETTTTEESS pour qu'elles soient rapides a utiliser. Mes
  remerciements a :

  +o  Linas Vepstas <mailto:linas@linas.org>
      _p_o_u_r _l_e _H_o_w_t_o _R_A_I_D _q_u_i _m_'_a _e_x_p_l_i_q_u_e _l_a _p_l_u_p_a_r_t _d_e_s _c_h_o_s_e_s _i_c_i_.

  +o  Gadi Oxman <mailto:gadio@netvision.net.il>
      _p_o_u_r _a_v_o_i_r _r_e_p_o_n_d_u _a _m_e_s _q_u_e_s_t_i_o_n_s _i_d_i_o_t_e_s _d_e _"_b_l_e_u_"_.

  +o  Ed Welbon <mailto:welbon@bga.com>
      _p_o_u_r _l_'_e_x_c_e_l_l_e_n_t _p_a_q_u_e_t_a_g_e iinniittrrdd..mmdd  qui  m'a  inspire  a  ecrire
     ceci.

  +o  Bohumil   Chalupa  <mailto:bochal@apollo.karlov.mff.cuni.cz>   _p_o_u_r
     _a_v_o_i_r _i_m_p_l_e_m_e_n_t_e _l_a _"_s_o_l_u_t_i_o_n _d_e _c_o_n_t_o_u_r_n_e_m_e_n_t_" _d_u _r_e_d_e_m_a_r_r_a_g_e  _q_u_i
     _p_e_r_m_e_t  _a  _d_u  RRAAIIDD  mmoonnttee  ssuurr  llaa  rraacciinnee  _d_e _f_o_n_c_t_i_o_n_n_e_r _d_a_n_s _u_n
     _e_n_v_i_r_o_n_n_e_m_e_n_t _d_e _p_r_o_d_u_c_t_i_o_n_.

  +o  et bien d'autres qui ont contribue a  ce  travail  d'une  facon  ou
     d'une autre.

  11..44..  NNoottee ddee ccooppyyrriigghhtt

  Ce  document  est  GNU  copyleft  par Michael Robinton michael@bzs.org
  <mailto:michael@bzs.org>.

  La  permission  d'utiliser,  copier,  distribuer  ce   document   pour
  n'importe  quelle  raison est accordee par la presente, a la condition
  que le nom de l'auteur / editeur apparaisse  dans  toutes  les  copies
  et/ou documents accompagnateurs ; et que toute version non modifiee de
  ce document soit disponible librement. Ce document est distribue  dans
  l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, ni explicite, ni
  implicite. Bien que tous les efforts aient ete faits pour s'assurer de
  la  precision  des  informations documentees ici, l'auteur / editeur /
  mainteneur ne prend AUCUNE RESPONSABILITE sur  toute  erreur  ou  pour
  tout  dommage,  direct ou en decoulant, resultant de l'utilisation des
  informations documentees ici.

  22..  CCee ddoonntt vvoouuss aavveezz bbeessooiinn AAVVAANNTT DDEE CCOOMMMMEENNCCEERR

  Les paquetages dont vous avez besoin et la  documentation  qui  repond
  aux  questions  les  plus  frequentes sur la maniere d'installer et de
  faire fonctionner RAID sont listes ci-dessous. Veuillez les  consulter
  en detail.

  22..11..  PPaaqquueettaaggeess nneecceessssaaiirreess

  Vous devez obtenir les versions les plus recentes de ces paquetages :

  +o  un noyau Linux qui supporte RAID, initrd et /dev/loopx

       J'ai         utilise         linux-2.0.32        <ftp://sun-
       site.unc.edu/pub/Linux/kernel/> de sunsite

  +o  raid145-971022-2.0.31
     <ftp://ftp.kernel.org/pub/linux/daemons/raid/>  patch qui ajoute le
     support pour RAID 1/4/5

  +o  raidtools-pre3-0.42  <ftp://ftp.kernel.org/pub/linux/daemons/raid/>
     outils  pour creer et maintenir des peripheriques RAID (et aussi de
     la documentation).

  +o  linuxthreads-0.71
     <ftp://ftp.inria.fr/INRIA/Projects/cristal/Xavier.Leroy>  paquetage
     threads obligatoire. Utilisez FTP, les navigateurs ne  fonctionnent
     pas.

  +o  Une distribution Linux, prete a installer.

       J'ai  utilise  Slackware-3.4 <ftp://ftp.cdrom.com/pub/linux>
       disponible partout.

  Les instructions  detaillees  de  ce  document  sont  basees  sur  les
  paquetages  ci-dessus. Si les paquetages ont ete mis a jour ou si vous
  utilisez une distribution  Linux  differente,  vous  devrez  peut-etre
  modifier les procedures que vous trouverez ici.

  Les  patches,  assortiments  d'outils,  etc.  peuvent  varier avec les
  noyaux 2.1. Veuillez verifier la documentation la plus recente a :

       ftp.kernel.org/pub/linux/daemons/raid/       <ftp://ftp.ker-
       nel.org/pub/linux/daemons/raid/>

  22..22..  AAuuttrreess iimmpplleemmeennttaattiioonnss ssiimmiillaaiirreess..

  J'ai  choisi  d'inclure dans le noyau tous les morceaux necessaires au
  fonctionnement des le demarrage sans charger aucun module. L'image  de
  mon noyau fait un peu plus de 300 Ko compressee.

  Jetez    un    coup    d'oeil    a    iinniittrrdd..mmdd..ttaarr..ggzz   d'Ed   Welbon
  <mailto:welbon@bga.com>  pour  un  autre   moyen   de   fabriquer   un
  peripherique  RAID sur lequel on peut demarrer. Il utilise des modules
  chargeables. Un coup d'oeil a ses scripts concis vous montrera comment
  il  s'y  prend  si  vous  avez  besoin  d'un noyau tres petit avec des
  modules.

  http://www.realtime.net/~welbon/initrd.md.tar.gz
  <http://www.realtime.net/~welbon/initrd.md.tar.gz>

  22..33..  DDooccuummeennttaattiioonn ---- lleeccttuurreess rreeccoommmmaannddeeeess

  VVeeuuiilllleezz lliirree ::

       //uussrr//ssrrcc//lliinnuuxx//DDooccuummeennttaattiioonn//iinniittrrdd..ttxxtt

  ainsi  que  la  documentation  et les pages de manuel qui accompagnent
  l'ensemble raidtools. En particulier, lisez mmaann  mmddaadddd  ainsi  que  le
  document QQuuiicckkSSttaarrtt..RRAAIIDD inclus dans le paquetage raidtools.

  22..44..  RReessssoouurrcceess ssuurr RRAAIIDD

  +o  sunsite.unc.edu/mdw/HOWTO/mini/Software-RAID
     <http://sunsite.unc.edu/mdw/HOWTO/mini/Software-RAID>

  +o  www.ssc.com/lg/issue17/raid.html
     <http://www.ssc.com/lg/issue17/raid.html>

  +o  linas.org/linux/raid.html <http://linas.org/linux/raid.html>

  +o  ftp.kernel.org/pub/linux/daemons/raid/
     <ftp://ftp.kernel.org/pub/linux/daemons/raid/>

  +o  www.realtime.net/~welbon/initrd.md.tar.gz
     <http://www.realtime.net/~welbon/initrd.md.tar.gz>

  +o  luthien.nuclecu.unam.mx/~miguel/raid/
     <http://luthien.nuclecu.unam.mx/~miguel/raid/>

     Vous pouvez joindre des listes de distribution a :

  +o  majordomo@nuclecu.unam.mx        <mailto:majordomo@nuclecu.unam.mx>
     _e_n_v_o_y_e_z _u_n _m_e_s_s_a_g_e _a ssuubbssccrriibbee rraaiiddddeevv

     envoyez     le     courrier     a     :     raiddev@nuclecu.unam.mx
     <mailto:raiddev@nuclecu.unam.mx>

  +o  majordomo@vger.rutgers.edu      <mailto:majordomo@vger.rutgers.edu>
     _e_n_v_o_y_e_z _u_n _m_e_s_s_a_g_e _a ssuubbssccrriibbee lliinnuuxx--rraaiidd

     envoyez  le courrier a : linux-raid@vger.rutgers.edu <mailto:linux-
     raid@vger.rutgers.edu> _(_c_e_c_i _s_e_m_b_l_e _e_t_r_e _l_a _l_i_s_t_e _l_a _p_l_u_s _a_c_t_i_v_e_)

  33..  _i_n_i_t_r_d : recette pour du RAID monte sur la racine

  Voici la procedure pour creer un disque RAM  (ramdisk)  'initrd'  avec
  des outils de secours pour le RAID.

  Specifiquement,  ce  document se rapporte a une implementation RAID 1,
  cependant il est applicable  de  maniere  generale  a  n'importe  quel
  arrangement RAID avec un peripherique RAID monte a la racine.

  33..11..  RRaappppeell ddee sseeccuurriittee

  Le  systeme  de  fichiers  de  secours  peut  etre  utilise seul. S'il
  arrivait que votre matrice RAID  ne  puisse  etre  montee,  vous  etes
  reduit  a  utiliser  le systeme de secours monte et en fonctionnement.
  PRENEZ LES PRECAUTIONS DE SECURITE APPROPRIEES !

  33..22..  CCoonnssttrruuccttiioonn dduu nnooyyaauu eett ddeess oouuttiillss RRAAIIDD

  La premiere chose a faire est de patcher et de construire votre  noyau
  et  de  devenir  familier  avec les outils RAID. Configurez, montez et
  testez votre (vos) peripherique(s) RAID. Les details sur la maniere de
  proceder  sont  inclus dans le paquetage rraaiiddttoooollss et revus en details
  plus loin dans ce document.

  33..33..  ddeemmaarrrraaggee CCoonnssttrruuccttiioonn dduu ssyysstteemmee ddee ffiicchhiieerr _i_n_i_t_r_d  de  secours
  et de

  J'ai utilise la distribution SSllaacckkwwaarree--33..44 pour construire a  la  fois
  le  systeme de fichiers de secours/demarrage et le systeme de fichiers
  de la machine  de  production.  N'importe  quelle  distribution  Linux
  devrait  fonctionner  correctement.  Si vous utilisez une distribution
  differente,  relisez  la  partie  de  cette  procedure  specifique   a
  Slackware et modifiez-la pour l'adapter a vos besoins.

  Vous pouvez charger la distribution Slackware a partir de :

       ftp.cdrom.com/pub/linux/ <ftp://ftp.cdrom.com/pub/linux/>

  Si  vous disposez deja de Slackware, vous n'avez besoin de charger que
  les nouveaux ensembles 'a', 'ap' et 'n'.

  J'utilise Loadlin pour lancer l'image  du  noyau  et  un  disque  xRAM
  (ramdisk)  a  partir  d'une  partition  DOS.  J'ai  choisi de creer un
  systeme de disque RAM minimal en utilisant  le  script  d'installation
  sur  mon  disque  en  RAM.  J'ai  utilise une procedure iiddeennttiiqquuee pour
  construire le systeme de production. Par consequent  les  systemes  de
  secours et de production sont tres similaires.

  Ce processus d'installation me donne un systeme 'nu' (sauvez une copie
  du fichier) sur lequel j'ajoute

          /lib/modules/2.x.x......
          /etc .... avec un fstab modifie
          /etc/rc.d
          /dev/md*

  a partir de mon systeme en cours pour le personnaliser pour  le  noyau
  et la machine sur lesquels il tourne ou tournera.

  Ceci  rend  le systeme de demarrage et de secours identique au systeme
  qui  fonctionnera  sur  le  peripherique  RAID  monte  a  la   racine,
  simplement  epure un peu, tout en permettant de toujours garder a jour
  les versions de bibliotheques et autres.

  33..44..  DDeebbuutt ddeess iinnssttrruuccttiioonnss ppaass aa ppaass

  A partir du repertoire de demarrage de root (/root) :

          cd /root
          mkdir raidboot
          cd raidboot

  Creez des points de montage sur lesquels travailler

          mkdir mnt
          mkdir mnt2

  Creez un fichier suffisamment grand pour effectuer  l'installation  du
  systeme  de  fichiers.  Il  sera beaucoup plus grand que le systeme de
  fichiers de secours final. J'ai choisi 24 Mo car 16  Mo  ne  suffisent
  pas.

          dd if=/dev/zero of=build bs=1024k count=24

  Associez le fichier a un peripherique de boucle (loopback) et creez un
  systeme de fichiers ext2 sur le fichier :

          losetup /dev/loop0 build
          mke2fs -v -m0 -L initrd /dev/loop0
          mount /dev/loop0 mnt

  33..55..  IInnssttaallllaattiioonn ddee llaa ddiissttrriibbuuttiioonn -- ssppeecciiffiiqquuee aa SSllaacckkwwaarree

  Sautez  la  partie  specifique  a  la  Slackware et allez a la section
  ``suivante''.

  Maintenant qu'un systeme de fichiers vide est cree  et  monte,  lancez
  "setup".

  Specifiez               /root/raidboot/mnt

  pour  la  cible  (''ttaarrggeett'').  La source est celle a partir de laquelle
  vous faites l'installation habituellement. Selectionnez les paquetages
  que  vous desirez installer et continuez mais NNEE LLAANNCCEEZZ PPAASS configure.

  Choisissez le mode 'EXPERT'.

  J'ai choisi les ensembles 'A', 'AP' et  'N'  en  n'installant  que  le
  minimum  pour  faire tourner le systeme plus un editeur auquel je suis
  habitue (vi, jed, joe) qui soit suffisamment petit.

  lqqqqqqqq SELECTING PACKAGES FROM SERIES A (BASE LINUX SYSTEM) qqqqqqqqk
  x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x
  x x   [X] aaa_base  Basic filesystem, shell, and utils - REQUIRED    x x
  x x   [X] bash      GNU bash-1.14.7 shell - REQUIRED                 x x
  x x   [X] devs      Device files found in /dev - REQUIRED            x x
  x x   [X] etc       System config files & utilities - REQUIRED       x x
  x x   [X] shadow    Shadow password suite - REQUIRED                 x x
  x x   [ ] ide       Linux 2.0.30 no SCSI (YOU NEED 1 KERNEL)         x x
  x x   [ ] scsi      Linux 2.0.30 with SCSI (YOU NEED 1 KERNEL)       x x
  x x   [ ] modules   Modular Linux device drivers                     x x
  x x   [ ] scsimods  Loadable SCSI device drivers                     x x
  x x   [X] hdsetup   Slackware setup scripts - REQUIRED               x x
  x x   [ ] lilo      Boots Linux (not UMSDOS), DOS, OS/2, etc.        x x
  x x   [ ] bsdlpr    BSD lpr - printer spooling system                x x
  x x   [ ] loadlin   Boots Linux (UMSDOS too!) from MS-DOS            x x
  x x   [ ] pnp       Plug'n'Play configuration tool                   x x
  x x   [ ] umsprogs  Utilities needed to use the UMSDOS filesystem    x x
  x x   [X] sysvinit  System V-like INIT programs - REQUIRED           x x
  x x   [X] bin       GNU fileutils 3.12, elvis, etc. - REQUIRED       x x
  x x   [X] ldso      Dynamic linker/loader - REQUIRED                 x x
  x x   [ ] ibcs2     Runs SCO/SysVr4 binaries                         x x
  x x   [X] less      A text pager utility - REQUIRED                  x x
  x x   [ ] pcmcia    PCMCIA card services support                     x x
  x x   [ ] getty     Getty_ps 2.0.7e - OPTIONAL                       x x
  x x   [X] gzip      The GNU zip compression - REQUIRED               x x
  x x   [X] ps        Displays process info - REQUIRED                 x x
  x x   [X] aoutlibs  a.out shared libs - RECOMMENDED                  x x
  x x   [X] elflibs   The ELF shared C libraries - REQUIRED            x x
  x x   [X] util      Util-linux utilities - REQUIRED                  x x
  x x   [ ] minicom   Serial transfer and modem comm package           x x
  x x   [ ] cpio      The GNU cpio backup/archiving utility            x x
  x x   [X] e2fsbn    Utilities for the ext2 file system               x x
  x x   [X] find      GNU findutils 4.1                                x x
  x x   [X] grep      GNU grep 2.0                                     x x
  x x   [ ] kbd       Change keyboard mappings                         x x
  x x   [X] gpm       Cut and paste text with your mouse               x x
  x x   [X] sh_utils  GNU sh-utils 1.16 - REQUIRED                     x x
  x x   [X] sysklogd  Logs system and kernel messages                  x x
  x x   [X] tar       GNU tar 1.12 - REQUIRED                          x x
  x x   [ ] tcsh      Extended C shell version 6.07                    x x
  x x   [X] txtutils  GNU textutils-1.22 - REQUIRED                    x x
  x x   [ ] zoneinfo  Configures your time zone                        x x
  x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj x

  Dans l'ensemble 'AP', je n'utilise que 'JOE' et l'editeur que je pref-
  ere, et 'MC', petit outil utile de gestion de fichiers. Choisissez les
  outils dont vous aurez besoin sur votre systeme.

  lqqqqqqqqq SELECTING PACKAGES FROM SERIES AP (APPLICATIONS) qqqqqqqqqk
  x x     [ ] ispell    The International version of ispell          x x
  x x     [ ] jove      Jonathan's Own Version of Emacs text editor  x x
  x x     [ ] manpgs    More man pages (online documentation)        x x
  x x     [ ] diff      GNU diffutils                                x x
  x x     [ ] sudo      Allow special users limited root access      x x
  x x     [ ] ghostscr  GNU Ghostscript version 3.33                 x x
  x x     [ ] gsfonts1  Ghostscript fonts (part one)                 x x
  x x     [ ] gsfonts2  Ghostscript fonts (part two)                 x x
  x x     [ ] gsfonts3  Ghostscript fonts (part three)               x x
  x x     [ ] jed       JED programmer's editor                      x x
  x x     [X] joe       joe text editor, version 2.8                 x x
  x x     [ ] jpeg      JPEG image compression utilities             x x
  x x     [ ] bc        GNU bc - arbitrary precision math language   x x
  x x     [ ] workbone  a text-based audio CD player                 x x
  x x     [X] mc        The Midnight Commander file manager          x x
  x x     [ ] mt_st     mt ported from BSD - controls tape drive     x x
  x x     [ ] groff     GNU troff document formatting system         x x
  x x     [ ] quota     User disk quota utilities                    x x
  x x     [ ] sc        The 'sc' spreadsheet                         x x
  x x     [ ] texinfo   GNU texinfo documentation system             x x
  x x     [ ] vim       Improved vi clone                            x x
  x x     [ ] ash       A small /bin/sh type shell - 62K             x x
  x x     [ ] zsh       Zsh - a custom *nix shell                    x x
  x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj x

  Dans l'ensemble 'N' je n'ai pris que TCP/IP. Ceci n'est  pas  vraiment
  necessaire, mais est tres utile et permet d'avoir acces au reseau pen-
  dant un travail de reparation ou de mise a jour avec la matrice RAID a
  la  racine  demontee. TCP/IP contient aussi 'biff' qui est utilise par
  certaines applications de  'A'.  Si  vous  n'installez  pas  'N'  vous
  voudrez quand meme installer le paquetage biff.

  lqqqq SELECTING PACKAGES FROM SERIES N (NETWORK/NEWS/MAIL/UUCP) qqqqqk
  x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x
  x x    [ ] apache    Apache WWW (HTTP) server                      x x
  x x    [ ] procmail  Mail delivery/filtering utility               x x
  x x    [ ] dip       Handles SLIP/CSLIP connections                x x
  x x    [ ] ppp       Point-to-point protocol                       x x
  x x    [ ] mailx     The mailx mailer                              x x
  x x    [X] tcpip     TCP/IP networking programs                    x x
  x x    [ ] bind      Berkeley Internet Name Domain server          x x
  x x    [ ] rdist     Remote file distribution utility              x x
  x x    [ ] lynx      Text-based World Wide Web browser             x x
  x x    [ ] uucp      Taylor UUCP 1.06.1 with HDB && Taylor configs x x
  x x    [ ] elm       Menu-driven user mail program                 x x
  x x    [ ] pine      Pine menu-driven mail program                 x x
  x x    [ ] sendmail  The sendmail mail transport agent             x x
  x x    [ ] metamail  Metamail multimedia mail extensions           x x
  x x    [ ] smailcfg  Extra configuration files for sendmail        x x
  x x    [ ] cnews     Spools and transmits Usenet news              x x
  x x    [ ] inn       InterNetNews news transport system            x x
  x x    [ ] tin       The 'tin' news reader (local or NNTP)         x x
  x x    [ ] trn       'trn' for /var/spool/news                     x x
  x x    [ ] trn-nntp  'trn' for NNTP (install 1 'trn' maximum)      x x
  x x    [ ] nn-spool  'nn' for /var/spool/news                      x x
  x x    [ ] nn-nntp   'nn' for NNTP (install 1 'nn' maximum)        x x
  x x    [ ] netpipes  Network pipe utilities                        x x
  x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj x

  A  la  fin  de l'installation, dites non a tout le reste (non a toutes
  les demandes de configuration) et sortez du script.

  33..66..  IInnssttaallllaattiioonn ddee LLiinnuuxx pptthhrreeaaddss

  Vous devez maintenant installer la  bibliotheque  linuxthreads  plutot
  que  d'expliquer  les  details  de l'installation a la main. Sauvez le
  Makefile d'origine, appliquez le patch et ensuite :

          cd /usr/src/linuxthreads-0.71
    patch
          make
          make install

  -------------------diff Makefile.old  Makefile.raid-----------------
  2a3,13
  > # If you are building "linuxthreads" for installation on a mount
  > # point which is not the "root" partition, redefine 'BUILDIR' to
  > # the mount point to use as the "root" directory
  > # You may wish to do this if you are building an 'initial ram disk'
  > # such as used with bootable root raid devices.
  > # REQUIRES ldconfig version 1.9.5 or better
  > # do ldconfig -v to check
  > #
  > BUILDIR=/root/raidboot/mnt
  > #BUILDIR=
  >
  81,82c92,93
  <       install pthread.h $(INCLUDEDIR)/pthread.h
  <       install semaphore.h $(INCLUDEDIR)/semaphore.h
  ---
  >       install pthread.h $(BUILDIR)$(INCLUDEDIR)/pthread.h
  >       install semaphore.h $(BUILDIR)$(INCLUDEDIR)/semaphore.h
  84c95
  <       test -f /usr/include/sched.h || install sched.h $(INCLUDEDIR)/sched.h
  ---
  >       test -f $(BUILDIR)/usr/include/sched.h || install sched.h $(BUILDIR)$(INCLUDEDIR)/sched.h
  86,89c97,103
  <       install $(LIB) $(LIBDIR)/$(LIB)
  <       install $(SHLIB) $(SHAREDLIBDIR)/$(SHLIB)
  <       rm -f $(LIBDIR)/$(SHLIB0)
  <       ln -s $(SHAREDLIBDIR)/$(SHLIB) $(LIBDIR)/$(SHLIB0)
  ---
  >       install $(LIB) $(BUILDIR)$(LIBDIR)/$(LIB)
  >       install $(SHLIB) $(BUILDIR)$(SHAREDLIBDIR)/$(SHLIB)
  >       rm -f $(BUILDIR)$(LIBDIR)/$(SHLIB0)
  >       ln -s $(SHAREDLIBDIR)/$(SHLIB) $(BUILDIR)$(LIBDIR)/$(SHLIB0)
  > ifneq ($(BUILDIR),)
  >       ldconfig -r ${BUILDIR} -n $(SHAREDLIBDIR)
  > else
  91c105,106
  <       cd man; $(MAKE) MANDIR=$(MANDIR) install
  ---
  > endif
  >       cd man; $(MAKE) MANDIR=$(BUILDIR)$(MANDIR) install

  33..77..  IInnssttaallllaattiioonn ddeess oouuttiillss ppoouurr llee RRAAIIDD

  L'etape suivante est l'installation des outils RAID :  raidtools-0.42.

  Vous devez lancer le script "configure" pour faire pointer le Makefile
  vers le repertoire de construction des fichiers ramdisk.
    cd /usr/src/raidtools-0.42
    configure --sbindir=/root/raidboot/mnt/sbin --prefix=/root/raidboot/mnt/usr
    make
    make install

  Maintenant ! Le Makefile pour l'installation n'est  pas  tout  a  fait
  correct,  effectuez  les  operations  suivantes pour le nettoyer. Ceci
  sera modifie dans les versions futures pour que la liaison  des  liens
  ne soit pas a nouveau necessaire.

       Reparer l'erreur du make install

  Les  liens  des  fichiers specifies dans le Makefile a 'LINKS' doivent
  etre enleves et re-lies pour fonctionner correctement.

          cd /root/raidboot/mnt/sbin
          ln -fs mdadd mdrun
          ln -fs mdadd mdstop

  33..88..  nnoouuvveeaauu  ssyysstteemmee  ddee  ffiicchhiieerrss  EEffffaacceemmeenntt  ddeess  rreeppeerrttooiirreess  eett
  ffiicchhiieerrss nnoonn nneecceessssaaiirreess ddaannss llee

  Effacez les repertoires suivants du systeme de fichiers (ATTENTION  NE
  LES  EFFACEZ  PAS  DE VOTRE SYSTEME EN FONCTIONNEMENT), c'est facile a
  faire, devinez comment j'ai trouve !!!

          cd /root/raidboot/mnt
          rm -r home/ftp/*
          rm -r lost+found
          rm -r usr/doc
          rm -r usr/info
          rm -r usr/local/man
          rm -r usr/man
          rm -r usr/openwin
          rm -r usr/share/locale
          rm -r usr/X*
          rm -r var/man
          rm -r var/log/packages
          rm -r var/log/setup
          rm -r var/log/disk_contents

  33..99..  CCrreeaattiioonn ddee //ddeevv//mmdd_x

  La derniere etape  copie  simplement  les  peripheriques  /dev/md*  du
  systeme  de  fichiers  courant  sur le systeme de fichiers de secours.
  Vous pouvez les creer avec mknod.

          cp -a /dev/md* /root/raidboot/mnt/dev

  33..1100..  CCrreeaattiioonn dd''uunn ssyysstteemmee ddee ffiicchhiieerrss nnuu ccoonnvveennaanntt aa _i_n_i_t_r_d

  Vous  avez  maintenant  un systeme de fichiers propre et reutilisable,
  pret a  etre  personnalise.  Une  fois  personnalise,  ce  systeme  de
  fichiers   pourra   etre   utilise  comme  secours,  si  jamais  le(s)
  peripherique(s) RAID, ainsi que  les  outils  RAID  necessaires  a  la
  reparation,  devenaient corrompus. Il sera aussi utilise pour demarrer
  et monter a la racine le peripherique  RAID  en  ajoutant  le  fichier
  linuxrc dont nous parlerons bientot.

  Copiez  le  systeme de fichiers sur un peripherique plus petit pour le
  fichier initrd, 16 Mo devraient etre suffisants.

  Creez le systeme de fichiers plus petit et montez-le

          cd /root/raidboot
          dd if=/dev/zero of=bare.fs bs=1024k count=16

  associez le fichier a un peripherique de boucle et generez un  systeme
  de fichiers ext2 sur ce fichier

          losetup /dev/loop1 bare.fs
          mke2fs -v -m0 -L initrd /dev/loop1
          mount /dev/loop1 mnt2

  Copiez le systeme de fichiers 'build' sur 'bare.fs'

          cp -a mnt/* mnt2

  Sauvez  le systeme 'bare.fs' avant personnalisation pour que les mises
  a jour ulterieures soient facilitees. Le systeme de  fichiers  'build'
  n'est plus necessaire et peut etre efface.

          cd /root/raidboot
          umount mnt
          umount mnt2
          losetup -d /dev/loop0
          losetup -d /dev/loop1
          rm build
          cp bare.fs rescue
          gzip -9 bare.fs

  33..1100..11..  CCrreeaattiioonn dduu ssyysstteemmee ddee ffiicchhiieerrss iinniittrrdd de demarrage/secours

  Copiez maintenant les parties dependantes du systeme qui correspondent
  au  noyau  de  la  plate-forme  de  developpement, ou bien vous pouvez
  modifier a la main les fichiers du systeme de fichiers de secours pour
  correspondre a votre systeme cible.

          losetup /dev/loop0 rescue
          mount /dev/loop0 mnt

  Assurez-vous que votre repertoire etc est propre des fichiers *~, core
  et log. Les deux commandes qui suivent  creent  des  messages  d'aver-
  tissement, ignorez-les.

          cp -dp /etc/* mnt/etc
          cp -dp /etc/rc.d/* mnt/etc/rc.d

          mkdir  mnt/lib/modules
          cp -a  /lib/modules/2.x.x mnt/lib/modules <--- votre noyau 2.x.x en cours

  Editez  les fichiers suivantes pour les corriger pour votre systeme de
  secours.
          cd mnt

  Non reseau
          etc/fstab       mettez en commentaire le montage des peripheriques root et raid
          etc/mdtab       devrait fonctionner
  Reseau
          etc/hosts
          etc/resolv.conf
          etc/hosts.equiv         et fichiers lies
          etc/rc.d/rc.inet1       adresses IP, masque, passerelle, etc. correctes
          etc/rc.d/rc.S           enlevez entierement la section sur l'etat du systeme de fichiers
                  de :
                          # Test to see if the root partition isread-only
                  a, mais n'incluant pas :
                          # remove /etc/mtab* so that mount will .....
                                  ceci evite l'avertissement ennuyeux que
                                  le disque RAM est monte en lecture/ecriture
          etc/rc.d/rc.xxxxx       d'autres si necessaire, voir plus bas
          root/.rhosts            si present
          home/xxxx/xxxx          d'autres si necessaire

      ATTENTION : la procedure ci-dessus deplace vos fichiers de mot de
                  passe et shadow sur le disque de secours !!!

      ATTENTION : vous ne voudrez pas faire ceci pour des raisons de securite

  Creez tous les repertoires pour monter /dev/dsk... tels qu'ils peuvent
  etre necessaires et uniques a votre systeme. Le mien necessite :

          cd /root/raidboot/mnt           <--- racine initrd
          mkdir dosa                      point de montage partition DOS
          mkdir dosc                      point de montage miroir DOS

  Le systeme de fichiers de secours est termine !

  Vous  noterez  en  examinant  les  fichiers  du systeme de fichiers de
  secours qu'il y a  encore  de  nombreux  fichiers  que  l'on  pourrait
  effacer.  Je  ne l'ai pas fait car cela compliquerait totalement cette
  procedure et la plupart des systemes RAID ont suffisamment  de  disque
  et  de memoire. Si vous voulez encore diminuer la taille du systeme de
  fichiers, allez-y !

  33..1100..22..  FFaaiirree qquu''_i_n_i_t_r_d demarre le peripherique RAID - lliinnuuxxrrcc

  Pour  que  la  disquette  de  demarrage  de secours puisse demarrer le
  peripherique RAID, vous n'avez besoin que de copier le fichier  script
  executable :

       lliinnuuxxrrcc

  a la racine du peripherique.

  ---------------------- linuxrc --------------------
  #!/bin/sh
  # ver 1.07 2-12-98
  # monter le systeme de fichiers proc
  /bin/mount /proc

  # Ceci peut varier pour votre systeme.
  # Monter les partitions DOS, essayer les deux
  # au cas ou l'un des disques est mort
  /bin/mount /dosa
  /bin/mount /dosc

  # Positionner un drapeau au cas ou le fichier d'etat RAID n'est pas
  # trouve puis chercher le fichier d'etat sur les deux disques
  RAIDOWN="raidstat.ro not found"
  /bin/echo "Reading md0 shutdown status."
  if [ -f /dosa/linux/raidstat.ro ]; then
    RAIDOWN=`/bin/cat /dosa/linux/raidstat.ro`
    RAIDREF=`/bin/cat /dosc/linux/raidgood.ref`
  else
    if [ -f /dosc/linux/raidstat.ro ]; then
      RAIDOWN=`/bin/cat /dosc/linux/raidstat.ro`
      RAIDREF=`/bin/cat /dosc/linux/raidgood.ref`
    fi
  fi

  # Tester si l'extinction a ete propre avec des disques en etat de
  # marche
  if [ "${RAIDOWN} != ${RAIDREF}" ]; then
    echo "ERROR ${RAIDOWN}"
  # Utilisez les deux lignes suivantes pour SORTIR et laisser le secours
  # tourner
     /bin/echo 0x100>/proc/sys/kernel/real-root-dev
     exit                 # laissant les fichier d'erreurs dans dosa/linux, etc.
  fi

  # La matrice RAID est propre, continuer en enlevant
  # le fichier d'etat et en ecrivant un superblock propre
  /bin/rm /dosa/linux/raidstat.ro
  /bin/rm /dosc/linux/raidstat.ro
  /sbin/mkraid /etc/raid1.conf -f --only-superblock

  /bin/umount /dosa
  /bin/umount /dosc

  # Monter la matrice RAID
  echo "Mounting md0, root filesystem"
  /sbin/mdadd -ar

  # S'il y a des erreurs, SORTIR et laisser le secours tourner
  if [ $? -ne 0 ]; then
     echo "RAID device has errors"
  # Utilisez les trois lignes suivantes pour SORTIR
     /bin/rm /etc/mtab            # enlever le mtab mauvais
     /bin/echo 0x100>/proc/sys/kernel/real-root-dev
     exit
  fi

  # sinon annoncer au noyau de passer a /dev/md0 comme peripherique
  # /root. La valeur 0x900 est le numero de peripherique calcule par :
  #  256*numero_periph_majeur + numero_periph_mineur
  /bin/echo 0x900>/proc/sys/kernel/real-root-dev

  # demonter /proc pour liberer l'espace memoire du peripherique initrd
  /bin/umount /proc
  /bin/echo "/dev/md0 mounted as root"
  exit
  #------------------ end linuxrc ----------------------

  Ajoutez 'linuxrc' au peripherique de demarrage initrd.

          cd /root/raidboot
          chmod 777 linuxrc
          cp -p linuxrc mnt

  33..1111..  MMooddiiffiiccaattiioonn ddeess ssccrriippttss rrcc ppoouurr ll''eexxttiinnccttiioonn

  Pour terminer l'installation, modifiez les scripts rc pour sauvegarder
  l'etat md sur  le  vrai  peripherique  racine  quand  l'extinction  du
  systeme arrive.

  Dans la Slackware, c'est rc.0 -> rc.6

  J'ai  modifie  legerement  le  contournement  de  Bohumil Chalupa pour
  stopper le RAID. Sa solution a l'origine est presentee  dans  l'annexe
  ``A''.

  Puisqu'il  ne  reste  plus  de partition Linux libre sur le systeme de
  production exceptee  mmdd00,  les  partitions  DOS  sont  utilisees  pour
  stocker  l'etat  rraaiiddOOKK  eenn  lleeccttuurree  sseeuullee.  J'ai  choisi d'ecrire un
  fichier sur chaque partition DOS contenant l'etat de la matrice  md  a
  l'extinction  signifiant  que  le  peripherique  md  a  ete remonte en
  lecture seule. Ceci evite la panne du  systeme  si  l'un  des  disques
  meurt.

  J'ai  modifie  mon  script rc.6 pour tenter le demontage de la matrice
  racine en RAID 1 et tout autre peripheriques RAID de mdtab. Vous aurez
  besoin  de  scripts  legerement  differents, mais les elements de base
  devraient etre les memes. Le fichier  rc.6  complet  est  montre  dans
  l'annexe ``B''.

  Pour  capturer l'etat a l'extinction de la matrice RAID, inserez juste
  avant que les systemes de fichiers soient demontes :

          RAIDSTATUS=`/bin/cat /proc/mdstat | /usr/bin/grep md0`

  Apres que tous les systemes de fichiers soient demontes (le systeme de
  fichiers racine ne se demontera pas), ajoutez :

          # le peripheriques racine reste monte en lecture seule
          # les systemes de fichiers DOS sont en lecture/ecriture
          mount -n -o remount,ro /
          echo "Writing RAID read-only boot FLAG(s)."
          mount -n /dosa
          mount -n /dosc
          # creer un drapeau RAID monte en lecture seule en double
          # contenant l'etat d'extinction de la matrice RAID
          echo ${RAIDSTATUS} > /dosa/linux/raidstat.ro
          echo ${RAIDSTATUS} > /dosc/linux/raidstat.ro

          umount -n /dosa
          umount -n /dosc

          # stoppe toutes les matrices RAID (sauf la racine)
          echo "Stopping raid"
          mdstop -a

  Ceci  arretera  proprement tous les peripheriques RAID sauf la racine.
  L'etat de la racine est passe au demarrage suivant dans rraaiiddssttaatt..rroo.

  Copiez le fichier rc sur votre nouvelle matrice RAID,  le  systeme  de
  fichiers  de secours qui est encore monte sur //rroooott//rraaiiddbboooott//mmnntt et le
  systeme de developpement s'il est sur la meme machine.

  Modifiez le eettcc//ffssttaabb de secours si necessaire et assurez-vous que  le
  mmddttaabb de secours est correct.

  Copiez  maintenant  la disquette de secours sur votre partition DOS et
  tout devrait etre pret pour demarrer le peripherique RAID a la racine.

          umount mnt
          losetup -d /dev/loop0
          gzip -9 rescue

  Copiez rescue.gz sur votre partition DOS.

  Tout  ce  qui  reste  est  de tester le nouveau systeme de fichiers en
  redemarrant. Voyez les parametres loadlin sur le fichier DOS lliinnuuxx..bbaatt
  dans ce qui suit.

  33..1122..   MMiissee  eenn ppllaaccee dduu ddeemmaarrrraaggee aavveecc llooaaddlliinn ppoouurr llee sseeccoouurrss eett llee
  RRAAIIDD

  Les  disques  que  j'ai choisis pour mon systeme sont bien plus grands
  que ceux que LILO peut gerer. Par  consequent,  j'ai  utilise  loadlin
  pour  demarrer  le systeme a partir d'une petite partition DOS avec un
  miroir (copie) sur le disque accompagnateur.

  Mon systeme DOS de demarrage  contient  un  petit  editeur  parmi  les
  utilitaires pour que je puisse modifier les parametres de demarrage de
  loadlin si necessaire, ce qui me permet de redemarrer le systeme Linux
  sur mon disque de depannage pendant que je fais des tests.

  Le systeme DOS contient cette arborescence pour Linux :

          c:\linux.bat
          c:\linux\loadlin.exe
          c:\linux\zimage
          c:\linux\rescue.gz
          c:\linux\raidgood.ref
          c:\linux\raidstat.ro    (seulement a l'extinction)

  ---------------------- linux.bat ---------------------------
  rem  fichier batch DOS d'exemple pour demarrer Linux
  rem  Demarrage du processus LOADLIN :

  rem c:\linux\loadlin c:\linux\zimage root=/dev/ram0 ro ramdisk_size=16384 initrd=c:\linux\rescue.gz mem=131072k
  c:\linux\loadlin c:\linux\zimage root=/dev/md0 ro ramdisk_size=16384 initrd=c:\linux\rescue.gz mem=131072k

  rem -- ceci est mon systeme de developpement -- il s'en va plus tard
  rem c:\linux\loadlin c:\linux\zimage root=/dev/hda3 ro noinitrd mem=131072k
  ------------------------------------------------------------

  ***** >> NOTE !! la seule difference entre forcer le lancement du
          systeme de secours et le montage du peripherique RAID est le
          parametre de loadlin.

                  root=/dev/ram0          pour le systeme de secours
                  root=/dev/md0           pour RAID

                  Avec root=/dev/ram0 les peripheriques RAID ne seront
                  pas montes et le systeme de secours tournera sans
                  conditions

  Si  la  matrice RAID tombe en panne, le systeme de secours reste monte
  et tourne (ceci semble ne pas fonctionner de temps  en  temps,  je  ne
  sais  pas  pourquoi,  cela fonctionne quand le bouton reset est appuye
  mais ne fonctionne pas avec 'shutdown -r now').

  44..  CCoonnffiigguurraattiioonn dduu ssyysstteemmee ddee pprroodduuccttiioonn eenn RRAAIIDD

  44..11..  SSppeecciiffiiccaattiioonnss dduu ssyysstteemmee

  Carte mere :    Iwill P55TU     double ide + adaptec scsi
  Processeur :    Intel P200
  Disques:                2 ea. Maxtor 7 gig eide

  Les disques sont designes par Linux comme 'hda' et 'hdc'

  44..22..  PPaarrttiittiioonnnneemmeenntt ddeess ddiissqquueess dduurrss

  Puisque le test d'une grande matrice  RAID  qu'on  peut  monter  a  la
  racine  est  difficile  a  cause  du  probleme  du  redemarrage,  j'ai
  repartitionne mon espace d'echange (swap) pour inclure  une  partition
  RAID plus petite a des fins de tests. Vous pourrez trouver ceci utile.

          <bf/SYSTEME DE DEVELOPPEMENT/

    /dev/hda1     dos             16meg
  * /dev/hda2     extended        126m
    /dev/hda3     linux           126m    partition racine pendant le developpement
    /dev/hda4     linux           6+gig   RAID 1
  * /dev/hda5     linux            26m    RAID 1 de test
  * /dev/hda6     linux swap      100m

    /dev/hdc1     est simplement une copie exacte de hda1 pour que cette
                  partition puisse etre activee si hda tombe en panne
  * /dev/hdc2     extended        126m
    /dev/hdc3     linux           126m    /usr/src pendant le developpement
    /dev/hdc4     linux           6+gig   miroir RAID 1
  * /dev/hdc5     linux            26m    miroir RAID 1 de test
  * /dev/hdc6     linux swap      100m

          <bf/SYSTEME DE PRODUCTION/

  /dev/hda1       dos             16meg
  /dev/hda2       linux swap      126m
  /dev/hda3       linux swap      126m
  /dev/hda4       linux           6+gig   RAID 1

  /dev/hdc1       est simplement une copie exacte de hda1
  /dev/hdc2       linux swap      126m
  /dev/hdc3       linux swap      126m
  /dev/hdc4       linux           6+gig   miroir RAID 1

  Les partitions hdx3 ont ete changees en 'swap' apres  avoir  developpe
  cet  utilitaire.  J'aurais pu le faire sur une autre machine, mais les
  bibliotheques et les noyaux ont tous a peu pres un an  de  retard  sur
  mes autres machines Linux et j'ai prefere le construire sur la machine
  cible.

  J'ai choisi de partitionner  de  cette  facon  et  d'utiliser  loadlin
  plutot que LILO parce que :

  1. la  partition  principale  (6  Go)  est  trop  grande  pour pouvoir
     demarrer  avec  LILO  seul  et   aurait   demande   une   partition
     supplementaire  plus petite situee a l'interieur des 1024 premieres
     adresses du disque ;

  2. Si jamais ce disque tombe en panne de  maniere  catastrophique,  le
     systeme doit continuer a tourner et etre demarrable avec un minimum
     d'efforts et AUCUNE perte de donnees.

  +o  Si l'un des disques durs tombe en panne, le  demarrage  s'arretera,
     et le systeme de secours se mettra en marche. L'examen du message a
     l'ecran ou de /dos_x/linux/raidstat.ro indiquera a  l'administrateur
     l'etat de la matrice defaillante.

  +o  Si  hda  tombe en panne, la partition DOS sur hdc doit etre marquee
     'active' et le BIOS doit  reconnaitre  hdc  comme  peripherique  de
     demarrage ou bien il doit etre deplace physiquement en position hda
     en le recablant. On peut reactiver a nouveau  le  systeme  RAID  en
     enlevant le disque defectueux et en tapant :

              "/sbin/mkraid /etc/raid1.conf -f --only-superblock"

  pour reconstruire le superblock restant.

  +o  Une fois ceci fait, alors

             mdadd -ar

  +o  Examinez  l'etat de la matrice pour verifier que tout est en ordre,
     puis remplacez la reference de la matrice en bon  etat  par  l'etat
     courant  jusqu'a  ce que le disque defectueux puisse etre repare et
     remplace.

             cat /proc/mdstat | grep md0 > /dosa/linux/raidgood.ref

             shutdown -r now

  pour effectuer un redemarrage propre, et le  systeme  sera  a  nouveau
  disponible.

  55..  CCoonnssttrruuccttiioonn dduu ssyysstteemmee ddee ffiicchhiieerrss RRAAIIDD

  Cette  description  convient  a  mon  systeme  RAID  1 decrit dans les
  specifications du systeme. Votre systeme peut avoir  une  architecture
  RAID  differente,  vous  ferez les modifications appropriees. Veuillez
  lire les  pages  de  manuel  et  le  QuickStart.RAID  livre  avec  les
  raidtools-0.42. Mon /etc/raid1.conf contient :

          # configuration RAID 1
          raiddev                 /dev/md0
          raid-level              1
          nr-raid-disks           2
          nr-spare-disks          0

          device                  /dev/hda4
          raid-disk               0

          device                  /dev/hdc4
          raid-disk               1

  55..11..   PPrroocceedduurreess  ppaass  aa  ppaass  ppoouurr  llaa  ccoonnssttrruuccttiioonn dd''uunn ssyysstteemmee ddee
  ffiicchhiieerrss RRAAIIDD ddee pprroodduuccttiioonn

  Pour mon systeme RAID 1, j'ai fait une installation complete de :

          Slackware-3.4
          linuxthreads-0.71
          raidtools-0.42
          linux-2.0.32 avec le patch raid145

  Creez et formatez le peripherique RAID.

          mkraid /etc/raid1.conf
          mdcreate raid1 /dev/md0 /dev/hda4 /dev/hdc4
          mdadd -ar
          mke2fs /dev/md0
          mkdir /md
          mount -t ext2 /dev/md0 /md

  Creez les fichiers de reference que reboot utilisera, ils peuvent etre
  differents sur votre systeme.

          cat /proc/mdstat | grep md0 > /dosa/linux/raidgood.ref
          cat /proc/mdstat | grep md0 > /dosc/linux/raidgood.ref

  Utilisez Slackware 3.4 ou une autre distribution pour construire votre
  systeme d'exploitation.

          setup

  Specifiez  'md'  comme  cible,  et  comme  source ce que vous utilisez
  habituellement. Selectionnez et installez  les  ensembles  de  disques
  interessants  sauf  pour  le noyau. Configurez le systeme, mais passez
  les sections sur LILO et le demarrage du noyau. Sortez de setup.

  Installez les 'pthreads'

          cd /usr/src/linuxthreads-0.71

  Editez le Makefile et specifiez

          BUILDIR=/md

          make
          make install

  Installez les 'raidtools'

          cd /usr/src/raidtools-0.42
          configure --sbindir=/md/sbin --prefix=/md/usr

  Reparez l'erreur du make install des raidtools

          cd /md/sbin
          rm mdrun
          rm mdstop
          ln -s mdadd mdrun
          ln -s mdadd mdstop

  Creez /dev/mdx

          cp -a /dev/md* /md/dev

  Ajoutez la configuration systeme du  systeme  en  cours  (ignorez  les
  erreurs).

          cp -dp /etc/* mnt/etc
          cp -dp /etc/rc.d/* mnt/etc/rc.d         (incluez le nouveau rc.6)
          mkdir  mnt/lib/modules
          cp -a  /lib/modules/2.x.x mnt/lib/modules <--- votre 2.x.x en cours

  Editez  les  fichiers suivants pour les corriger pour votre systeme de
  fichiers

          cd /md

  Non reseau
          etc/fstab       correct pour les peripheriques racine reelle et RAID
          etc/mdtab       devrait etre correct
  Reseau
          etc/hosts
          etc/resolv.conf
          etc/hosts.equiv         et fichiers associes
          etc/rc.d/rc.inet1       adresses IP, masque, passerelle, etc. correctes
          etc/rc.d/rc.S           enlevez la section entiere sur l'etat du systeme de fichiers
                  a partir de :
                          # Test to see if the root partition isread-only
                  jusqu'a mais ne comprenant pas :
                          # remove /etc/mtab* so that mount will .....
                                  Ceci evite l'avertissement ennuyeux que
                                  le disque RAM est monte en lecture/ecriture
          etc/rc.d/rc.xxxxx       d'autres si necessaire
          root/.rhosts            s'il existe
          home/xxxx/xxxx          d'autres si necessaire

      ATTTENTION :        La procedure ci-dessus deplace vos fichiers de
                          mot de passe et shadow sur le nouveau systeme
                          de fichiers !!!

      ATTENTION :         Vous n'aurez pas envie de faire ceci pour des
                          raisons de securite

  Creez tous les repertoires pour  monter  /dev/disk...  qui  pourraient
  etre necessaire compte-tenu de votre systeme. Le mien necessite :

          cd /md          <--- nouvelle racine du systeme de fichiers
          mkdir dosa              point de montage de la partition DOS
          mkdir dosc              point de montage du miroir DOS

  Le  nouveau  systeme  de fichiers est termine. Assurez-vous de sauveg-
  arder l'etat de reference de md sur le 'veritable' peripherique racine
  et vous etes pret a demarrer.

  montez les partitions DOS sur dosa et dosc

          cat /proc/mdstat | grep md0 > /dosa/linux/raidgood.ref
          cat /proc/mdstat | grep md0 > /dosc/linux/raidgood.ref

          mdstop /dev/md0

  66..  UUnnee ddeerrnniieerree ppeennsseeee

  Souvenez-vous qu'un expert est quelqu'un qui en connait au moins 1% de
  plus que vous  sur  un  sujet.  Gardez  ceci  a  l'esprit  quand  vous
  m'enverrez  un  e-mail  demandant de l'aide. J'essaierai, mais je n'ai
  fait ceci qu'une fois !
  Michael Robinton Michael@bzs.org <mailto:michael@bzs.org>

  77..  AAnnnneexxee AA.. -- eexxttiinnccttiioonn ddee mmdd00 cchheezz BBoohhuummiill CChhaalluuppaa

  Voici le post de Bohumil Chalupa sur la liste Linux RAID concernant le
  contournement  du  probleme  de mdstop avec RAID 1 + 5. Sa solution ne
  considere pas la possibilite d'une corruption du peripherique  RAID  a
  l'extinction.  J'ai  donc ajoute une simple comparaison d'etat avec un
  etat de reference  correct  et  connu  au  demarrage.  Ceci  permet  a
  l'administrateur  d'intervenir si quelque chose ne va pas bien avec un
  disque dans une matrice. La description de  ceci  est  dans  le  corps
  principal de ce document.

  (NdT  :  j'ai  traduit le message parce qu'il est long et interessant,
  celui en anglais se trouve bien evidemment dans la  version  d'origine
  de ce HOWTO.)

  > From: Bohumil Chalupa <bochal@apollo.karlov.mff.cuni.cz>
  >
  > Je peux maintenant demarrer initrd et utiliser linuxrc pour demarrer
  > la matrice RAID 1, puis changer la racine en /dev/md0 avec succes.
  >
  > Je ne connais pas, cependant, de maniere d'_arreter_ proprement la
  > matrice.

  Bon. Je dois repondre moi-meme :-)

  > Date: Mon, 29 Dec 1997 02:21:38 -0600 (CST)
  > From: Edward Welbon <welbon@bga.com>
  > Subject: Re: dismounting root raid device
  >
  > Pour les peripheriques md autres que RAID 0, il y a surement un etat
  > a sauvegarder qui n'est connu qu'une fois que toutes les ecritures
  > sont terminees. Un tel etat ne peut bien sur etre sauve a la racine
  > une fois qu'elle est montee en lecture seule. Dans ce cas, on
  > devrait pouvoir monter un systeme de fichiers "X" en ecriture sur la
  > racine en lecture seule et pouvoir ecrire sur "X" (je me rappelle
  > l'avoir fait pendant des operations de "secours", mais pas dans une
  > procedure automatisee).
  >
  > Le systeme de fichiers "X" serait je pense un peripherique de
  > demarrage a partir duquel le RAID (pendant l'execution de linuxrc a
  > travers initrd) irait prendre son etat initial. Heureusement RAID 0
  > ne demande pas d'ecrire un quelconque etat (bien qu'il serait utile
  > de pouvoir ecrire les sommes de verification (checksums) dans mdtab
  > apres un mdstop). En fin de compte, je bricolerai ceci mais ca ne
  > parait pas difficile bien que le "diable" se trouve toujours dans
  > les "details".

  Oui, c'est ca.
  J'ai deja eu cette idee a l'esprit depuis quelques temps, mais je n'ai
  pas eu le temps de l'essayer. Je l'ai fait hier, et ca marche.

  Avec mon RAID 1 (miroir), je ne sauvegarde aucune somme de
  verification ni donnees de superblock RAID. Je ne sauvegarde une
  information que sur la partition de demarrage "reelle", celle sur
  laquelle le volume md racine etait remonte en lecture seule pendant
  l'extinction. Alors, pendant le demarrage, le script linuxrc lance
  mkraid --only-superblock quand il trouve cette information ; sinon, il
  lance ckraid. Ceci veut dire que l'information du superblock RAID
  n'est pas mise a jour pendant l'extinction ; elle est mise a jour au
  demarrage. Ce n'est pas tres propre, j'en ai peur, :-( mais ca
  fonctionne.

  J'utilise Slackware et initrd.md d'Edward Welbon pour demarrer le
  peripherique RAID a la racine.
  Autant que je puisse m'en souvenir, les seuls fichiers modifies sont
  mkdisk et linuxrc, et le script d'extinction /etc/rc.d/rc.6. Et
  lilo.conf, bien sur.

  J'annexe les parties importantes.

  Bohumil Chalupa

  --------------- mon.linuxrc suit -----------------
  #!/bin/sh
  # nous avons besoin de /proc
  /bin/mount /proc
  # demarrer le peripherique md0. Laisser les scripts /etc/rc.d
  s'occuper du reste. Nous devrions en faire le moins possible ici.
  # ________________________________________
  # test d'extinction du RAID 1 racine et recreation
  # /start doit etre cree sur l'image rd dans mon.mkdisk
  echo "preparation de md0: montage de /start"
  /bin/mount /dev/sda2 /start -t ext2
  echo "lecture de l'etat sauvegarde de md0 dans /start"
  if [ -f /start/root.raid.ok ]; then
   echo "RAID ok, modification du superblock"
   rm /start/root.raid.ok
   /sbin/mkraid /etc/raid1.conf -f --only-superblock
  else
   echo "RAID pas propre, lancement de ckraid --fix"
   /sbin/ckraid --fix /etc/raid1.conf
  fi
  echo "demontage de /start"
  /bin/umount /start
  # _________________________________________
  #
  echo "ajout de md0 pour le systeme de fichiers racine"
  /sbin/mdadd /dev/md0 /dev/sda1 /dev/sdb1
  echo "lancement de md0"
  /sbin/mdrun -p1 /dev/md0
  # dire au noyau que nous voulons passer /dev/md0 comme peripherique
  # racine, la valeur 0x900 vient de 256*numero_periph_majeur +
  # numero_periph_mineur.
  echo "mise en place du vrai-periph-racine (real-root-dev)"
  /bin/echo 0x900>/proc/sys/kernel/real-root-dev
  # demontage de /proc pour que le disque RAM puisse etre enleve de la
  # memoire
  echo "unmounting /proc"
  /bin/umount /proc
  /bin/echo "On peut normalement monter /dev/md0 (majeur 9, mineur 0) a la racine"
  exit
  --------------- fin de mon.linuxrc ----------------------------------

  ----------- extrait de /etc/rc.d/rc.6 suit -----------------
    # arreter la swap, puis demonter les systemes de fichiers locaux
    echo "Extinction de la swap."
    swapoff -a
    echo "Demontage des systemes de fichiers locaux."
    umount -a -tnonfs
    # Ne pas remonter les volumes UMSDOS racine :
    if [ ! "`mount | head -1 | cut -d ' ' -f 5`" = "umsdos" ]; then
      mount -n -o remount,ro /
    fi

    # Sauvegarder l'etat RAID
    echo "Sauvegarde de l'etat RAID"
    /bin/mount -n /dev/sda2 /start -t ext2
    touch /start/root.raid.ok
    /bin/umount -n /start

  -------------- fin de l'extrait de rc.6 ------------------------

  ------------------ une partie de mon.mkdisk suit ----------------------
  #
  #  maintenant que le systeme de fichiers est pret a etre rempli, nous
  #  devons obtenir quelques repertoires importants. J'ai eu des
  #  problemes sans fin jusqu'a ce que je cree un fichier mtab tout
  #  neuf. Dans mon cas, il est pratique de recopier /etc/mdtab, de
  #  cette maniere je peux activer md avec un simple "/sbin/mdadd -ar"
  #  dans linuxrc.
  #
  cp -a $ROOT/etc $MOUNTPNT 2>cp.stderr 1>cp.stdout
  rm -rf $MOUNTPNT/etc/mtab
  rm -rf $MOUNTPNT/etc/ppp*
  rm -rf $MOUNTPNT/etc/termcap
  rm -rf $MOUNTPNT/etc/sendmail*
  rm -rf $MOUNTPNT/etc/rc.d
  rm -rf $MOUNTPNT/etc/dos*
  cp -a $ROOT/sbin $ROOT/dev $ROOT/lib $ROOT/bin $MOUNTPNT 2>>cp.stderr
  1>>cp.stdout
  # _____________________________________________________________________
  #  RAID: aura besoin de mkraid et ckraid
  cp -a $ROOT/usr/sbin/mkraid $ROOT/usr/sbin/ckraid $MOUNTPNT/sbin
  2>>cp.stderr 1>>cp.stdout
  #
  ---------------------------------------------------------------------
  #  il semble qu'init ne voudra pas jouer sans utmp. on peut probablement
  #  reduire ceci de beaucoup. aucune idee de ce que le vrai bug etait 8-).
  #
  mkdir $MOUNTPNT/var $MOUNTPNT/var/log $MOUNTPNT/var/run $MOUNTPNT/initrd
  touch $MOUNTPNT/var/run/utmp $MOUNTPNT/etc/mtab
  chmod a+r $MOUNTPNT/var/run/utmp $MOUNTPNT/etc/mtab
  ln -s /var/run/utmp $MOUNTPNT/var/log/utmp
  ln -s /var/log/utmp $MOUNTPNT/etc/utmp
  ls -lstrd $MOUNTPNT/etc/utmp $MOUNTPNT/var/log/utmp $MOUNTPNT/var/run/utmp
  #
  #  puisque je voulais changer le point de montage, j'avais besoin de
  #  ceci bien que je suppose que j'aurais pu faire un "mkdir /proc"
  #  dans linuxrc.
  #
  mkdir $MOUNTPNT/proc
  chmod 555 $MOUNTPNT/proc
  #
  #  ------------------------------------------------------
  #  nous monterons le vrai peripherique de demarrage sur /start de
  #  maniere temporaire pour verifier l'etat du RAID racine sauve au
  #  moment de l'extinction
  #
  mkdir $MOUNTPNT/start
  #  -------------------------------------------------------
  #
  #  besoin de linuxrc (c'est, apres tout, le but de l'exercice).
  #
  if [ -x ./my.linuxrc ]; then
    cp -a ./my.linuxrc $MOUNTPNT/linuxrc
    chmod 777 $MOUNTPNT/linuxrc
  else
     ln -s /bin/sh $MOUNTPNT/linuxrc
  fi
  #
  ----------------- fin de la partie de mon.mkdisk -----------------

  88..  AAnnnneexxee BB.. -- ffiicchhiieerr rrcc..00 -- rrcc..66 ccoommpplleett

  #! /bin/sh
  #
  # rc.6          Ce fichier est execute par init quand il passe au
  #               runlevel (niveau d'execution) 0 (halt) ou runlevel 6
  #               (redemarrage). Il tue tous les processus, demonte les
  #               systemes de fichiers et soit stoppe soit redemarre.
  #
  # Version:      @(#)/etc/rc.d/rc.6      1.50    1994-01-15
  #
  # Author:       Miquel van Smoorenburg <miquels@drinkel.nl.mugnet.org>
  # Modified by:  Patrick J. Volkerding, <volkerdi@ftp.cdrom.com>
  # Modified by:  Michael A. Robinton, <michael@bzs.org> for RAID shutdown

    # Positionner le chemin.
    PATH=/sbin:/etc:/bin:/usr/bin

    # Mettre en mode saut de ligne pour eviter l'effet d'escalier.
    stty onlcr

    echo "Lancement du script d'extinction $0:"

    # Trouver comment nous sommes appeles.
    case "$0" in
          *0)
                  message="Le systeme est stoppe."
                  command="halt"
                  ;;
          *6)
                  message="Redemarrage."
                  command=reboot
                  ;;
          *)
                  echo "$0: veuillez m'appeler en tant que \"rc.0\" or \"rc.6\" !"
                  exit 1
                  ;;
    esac

    # Tuer tous les processus.
    # INIT est sense s'occuper entierement de tout ceci, mais il n'a pas
    # toujours fonctionne correctement sans cette seconde passe de
    # tuerie de processus. Puisqu'INIT a deja averti les utilisateurs
    # que les processus etaient tues, nous eviterons d'afficher cette
    # information cette fois-ci.
    if [ "$1" != "fast" ]; then # shutdown n'a pas encore tue tous les processus
      killall5 -15
      killall5 -9
    fi

    # Essayer d'arreter les quotas et la comptabilite.
    if [ -x /usr/sbin/quotaoff ]
    then
          echo "Arret des quotas."
          /usr/sbin/quotaoff -a
    fi
    if [ -x /sbin/accton ]
    then
          echo "Arret de la comptabilite."
          /sbin/accton
    fi

    # Avant de demonter les systemes de fichiers ecrire un
    # enregistrement reboot ou halt dans wtmp.
    $command -w

    # Sauvegarde de l'heure locale
    [ -e /usr/lib/zoneinfo/localtime ] && cp /usr/lib/zoneinfo/localtime /etc
    # Demontage asynchrone de tout systeme de fichiers distant
    echo "Demontage des systemes de fichiers distants."
    umount -a -tnfs &

    # vous devez avoir lance
    # 'cat /proc/mdstat | grep md0 > {your boot vol}/linux/raidgood.ref'
    # avant que linuxrc s'execute proprement avec cette information
    RAIDSTATUS=`/bin/cat /proc/mdstat | /usr/bin/grep md0 # capture raid status`

    # Arret de la swap, puis demontage des systemes de fichiers locaux.
    # effacement de mdtab par la meme occasion
    echo "Arret de la swap."
    swapoff -a
    echo "Demontage des systemes de fichiers locaux."
    umount -a -tnonfs

    # Ne pas remonter les volumes UMSDOS racine :
    if [ ! "`mount | head -1 | cut -d ' ' -f 5`" = "umsdos" ]; then
      mount -n -o remount,ro /
    fi

    # le peripherique racine reste monte
    # monter les systemes de fichiers DOS en lecture/ecriture
    echo "Ecriture des drapeaux RAID de demarrage en lecture seule."
    mount -n /dosa
    mount -n /dosc
    # creation du drapeau RAID monte en lecture seule en double
    # contenant l'etat a l'extinction de la matrice RAID
    echo ${RAIDSTATUS} > /dosa/linux/raidstat.ro
    echo ${RAIDSTATUS} > /dosc/linux/raidstat.ro

    umount -n /dosa
    umount -n /dosc

    # Arreter toutes les matrices RAID (sauf la racine)
    echo "Arret du RAID"
    mdstop -a

    # Voir si c'est une situation de coupure de courant.
    if [ -f /etc/power_is_failing ]; then
      echo "Extinction de l'UPS, a+."
      /sbin/powerd -q
      exit 1
    fi

    # Maintenant arret ou redemarrage.
    echo "$message"
    [ ! -f /etc/fastboot ] && echo "Au prochain demarrage fsck sera FORCE."
    $command -f

