Petit guide Boot + Root + Raid + Lilo

Version française du petit guide Raid logiciel mini-HOWTO

Michael Robinton, Michael@BizSystems.com

v1.04, 20 juillet 2000
Ce document permet la mise en place d'un système de fichiers raid en utilisant raidtools 0.90 pour obtenir un raid amorçable monté sur la racine en utilisant un lilo standard. La conversion d'un disque conventionnel vers un raid1 ou un raid5 sans perdre les données présentes sur le disque est aussi traitée.

1. Introduction

1.1 Remerciements

Les sources d'information ci-dessous ont été écrites par Harald Nordgård-Hansen < hnh@bukharin.hiof.no> et on été postées à la liste de discussion sur le raid dans un fichier lilo.conf commenté par Martin Bene < mb@sime.com>. Merci de leur contribution. J'ai essayé de mettre ces informations et le bénéfique travail de plusieurs autres personnes qui ont contribué à la liste de discussion sur le raid et le projet raid sous linux sous forme de recettes de cuisine, en incluant différents exemples de systèmes mis en place afin de rendre le raid amorçable facile à utiliser et à comprendre. Une section traite de la conversion d'un disque seul standard en un disque raid. À mon humble avis, la clé permettant la conversion est la compréhension du raid amorçable.

1.2 Bugs

Oui, je suis sûr qu'il y en a. Si vous êtes assez bons pour les signaler, je corrigerai le document. ;-)

1.3 Notice sur le copyright

Ce document a été écrit par Michael Robinton Michael@BizSystems.com, et est diffusé sous une licence copyleft GNU.

Permission d'utiliser, de copier, de distribuer ce document pour tout usage, pourvu que le nom de l'auteur, de l'éditeur et ce paragraphe apparaissent dans toutes les copies et documents de soutien ; et qu'une version non modifiée de ce document soit librement disponible. Ce document est distribué dans le but de fournir une aide, mais SANS AUCUNE GARANTIE, ni expresse, ni implicite. Malgré tous les efforts de vérification de l'information diffusée dans ce document, les auteur, éditeurs, responsables de maintenance et traducteurs n'assument aucune responsabilité concernant toutes les erreurs et tous les dommages, directs ou indirects, découlant de l'utilisation de l'information fournie dans ce document.

Permission to use, copy, distribute this document for any purpose is hereby granted, provided that the author's / editor's name and this notice appear in all copies and/or supporting documents; and that an unmodified version of this document is made freely available. This document is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, either expressed or implied. While every effort has been taken to ensure the accuracy of the information documented herein, the author / editor / maintainer assumes NO RESPONSIBILITY for any errors, or for any damages, direct or consequential, as a result of the use of the information documented herein.

2. Ce dont vous avez besoin AVANT TOUTE CHOSE

Les programmes dont vous allez avoir besoin et la documentation qui répondra à la majeure partie des problèmes de configuration et d'utilisation d'un raid sont listés ci-dessous. Ayez l'obligeance de les lire attentivement.

2.1 Logiciels requis

Il est préférable d'utiliser les versions les plus récentes de ces programmes.

2.2 Où se procurer une version à jour de ce document ?

Cliquez ici pour voir la dernière version de l'auteur de ce document. Corrections et suggestions sont les bienvenues!

Boot Root Raid + LILO HOWTO

Disponible au format LaTeX (donc DVI et PostScript), texte brut, et HTML.

http://www.linuxdoc.org/HOWTO/Boot+Root+Raid+LILO.html
Disponible en SGML et HTML.
ftp.bizsystems.net/pub/raid/

2.3 Documentation -- Lectures recommandées

Si vous prévoyez d'utiliser un raid 1 ou 5 par-dessus un raid 0 veuillez lire :

/usr/src/linux/Documentation/initrd.txt

ainsi que la documentation, et les pages de manuel fournies avec le package raidtools.

et... Software-RAID-HOWTO.html

2.4 Ressources sur le RAID

Adresses de listes de diffusion :

3. Raid amorçable

Je ne vais pas traiter les bases de l'installation d'un raid 0, 1 ou 5 sous Linux, ceci a déjà été traité ailleurs. Le problème traité ici est la mise en place sur une racine amorçable avec un LILO standard. La documentation fournie avec les sources LILO (pas les pages de manuel) et avec les outils raidtools-0.90, couvrent respectivement les détails du boot et des paramètres généraux de boot sur un raid.

Deux scénarios sont envisagés ici. La mise en place d'un raid amorçable et la conversion d'un système de fichier non RAID en raid amorçable sans perte de données

3.1 Démarrage d'un RAID 1 avec un LILO standard

Pour rendre les informations de démarrage redondantes et faciles à maintenir, préparez un petit raid 1 et montez-le sous le répertoire /boot de votre disque système. LILO ne connaît pas les périphériques 0x9?? et ne peut pas trouver les informations au démarrage car le sous-système raid n'est pas encore actif. L'astuce est que l'on peut donner à LILO les informations sur la géométrie des disques, et, grâce à cela, LILO peut déterminer la position des informations dont il a besoin pour charger le noyau, même si celles-ci sont sur la partition raid 1. Cela vient du fait que la partition raid 1 a pour seule différence avec une partition standard le super-bloc raid situé en fin de partition. Le raid amorçable doit se situer sur les 1024 premiers mega-octets du disque. En théorie, le début d'une partition raid peut se situer n'importe où dans les 1024 Mo, mais, en pratique, je n'ai pas pu le vérifier dans la mesure où cela fonctionnait seulement lorsque le raid commençait sur le premier bloc du disque. Ceci étant probablement dû à une erreur de ma part, mais il n'était pas opportun d'aller plus loin sur le moment. J'ai ensuite simplement configuré mon système avec le raid amorçable comme première partition. Je dispose d'un raid à la racine avec le raid 1 amorçable monté sous /boot avec des systèmes configurés comme suit : RAID 1, RAID 5, RAID 10 & RAID 1-10 ( 1 miroir + 1 raid0). Les disques n'ayant pas la même géométrie, la configuration de lilo n'est pas évidente. Le dernier se voit attribuer une paire de fichiers lilo très spécifique car tous les disques ont des géométries différentes, cependant, les principes sont identiques pour le processus de lancement initial. Les montages des racines RAID S 10 et RAID S 1-10 exigent l'utilisation d'initrd pour monter la racine après le chargement du noyau. Voyez les annexes pour le détail des fichiers de configuration pour tous ces exemples de systèmes.

Un ficher de configuration de LILO peut ressembler à ce qui suit :

//# lilo.conf - suppose un disque inférieur à 1024 Mo
        boot = /dev/hda
        delay = 40               # pas nécessaire, mais bien utile
        vga = normal             # pas obligatoire
        image = /bzImage
        root = /dev/hda1
        read-only
        label = Linux

Un fichier de configuration de LILO pour un raid peut ressembler à ce qui suit :

# lilo.conf.hda - disque maître sur le contrôleur primaire 
        disk=/dev/md0
        bios=0x80
        sectors=63
        heads=16
        cylinders=39770
        partition=/dev/md1
        start=63
        boot=/dev/hda
        map=/boot/map
        install=/boot/boot.b
        image=/boot/bzImage
        root=/dev/md0
        read-only
        label=LinuxRaid

# ---------------------

# lilo.conf.hdc - disque maître sur le contrôleur secondaire 
        disk=/dev/md0
        bios=0x80                # voir la note plus bas
        sectors=63
        heads=16
        cylinders=39770
        partition=/dev/md1
        start=63
        boot=/dev/hdc            # ceci est l'autre disque
        map=/boot/map
        install=/boot/boot.b
        image=/boot/bzImage
        root=/dev/md0
        read-only
        label=LinuxRaid

# BIOS=line -- si votre BIOS est assez bien pensé (la plupart ne le sont pas) pour détecter que le premier disque est absent ou n'a pas démarré et démarre sur le second disque, ensuite, bios=81 est l'entrée appropriée ici. Ceci est plus courant avec les BIOS SCSI qu'avec les BIOS IDE. J'envisage simplement de replacer le disque de manière à ce qu'il remplace le défunt lecteur C: au cas où il viendrait à tomber en panne au démarrage.

Vous pouvez obtenir les information sur le disque grâce à fdisk avec la commande :

fdisk -ul (petit L)
fdisk -ul /dev/hda

Disk /dev/hda: 16 heads, 63 sectors, 39770 cylinders
Units = sectors of 1 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1            63     33263     16600+  fd  Linux raid autodetect
/dev/hda2         33264    443519    205128   82  Linux swap
/dev/hda3        443520  40088159  19822320   fd  Linux raid autodetect

* notez l'indication du DÉBUT de chaque partition

3.2 Explications détaillées de lilo.conf pour le démarrage sur un raid

Le fichier lilo.conf pour raid ci-dessous, est commenté en détails pour chaque entrée.

# lilo.conf.hda - disque maître sur le contrôleur primaire
#       La localisation du point de montage /boot qui va être 
#       décrit ci-dessous comme contenant le noyau, la carte, et cætera.
#       notez que CE N'EST PAS la partition actuelle contenant l'image et
#       les informations de démarrage, mais le disque qui contient ce répertoire
#       Dans cet exemple, /dev/md1 est monté sous /dev/md0/boot
     disk=/dev/md0

#       Indique à LILO quel périphérique du BIOS utiliser pour amorcer le système, par ex. le disque C:
     bios=0x80

#       indique à LILO la géométrie du disque
#       c'est habituellement, mais pas toujours la géométrie
#       logique. Vérifiez le système de fichier /proc ou regardez
#       le message du noyau lors de la détection du disque
#       
     sectors=63
     heads=16
     cylinders=39770

#       Il existe une entrée permettant de duper LILO afin
#       qu'il reconnaisse l'ensemble raid 0x9?? et qu'il trouve
#       le DÉBUT du secteur d'amorçage. Pour voir ce à quoi
#       cette entrée sert réellement, lisez la documentation
#       incluse avec les sources de LILO.
#       Ce paramètre doit être différent de l'entrée disk= 
#       ci-dessus. Il peut correspondre à un autre périphérique mdx,
#       utilisé ou non et il ne doit pas forcément être celui qui contient
#       le répertoire /boot
#       
     partition=/dev/md1

#       Le premier secteur de la partition contenant les informations de démarrage
#       Le disque sur lequel LILO va écrire les informations de démarrage
     boot=/dev/hda

#       Logiquement là où LILO va mettre les informations de démarrage
     map=/boot/map
     install=/boot/boot.b

#       Logiquement là ou LILO va trouver l'image du noyau
     image=/boot/bzImage

#       Après cela, indications standard
#       la racine peut être un raid 1/4/5
     root=/dev/md0
     read-only
     label=LinuxRaid

4. Passage d'un système non RAID à un raid 1/4/5

Le passage à partir d'un système non raid est une opération relativement facile se composant des quelques étapes ci-dessous. La description est destinée aux systèmes avec une partition de boot, une partition racine et une partition d'échange

ancien disque dans le système existant :

    /dev/hda1     boot, peut être dos+loadlin ou lilo
    /dev/hda2     root
    /dev/hda3     swap
Nous allons ajouter un disque supplémentaire et convertir tout le système en raid 1. Vous pouvez aisément ajouter plusieurs disques et faire un raid 5 en utilisant le même protocole.

4.1 Étape 1 - Préparation d'un nouveau noyau

Téléchargez un noyau propre, raidtools-0.90 (ou une version plus récente), et le correctif du noyau 0.90 pour le raid.

Compilez et installez raidtools, et lisez la documentation.

Compilez et installez le noyau de manière à ce qu'il supporte tous les types (0/1/4/5 ?) de raid que vous allez utiliser. Assurez-vous de bien spécifier l'auto-démarrage des périphériques raid lors de la configuration du noyau. Vérifiez si le noyau démarre bien et examinez /proc/mdstat pour voir si les types de raid que vous allez utiliser sont bien pris en charge par le nouveau noyau

4.2 Étape 2 - Mise en place de raidtab pour le nouveau raid

Le nouveau disque va être ajouté sur un contrôleur IDE en périphérique maître, il devient ainsi /dev/hdc

    /dev/hdc1     16 Mo -- largement suffisant pour plusieurs images de noyau
    /dev/hdc2     presque tout le disque
    /dev/hdc3     un peu plus d'espace pour la partition d'échange, si vous en avez
                  besoin, sinon, ajoutez le à hdc2

changez le type de partition pour /dev/hdc1 et /dev/hdc2 en "fd" pour auto-démarrer le raid.

En utilisant le paramètre failed-disk, créez un raidtab pour la configuration raid désirée. Le disque endommagé doit être la dernière entrée dans la table.

# exemple de raidtab
# md0 est le noeud racine
raiddev                 /dev/md0
raid-level              1
nr-raid-disks           2
chunk-size              32
# disques de secours pour la reconstruction à chaud
nr-spare-disks          0
persistent-superblock   1
device                  /dev/hdc2
raid-disk               0
# ceci est notre vieux disque, marqué comme non opérationnel pour l'instant
device                  /dev/hda2
failed-disk             1

# md1 est le répertoire /boot
raiddev                 /dev/md1
raid-level              1
nr-raid-disks           2
chunk-size              32
# disques de secours pour la reconstruction à chaud
nr-spare-disks          0
persistent-superblock   1
device                  /dev/hdc1
raid-disk               0
# le disque hda1 est marqué comme défaillant
device                  /dev/hda1
failed-disk               1

4.3 Étape 3 - Créer, formater et paramétrer un raid

Créer le noeud md avec les commandes :

    mkraid /dev/md0
    mkraid /dev/md1

Les périphériques raid doivent être créés et lancés. L'examen de /proc/mdstat montre les particularités du raid dans le noyau et les périphériques raid lancés.

Formatez les partitions d'amorçage et la racine avec :

    mke2fs /dev/md0
    mke2fs /dev/md1
Montez la nouvelle partition racine à un endroit quelconque, puis créez le répertoire /boot, et montez la partition d'amorçage.

    mount /dev/md0 /mnt
    mkdir /mnt/boot
    mount /dev/md1 /mnt/boot

4.4 Étape 4 - Copie du système d'exploitation courant sur le nouveau périphérique raid

Quelques temps après...

    cd /
    # préparez un script pour faire ce qui suit
    cp -a /bin /mnt
    cp -a /dev /mnt
    cp -a /etc /mnt
    cp -a (tous les répertoires sauf /mnt, /proc, et les montages NFS) /mnt

Cette opération peut s'avérer ardue si vous avez monté ou lié d'autres disques sous votre racine. L'exemple ci-dessous prend en compte un système très simple. Vous serez peut-être amené à modifier la procédure quelque part.

4.5 Étape 5 - Testez votre nouveau RAID

Créez une disquette de démarrage et un rdev sur le noyau.

    dd if=kernal.image of=/dev/fd0 bs=2k
    rdev /dev/fd0 /dev/md0
    rdev -r /dev/fd0 0
    rdev -R /dev/fd0 1

Modifiez le fichier fstab sur la partition raid pour affecter les nouveaux points de montage comme suit :

  /dev/md0        /       ext2    defaults        1 1
  /dev/md1        /boot   ext2    defaults        1 1

Démontez les partitions raid et amorcez à partir du nouveau système de fichiers pour vérifier son fonctionnement

    umount /mnt/boot
    umount /mnt
    raidstop /dev/md0
    raidstop /dev/md1
    shutdown -r now

Votre système raid devrait maintenant être opérationnel en mode dégradé avec une disquette de démarrage. Vérifiez bien que vous avez tout transféré sur le nouveau raid car, si vous ratez votre coup ici, sans sauvegarde, VOUS ÊTES MORT !

Si quelque chose ne fonctionne pas, redémarrez votre ancien système, revenez en arrière et recommencez jusqu'à ce que cette étape soit réussie, pour voir ce qui coince.

4.6 Étape 6 - Intégration de l'ancien disque dans le raid

L'étape précédente étant réussie, votre raid est maintenant opérationnel, mais, il n'est pas redondant. On doit maintenant re-partitionner le ou les vieux disques pour les ajouter au raid. Rappelez-vous que si les géométries ne sont pas les mêmes, la taille de la partition sur l'ancien disque doit être au moins égale à la taille du raid sinon ils ne peuvent pas être ajoutés.

Re-partitionnez l'ancien disque. Exemple :

    /dev/hda1     same or larger than /dev/hdc1
    /dev/hda2     same or larger than /dev/hdc2
    /dev/hda3     une petite place pour un swap ou je ne sais quoi...

Changez le paramètre failed-disk dans le fichier raidtab en raid-disk et insérez à chaud les nouvelles partitions (vieux disque) au raid.

    raidhotadd /dev/md1 /dev/hda1
    raidhotadd /dev/md0 /dev/hda2

L'examen de /proc/mdstat devrait nous indiquer un (ou plusieurs) périphériques raid en reconstruisant les données pour les nouvelles partitions. Après une minute ou deux... ou plus, le raid devrait être totalement synchronisé (cela peut prendre pas mal de temps pour une grande partition).

En utilisant la procédure des premières sections de ce document, préparez un raid amorçable sur la nouvelle paire de disques. Conservez le démarrage par disquettes tout pendant la mise au point et le test de cette dernière étape.

5. Annexe A - Exemple de fichier raidtab

Exemple de RAID 1 décrit dans la première section de ce document

 df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/md0              19510780   1763188  16756484  10% /
/dev/md1                 15860       984     14051   7% /boot

# --------------------------

 fdisk -ul /dev/hda

Disk /dev/hda: 16 heads, 63 sectors, 39770 cylinders
Units = sectors of 1 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1            63     33263     16600+  fd  Linux raid autodetect
/dev/hda2         33264    443519    205128   83  Linux native
/dev/hda3        443520  40088159  19822320   fd  Linux raid autodetect

# --------------------------

 fdisk -ul /dev/hdc

Disk /dev/hdc: 16 heads, 63 sectors, 39770 cylinders
Units = sectors of 1 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hdc1            63     33263     16600+  fd  Linux raid autodetect
/dev/hdc2         33264    443519    205128   82  Linux swap
/dev/hdc3        443520  40088159  19822320   fd  Linux raid autodetect

# --------------------------

# md0 est le premier ensemble de disques, d'environ 20 Go
raiddev                 /dev/md0
raid-level              1
nr-raid-disks           2
chunk-size              32
# Disque disponible pour la reconstruction à chaud
nr-spare-disks          0
persistent-superblock   1
device                  /dev/hda3
raid-disk               0
device                  /dev/hdc3
raid-disk               1

# md1 est l'ensemble de disques d'amorçage (/boot), d'une taille d'environ 16 Mo
raiddev                 /dev/md1
raid-level              1
nr-raid-disks           2
chunk-size              32
Disque pour la reconstruction à chaud
nr-spare-disks          0
persistent-superblock   1
device                  /dev/hda1
raid-disk               0
device                  /dev/hdc1
raid-disk               1

# --------------------------

# SECTION GLOBAL 
# périphérique contenant /boot
disk=/dev/md0
# geometry
  bios=0x80
  sectors=63
  heads=16
  cylinders=39770
# dummy
  partition=/dev/md1
# début du disque ci-dessus
  start=63

boot=/dev/hda
map=/boot/map
install=/boot/boot.b

image=/boot/bzImage
root=/dev/md0
label=LinuxRaid
read-only

# -------------------------

# SECTION GLOBAL 
# périphérique contenant /boot
disk=/dev/md0
# geometry
  bios=0x80
  sectors=63
  heads=16
  cylinders=39770
# dummy
  partition=/dev/md1
# début du disque ci-dessus
  start=63

boot=/dev/hdc
map=/boot/map
install=/boot/boot.b

image=/boot/bzImage
root=/dev/md0
label=LinuxRaid
read-only

6. Annexe B - Mise en oeuvre RAID 5 SCSI de référence

4 disques SCSI RAID 5

 df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/md0              11753770   2146076   9000678  19% /
/dev/md1                 15739       885     14042   6% /boot

# --------------------------

 fdisk -ul /dev/sda

Disk /dev/sda: 64 heads, 32 sectors, 4095 cylinders
Units = sectors of 1 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sda1            32     32767     16368   fd  Linux raid autodetect
/dev/sda2         32768    292863    130048    5  Extended
/dev/sda3        292864   8386559   4046848   fd  Linux raid autodetect
/dev/sda5         32800    260095    113648   82  Linux swap
/dev/sda6        260128    292863     16368   83  Linux native - test

# ------------------------

 fdisk -ul /dev/sdb

Disk /dev/sdb: 64 heads, 32 sectors, 4095 cylinders
Units = sectors of 1 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sdb1            32     32767     16368   fd  Linux raid autodetect
/dev/sdb2         32768    292863    130048    5  Extended
/dev/sdb3        292864   8386559   4046848   fd  Linux raid autodetect
/dev/sdb5         32800    260095    113648   82  Linux swap
/dev/sdb6        260128    292863     16368   83  Linux native - test

# ------------------------

# fdisk -ul /dev/sdc

Disk /dev/sdc: 64 heads, 32 sectors, 4095 cylinders
Units = sectors of 1 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sdc2            32    292863    146416    5  Extended
/dev/sdc3        292864   8386559   4046848   fd  Linux raid autodetect
/dev/sdc5            64    260095    130016   83  Linux native - development
/dev/sdc6        260128    292863     16368   83  Linux native - test

# ------------------------

 fdisk -ul /dev/sdd

Disk /dev/sdd: 64 heads, 32 sectors, 4095 cylinders
Units = sectors of 1 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sdd2            32    292863    146416    5  Extended
/dev/sdd3        292864   8386559   4046848   fd  Linux raid autodetect
/dev/sdd5            64    260095    130016   83  Linux native - development
/dev/sdd6        260128    292863     16368   83  Linux native - test

# --------------------------

# raidtab
#
raiddev /dev/md0
        raid-level      5
        nr-raid-disks   4
        persistent-superblock 1
        chunk-size      32

# Disque dédié à la reconstruction à chaud
        nr-spare-disks  0
        device          /dev/sda3
        raid-disk       0
        device          /dev/sdb3
        raid-disk       1
        device          /dev/sdc3
        raid-disk       2
        device          /dev/sdd3
        raid-disk       3

# partition de démarrage
#
raiddev /dev/md1
        raid-level      1
        nr-raid-disks   2
        persistent-superblock 1
        chunk-size      32

# Disque dédié à la reconstruction à chaud
        nr-spare-disks  0
        device          /dev/sda1
        raid-disk       0
        device          /dev/sdb1
        raid-disk       1

# --------------------------

# cat lilo.conf.sda
# SECTION GLOBALE
# Périphérique contenant /boot
disk=/dev/md0
# geometry
  bios=0x80
  sectors=32
  heads=64
  cylinders=4095
# dummy
  partition=/dev/md1
# début du disque ci-dessus
  start=32

boot=/dev/sda
map=/boot/map
install=/boot/boot.b

image=/boot/bzImage
root=/dev/md0
label=LinuxRaid
read-only

# ------------------------
# cat lilo.conf.sdb
# SECTION GLOBALE
# Périphérique contenant /boot
disk=/dev/md0
# geometry
  bios=0x80
  sectors=32
  heads=64
  cylinders=4095 
# dummy
  partition=/dev/md1
# début du disque ci-dessus
  start=32

boot=/dev/sdb
map=/boot/map
install=/boot/boot.b

image=/boot/bzImage
root=/dev/md0
label=LinuxRaid
read-only

7. Annexe C - RAID 10 IDE avec initrd

RAID 1 sur une paire de RAID 0 découpés en bandes... les disques du RAID 0 ne sont pas de la même taille, mais suffisamment proches.

/dev/md0 est la partition /boot et est auto-démarrée par le noyau 
/dev/md1 et /dev/md3 sont les deux ensembles raid 0 auto-démarré par le noyau
/dev/md2 est la partition racine et est démarrée par initrd

df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/md2                118531     76485     35925  68% /
/dev/md0                  1917      1361       457  75% /boot

# ----------------------------

 fdisk -ul /dev/hda

Disk /dev/hda: 4 heads, 46 sectors, 903 cylinders
Units = sectors of 1 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1            46      4231      2093   fd  Linux raid autodetect
/dev/hda2          4232    166151     80960   fd  Linux raid autodetect

# ----------------------------

 fdisk -ul /dev/hdb

Disk /dev/hdb: 5 heads, 17 sectors, 981 cylinders
Units = sectors of 1 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hdb1            17     83384     41684   fd  Linux raid autodetect

# ----------------------------

 fdisk -ul /dev/hdc

Disk /dev/hdc: 7 heads, 17 sectors, 1024 cylinders
Units = sectors of 1 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hdc1            17     84013     41998+  fd  Linux raid autodetect
/dev/hdc2         84014    121855     18921   82  Linux swap

# ----------------------------

 fdisk -ul /dev/hdd

Disk /dev/hdd: 4 heads, 46 sectors, 903 cylinders
Units = sectors of 1 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hdd1            46      4231      2093   fd  Linux raid autodetect
/dev/hdd2          4232    166151     80960   fd  Linux raid autodetect

# ----------------------------
                                                         
# raidtab
#
raiddev /dev/md0
        raid-level      1
        nr-raid-disks   2
        persistent-superblock   1
        chunk-size      8
        device          /dev/hda1
        raid-disk       0
        device          /dev/hdd1
        raid-disk       1

raiddev /dev/md1
        raid-level      0
        nr-raid-disks   2
        persistent-superblock   1
        chunk-size      8
        device          /dev/hdd2
        raid-disk       0
        device          /dev/hdb1
        raid-disk       1

raiddev /dev/md2
        raid-level      1
        nr-raid-disks   2
        persistent-superblock   1
        chunk-size      8
        device          /dev/md1
        raid-disk       0
        device          /dev/md3
        raid-disk       1

raiddev /dev/md3
        raid-level      0
        nr-raid-disks   2
        persistent-superblock   1
        chunk-size      8
        device          /dev/hda2
        raid-disk       0
        device          /dev/hdc1
        raid-disk       1

# ----------------------------

contenu de linuxrc

#cat linuxrc
#!/bin/sh
# ver 1.02 2-22-00
#
############# début de 'linuxrc' ###############
#
# montage du système de fichiers proc
/bin/mount /proc

# départ d'un raid 1 fait de raid 0
/bin/raidstart /dev/md2

# indique par la console ce qui se passe
/bin/cat /proc/mdstat

# Tout va bien, laissons le noyau monter /dev/md2
# Indique au noyau de considérer /dev/md2 comme la partition /root
# La valeur 0x900 est le numéro de périphérique calculé avec :
# 256 * numéro majeur de périphérique + numéro mineur de périphérique
echo "/dev/md2 monté comme racine"
echo 0x902>/proc/sys/kernel/real-root-dev

//# umount /proc to deallocate initrd device ram space
# Démonte /proc pour désallouer le disque virtuel (ramdisk) utilisé par initrd
/bin/umount /proc
exit

# ----------------------------

//contenus de initrd

./bin/ash
./bin/echo
./bin/raidstart
./bin/mount
./bin/umount
./bin/cat
./bin/sh
./dev/tty1
./dev/md0
./dev/md1
./dev/md2
./dev/md3
./dev/md4
./dev/console
./dev/hda
./dev/hda1
./dev/hda2
./dev/hda3
./dev/hdb
./dev/hdb1
./dev/hdb2
./dev/hdb3
./dev/hdc
./dev/hdc1
./dev/hdc2
./dev/hdc3
./dev/hdd
./dev/hdd1
./dev/hdd2
./dev/hdd3
./dev/initrd
./dev/ram0
./dev/ram1
./dev/ram2
./dev/ram3
./dev/ram4
./dev/ram5
./dev/ram6
./dev/ram7
./etc/raidtab
./etc/fstab
./lib/ld-2.1.2.so
./lib/ld-linux.so.1
./lib/ld-linux.so.1.9.9
./lib/ld-linux.so.2
./lib/ld.so
./lib/libc-2.1.2.so
./lib/libc.so.6
./linuxrc
./proc

8. Annexe D. - RAID 1-10 ide avec initrd

Ceci est un système fait d'un assortiment de petites choses. Le raid monté sur la racine est composé d'un RAID 1 basé sur un ensemble RAID 0 contenant des disques de toutes tailles et une partition plus large. Un examen du fichier lilo.conf vous donnera un meilleur aperçu sur la manière de raisonner sur les différents paramètres.

/dev/md0 est la partition /boot et est amorcée par le noyau
/dev/md1 est une moitié du miroir md2, amorcée automatiquement par le noyau
/dev/hda3 est l'autre moitié du miroir md2
/dev/md2 est le RAID 1 /dev/md1 + /dev/hda3, démarré par initrd

df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/md2                138381     74421     56815  57% /
/dev/md0                  2011      1360       549  71% /boot

# ----------------------------

 fdisk -ul /dev/hda

Disk /dev/hda: 8 heads, 46 sectors, 903 cylinders
Units = sectors of 1 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1            46      4415      2185   fd  Linux raid autodetect
/dev/hda2          4416     43423     19504   82  Linux swap
/dev/hda3         43424    332303    144440   83  Linux native

# ----------------------------

 fdisk -ul /dev/hdc

Disk /dev/hdc: 8 heads, 39 sectors, 762 cylinders
Units = sectors of 1 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hdc1            39      4367      2164+  fd  Linux raid autodetect
/dev/hdc2          4368     70199     32916   82  Linux swap
/dev/hdc3         70200    237743     83772   fd  Linux raid autodetect

# ----------------------------

 fdisk -ul /dev/hdd

Disk /dev/hdd: 4 heads, 39 sectors, 762 cylinders
Units = sectors of 1 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hdd1            39    118871     59416+  fd  Linux raid autodetect

# ----------------------------

# raidtab
#
raiddev /dev/md0
        raid-level      1
        nr-raid-disks   2
        persistent-superblock   1
        chunk-size      8
        device          /dev/hdc1
        raid-disk       1
        device          /dev/hda1
        raid-disk       0

raiddev /dev/md1
        raid-level      0
        nr-raid-disks   2
        persistent-superblock   1
        chunk-size      8
        device          /dev/hdc3
        raid-disk       0
        device          /dev/hdd1
        raid-disk       1

raiddev /dev/md2
        raid-level      1
        nr-raid-disks   2
        persistent-superblock   1
        chunk-size      8
        device          /dev/md1
        raid-disk       1
        device          /dev/hda3
        raid-disk       0

# ----------------------------

 cat linuxrc
#!/bin/sh
# ver 1.02 2-22-00
#
############# début de 'linuxrc' ###############
#
# montage du système de fichiers proc
/bin/mount /proc

# autostart /boot partition and raid0
# auto-démarrage de la partition /boot et du RAID 0
/bin/raidstart /dev/md2

# Renvoit sur la console ce qui se passe
/bin/cat /proc/mdstat

# Tout va bien, laissons le noyau monter /dev/md2
# On indique au noyau de monter /dev/md2 sur la racine
# La valeur 0x900 est le numéro de périphérique calculé par :
#  256 * numéro majeur de périphérique + numéro mineur de périphérique
echo "/dev/md2 monté comme racine"
echo 0x902 > /proc/sys/kernel/real-root-dev

# démontage de /proc pour désallouer le ramdisk utilisé par initrd
/bin/umount /proc
exit

# ----------------------------

contenu de initrd.gz

./bin
./bin/ash
./bin/echo
./bin/raidstart
./bin/mount
./bin/umount
./bin/cat
./bin/sh
./dev/tty1
./dev/md0
./dev/md1
./dev/md2
./dev/md3
./dev/console
./dev/hda
./dev/hda1
./dev/hda2
./dev/hda3
./dev/hdc
./dev/hdc1
./dev/hdc2
./dev/hdc3
./dev/hdd
./dev/hdd1
./dev/hdd2
./dev/hdd3
./dev/initrd
./dev/ram0
./dev/ram1
./dev/ram2
./dev/ram3
./dev/ram4
./dev/ram5
./dev/ram6
./dev/ram7
./etc/raidtab
./etc/fstab
./lib/ld-2.1.2.so
./lib/ld-linux.so.1
./lib/ld-linux.so.1.9.9
./lib/ld-linux.so.2
./lib/ld.so
./lib/libc-2.1.2.so
./lib/libc.so.6
./linuxrc
./proc

# ----------------------------

 cat lilo.conf.hda
# SECTION GLOBALE 
# périphérique contenant le répertoire /boot
disk=/dev/md2
# geométrie
  bios=0x80
  cylinders=903
  heads=8
  sectors=46
# géométrie pour le 2e disque
# le bios doit être le même car il doit être transféré sur hda
#  cylinders=762
#  heads=8
#  sectors=39

# dummy
  partition=/dev/md0
# début du périphérique « disque » ci-dessus
  start=46
# second périphérique
#  start=39

# il apparaît quelques problèmes avec le noyau 2.2.14
# pour l'attribution de la bonne IRQ
  append = "ide1=0x170,0x376,12 ether=10,0x300,eth0 ether=5,0x320,eth1"

boot=/dev/hda
map=/boot/map
install=/boot/boot.b

initrd=/boot/initrd.gz

image=/boot/zImage
root=/dev/md2
label=LinuxRaid
read-only

# ----------------------------

 cat lilo.conf.hdc
# SECTION GLOBALE
# périphérique contenant le répertoire /boot
disk=/dev/md2
# geometry
  bios=0x80
#  cylinders=903
#  heads=8
#  sectors=46
# géométrie du deuxième disque
# le bios doit être le même car il doit être transféré sur hda
  cylinders=762
  heads=8
  sectors=39

# dummy
  partition=/dev/md0
# début du périphérique "disk" ci-dessus
#  start=46
# deuxième périphérique
  start=39

# il peut y avoir quelques problèmes avec le noyau 2.2.14 pour l'attribution de la bonne IRQ
  append = "ide1=0x170,0x376,12 ether=10,0x300,eth0 ether=5,0x320,eth1"

boot=/dev/hdc
map=/boot/map
install=/boot/boot.b

initrd=/boot/initrd.gz

image=/boot/zImage
root=/dev/md2
label=LinuxRaid
read-only

9. Traduction

Cette traduction a été réalisée par Julien Savary et relue par Jean-Paul Aubry .

La publication de ce document a été préparée par Jean-Philippe Guérard .