Petit guide Boot + Root + Raid + Lilo Version française du petit guide Raid logiciel mini-HOWTO Michael Robinton, [1]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 < [2]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 < [3]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 [4]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. * un noyau supportant le raid, initrd J'ai utilisé [5]linux-2.2.14 en provenance de www.kernel.org * [6]ftp://ftp.kernel.org/pub/linux/daemons/raid/alpha/ les outils et le correctifs les plus récents compatibles avec les raid 1, 4 et 5 modernes J'ai utilisé [7]http://people.redhat.com/mingo/raid-patches/ 2.2 Où se procurer une version à jour de ce document ? Cliquez ici pour voir la [8]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. [9]http://www.linuxdoc.org/HOWTO/Boot+Root+Raid+LILO.html Disponible en SGML et HTML. [10]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... [11]Software-RAID-HOWTO.html 2.4 Ressources sur le RAID Adresses de listes de diffusion : * Celle-ci paraît tranquille : [12]majordomo@nuclecu.unam.mx envoyer un message s'inscrire sur raiddev envoyer un message sur : [13]raiddev@nuclecu.unam.mx * Développement Raid : [14]majordomo@vger.rutgers.edu envoyer un message s'inscrire sur linux-raid envoyez un courrier à : [15]linux-raid@vger.rutgers.edu (il semble que ce soit la liste la plus active) 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 . References Visible links 1. mailto:michael@bizsystems.com 2. mailto:hnh@bukharin.hiof.no 3. mailto:mb@sime.com 4. mailto:michael@bizsystems.com 5. ftp://ftp.kernel.org/pub/linux/kernel/v2.2/ 6. ftp://ftp.kernel.org/pub/linux/daemons/raid/alpha/ 7. http://people.redhat.com/mingo/raid-patches/raid-2.2.14-B1 8. ftp://ftp.bizsystems.net/pub/raid/Boot+Root+Raid+LILO.html 9. http://www.linuxdoc.org/HOWTO/Boot+Root+Raid+LILO.html 10. ftp://ftp.bizsystems.net/pub/raid/ 11. http://metalab.unc.edu/mdw/HOWTO/Software-RAID-HOWTO.html 12. mailto:majordomo@nuclecu.unam.mx 13. mailto:raiddev@nuclecu.unam.mx 14. mailto:majordomo@vger.rutgers.edu 15. mailto:linux-raid@vger.rutgers.edu