Journal RAID + boot + LILO : mini-mini HOWTO

Posté par  .
Étiquettes :
0
27
mai
2004
/ en RAID logiciel m'a toujours tenté mais les howto existants restent la plupart du temps antédiluviens (noyaux 2.2, raidtools première génération) ou incomplets.

Après avoir récupéré deux disques (IDE, respectivement 2,5 et 10 Go), j'ai enfin pris le temps d'essayer...
Sachant que le but est de mettre ce RAID logiciel sur de futurs serveurs, je suis parti sur une base Debian Woody (et merci au LiveCD de knoppix 3.4 du 17/05/2004 au passage pour réparer mes erreurs LILO ;o)

Installation de base
J'ai partitionner les deux disques de manière identique, hda et hdd (mais il est préférable de faire hda + hdc pour de l'IDE) :
hd[ad]1 ... / ... 128 Mo (amorçable)
hd[ad]2 ... /boot ... 20 Mo
hd[ad]3 ... /usr ... 1024 Mo
hd[ad]5 ... /var ... 1024 Mo
hd[ad]6 ... /tmp ... 320 Mo
...

En vrac :
° Faute de place /home, swap et /usr/local (pour compil') ne sont que sur hda (le plus gros disque)
° Le type des partitions sur hdd est FD (raid autodetect)
° Les tailles de partitions sont limitées pour les besoins de ce test (/ et /tmp sont un peu justes à mon goût)

L'installation de base est réalisée sur hda, bootloader LILO dans le MBR de ce disque.
Une fois l'installation Woody 3.0r0 terminée, le système est mis à jour en 3.0r2 + stable-proposed-updates (pour le noyau 2.4.24-k7-2 avec un Duron).

Création des périphériques RAID
~ installation de du package raidtools2 et dépendances
le fichier /etc/raidtab a cette allure :
raiddev /dev/md[0-4]
raid-level 1
nr-raid-disks 2
nr-spare-disks 1
persistent-superblock 1
chunk-size 16
device /dev/hdd[1-6]
raid-disk 0
device /dev/hda[1-6]
failed-disk 1

Et il suffit de créer les devices avec :
# mkraid /dev/md[0-4]

de créer le système de fichiers :
# mkfs -t ext3 /dev/md[0-4]

et de les monter :
# mount /dev/md0 /mnt
# mount /dev/md1 /mnt/boot
# mount /dev/md2 /mnt/usr
# mount /dev/md3 /mnt/var
# mount /dev/md4 /mnt/tmp

Configuration de mkinitrd
~installation de initrd-tools et dépendances
Le noyau étant standard Debian (sans recompilation), j'ai recréé une image initrd pour inclure le support du RAID logiciel en complétant /etc/mkinitrd
- Ajout dans ./modules de ext3, raid1 et md.
- la variable ROOT=probe par défaut dans ./mkinitrd.conf

puis en exécutant :
# mkinitrd -o /boot/initrd.raid.2.4.24.img -r /dev/md0
La commande inclut automatiquement le nécessaire pour monter / sur du RAID avec -r /dev/md0

Il suffit de vérifier ensuite l'image en la montant :
# mkdir /mnt/loop
# mount -t cramfs -o loop /boot/initrd.raid.2.4.24.img /mnt/loop
puis en s'assurant que le démarrage du RAID est effectif dans /mnt/loop/script.

Remarque: il doit y avoir une possibilité de compléter le linuxrc avec ses propres procédures pour les inclure dans l'image mais je n'ai pas retrouvé comment...

Création du système sur /dev/md*
Il suffit de recopier le système existant :
# for mnt in '/' '/boot' '/usr' '/var' '/tmp'
# do
# ... cd $mnt
# ... find . -xdev | cpio -pm /mnt${mnt}/
# done
et un df -k pour vérifier que l'occupation des partitions homologues (hda1 et md0, hda2 et md1, ...) est cohérente.

Reconfiguration du bootloader (LILO)
A partir de là, on bosse sur hdd (alias "md") pour pouvoir rebooter sur hda au besoin avec un minimum de modifications.
Il faut éditer /mnt/md0/etc/lilo.conf et y mettre à jour :
° root = /dev/md0
° default = linuxRAID
° une nouvelle cible :

image = /vmlinuz # qui pointe sur /boot/vmlinuz.2.4.24-k7-2
label = linuxRAID
initrd = /initrd.raid.img
vga = 792

ainsi que créer le lien-ki-va-bien et relancer LILO :
# ln -s /boot/initrd.raid.2.4.24.img /mnt/md0/initrd.raid.img
# lilo -v -r /mnt/md0
LILO dit quelques insanités (map file, not the same disk, bla-bla) mais ça ne porte pas à conséquences.

Complément d'installation
On s'assure de disposer d'un LiveCD, on reboot et on croise les doigts...
Le système devrait démarrer en chargeant la cible linuxRAID, en montant l'image initrd en mémoire puis / en read-only à partir de /dev/md0... pour arriver à une belle console

S'assurer que tout fonctionne comme prévu avec :
# mount ou df

Si c'est le cas, on ajoute les partitions hda* au RAID logiciel :
# raidhotadd /dev/md[0-4] /dev/hda[1-3,5]

et il reste à modifier /etc/raidtab en remplaçant les entrées :
° failed-disk 1
par :
° raid-disk 1

Dernier point, j'ai modifié le type des partitions de hda en FD (cfdisk /dev/hda -> Type -> FD et Write)

Pour finir
Par sécurité, j'ai relancé lilo avec boot=hdda et boot=hdd...
J'ai aussi eu de curieux comportements au cours de divers essais car je ne savais plus trop quel était le disque qui bootait...

Commentaires bienvenus.
Je tenterai bien la même chose avec GRUB...
  • # monter / sur du RAID

    Posté par  (site web personnel) . Évalué à 2.

    Merci pour ce "minimini howto monter / sur du RAID"

    Effectivement il n'y a pas foule d'information sur la méthode.
    Pour faire du raid soft pour du stokage (et pas pour le systeme directement) il y toujours :
    http://lea-linux.org/admin/raid.html(...)
    http://www.linuxfr-france.org.invalid/article/install/debian/rootraid/debian-(...)
    http://www.tldp.org/HOWTO/Software-RAID-HOWTO-5.html#ss5.1(...)

    Si non attention au pb avec deux disques sur une même nappe, j'ai eu l'expérience avec des performances sont minables:
    http://linuxfr.org/~karles9/12089.html(...)

    Enjoy
    Karlesnine
  • # C'est compliqué....

    Posté par  . Évalué à 1.

    Avec une distribution "normale", ça se fait les doigts d'une main dans le nez et l'autre sur la sourie.
    Le seul "truc" c'est d'avoir une petite partition normal pour grub/lilo/noyau. Sur mes disques raids, j'ai 99 % pour raid et 1 % pour /boot.

    Un noyau avec raid dedans (et non en modules chargé par initrd) est un plus. Dans ce cas le noyau détecte automatiquement la partition raid et l'active. De plus on peut passer des paramètres au raid via grub ou lilo (pas possible avec initrd). Très utile en cas de "catastrophe".

    > Je tenterai bien la même chose avec GRUB...

    C'est trivial. Il faut Grub dans une partition "normal".
    Pour grub.conf, c'est trivial aussi. C'est comme "comme d'hab" mais avec :
    kernel /vmlinuz ro root=/dev/md0.

    Ton journal est intéressant mais il fait peur :-)

    Une autre possibilité plus simple serait de faire les partitions avec knoppix ou fedora ou ... .
    Puis remplacer le noyau "standard" debian de l'installation par un noyau recompilé avec raid "dedans" (si c'est nécessaire). C'est facile à réalisé avec FC2 (ce n'est pas nécessaire pour raid dans le cas de FC2).

    Normalement ça doit rouler. Au pire il faudra faire des mknod .... /dev/md0 durant l'installation.

    Après l'installation créer un /etc/raidtab qui correspond à la partition raid montée automatiquement. C'est du cosmétique avec l'autodetection de Linux.
    • [^] # Re: C'est compliqué....

      Posté par  . Évalué à 2.

      > Une autre possibilité plus simple serait de faire les partitions avec knoppix ou fedora ou ... .

      Inutile d'installer Fedora ou .... Fais une installation classique et arrête toi après la création des partitions.
    • [^] # Re: C'est compliqué....

      Posté par  . Évalué à 2.

      Puis remplacer le noyau "standard" debian de l'installation par un noyau recompilé avec raid "dedans"
      En fait, je ne suis pas trop chaud pour cette solution car :
      - je destine le root-RAID à des serveurs de prod' et je ne me vois pas recompiler un noyau, même stable alors que l'upgrade d'un noyau "initrd" compilé est automatique et qu'il suffit de régénérer une image initrd
      - j'ai bien essayé avec un support dans le noyau mais il n'a pas booté (j'ai du faire une erreur car les modules se sont chargés mais / n'a pas été monté)

      Dans ce que tu proposes au début, je trouve un poil dommage d'avoir un système root-RAID... sans /boot lui aussi en RAID même si c'est sensiblement plus simple à mettre en place.

      Après l'installation créer un /etc/raidtab qui correspond à la partition raid montée automatiquement. C'est du cosmétique avec l'autodetection de Linux
      Pas tout à fait puisque c'est ce qui t'autorise à démarrer/arrêter le RAID en cours d'exploitation et que ça m'a permis plusieurs fois de redimensionner les partitions (sauf / bien sur ;o) devenues trop petites sans arrêter le système... Ca permet aussi de supprimer une partition de la matrice (type test en read-only d'une partition seule ou test d'erreur).

      Pense-bête : 'faut que j'essaie absolument GRUB
      • [^] # Re: C'est compliqué....

        Posté par  . Évalué à 1.

        > En fait, je ne suis pas trop chaud pour cette solution.
        > je destine le root-RAID à des serveurs de prod' et je ne me vois pas recompiler un noyau

        C'est uniquement pour l'installation. Après c'est inutile.

        > j'ai bien essayé avec un support dans le noyau mais il n'a pas booté

        J'ai déjà vu ça avec Debian. Ça m'a "saoulé" et j'ai pas insisté. Le noyau que j'avais fait n'avais pas besoin d'initrd (je fais tout le temps ça sur ma bécane perso depuis Linux 2.2).

        > Pas tout à fait puisque c'est ce qui t'autorise à démarrer/arrêter le RAID en cours d'exploitation

        En général avec deux disques je fais une grosse partition raid. Si nécessaire j'utilise les quota. Plusieurs partitions à la fois c'est vraiment pénibles, pas souple et ça apporte rien du tout en performance.

        Tu peux utiliser lsraid pour retrouver les infos nécessaire pour faire un raidtab.

        > Pense-bête : 'faut que j'essaie absolument GRUB

        Installes une Fedora pour voir. je dis Fedora car je connais, mais la dernière fois que j'ai testé une Mandrake ça marchais bien aussi. Par contre Mandrake n'utilise pas Grub par défaut.
        Regarde comment c'est fait après l'installation. Pour un test rapide tu peut mettre ta partition raid sur le même disque dure (mode linear pour que ça traine pas trop).
        Ça a l'aire limpide.

        Je dis ça, je dis rien, je ne suis pas un spécialiste Debian.
        • [^] # Re: C'est compliqué....

          Posté par  . Évalué à 2.

          Dès que j'ai un moment, j'essaie la Fedora histoire de revoir un peu du RedHat-like de ma jeunesse.
          Mandrake, j'ai essayé récemment et j'avoue ne pas aimer ce côté obscur qui fait tout au travers d'IHM pour ne pas fonctionner au final. Dès qu'on sort des sentiers battus, une connaissance approfondie de la distrib' est nécessaire comme pour d'autres moins "user friendly" au premier abord : c'est trompeur/pas flatteur.

          En général avec deux disques je fais une grosse partition raid. Si nécessaire j'utilise les quota. Plusieurs partitions à la fois c'est vraiment pénibles, pas souple et ça apporte rien du tout en performance.
          Disons que la partition / unique, j'ai déjà testé et avec, j'ai aussi testé les /var/spool, /var/lib, /var/log ou l'installation dans /usr qui débordent. '/' se remplit et le système complètement inutilisable. Depuis, j'ai pris l'habitude de partitionner (même si ça n'empêche pas /lib de pouvoir déborder suite à d'importantes installations mais bon... c'est un moindre mal) pour des raisons de stabilité, pas de performances...
  • # utilitaire mdadm

    Posté par  . Évalué à 2.

    Perso je trouve que l'utilitaire 'mdadm' est bien plus rapide. Au début j'installer tous les serveurs a la main comme toi et depuis la découverte de cette outils je ne peux plus m'en passer. Entre autre il y a un daemon qui previent root par mail au cas ou une matrice changerai d'état.
    http://xtronics.com/reference/SATA-RAID-Debian.htm(...)

    apt-get install mdadm
    • [^] # Re: utilitaire mdadm

      Posté par  . Évalué à 2.

      Concernant mdadm, je crois que c'est cet utilitaire qui est inclu dans le linuxrc des images initrd pour monter la partition root. Un bon utilitaire en effet mais qui ne change pas fondamentalement les choses de mon point de vue...

      Pour le changement d'état, ça peut être intéressant même si chez moi c'est un cron 'cat /proc/mdstat' qui fait ça ,o) (seulement une fois par jour)
  • # Ma méthode avec GRUB

    Posté par  . Évalué à 3.

    Je viens de terminer l'install de deux serveurs supermicro avec la config suivante:

    bi xeon HT 2.8Ghz, 2 Go de ram, 2 disques maxtor 40 Go IDE (hda et hdc), 2 interfaces e1000 (gigabit ethernel de chez Intel) (bonnes machines, très bien supportées sous linux, pas chères du tout)

    1 - j'installe debian woody normalement sur hda
    2 - je mets à jour en passant en testing pour les packages importants (raidtools2, kernel-source-2.4.26, ...)
    3 - j'installe kernel-package et un environnement de compil. Je compile mon noyau avec en dur md, raid1, ext3, driver réseau
    4 - j'installe grub et je vire définitivement lilo
    5 - je reboote sur le nouveau noyau et je vérifie que tout fonctionne correctement.
    6 - la table des partitions sur hda est alors la suivante:

    /dev/hda1 /boot ext3 32 Mo (type linux)
    /dev/hda5 swap swap 2048 Mo (type swap)
    /dev/hda6 / ext3 512 Mo (type linux)
    /dev/hda7 /tmp ext3 512 Mo (type linux)
    /dev/hda8 /usr ext3 2048 Mo (type linux)
    /dev/hda9 /var ext3 4096 Mo (type linux)
    /dev/hda10 /space ext3 ~30 Go (type linux)

    7 - je crée le fichier /etc/raidtab sur le modèle suivant:
    raiddev /dev/md1
    raid-level 1
    nr-raid-disks 2
    nr-spare-disks 0
    persistent-superblock 1
    chunk-size 4
    device /dev/hda1
    raid-disk 0
    device /dev/hdc1
    raid-disk 1

    [ avec un md(n) pour chaque couple {hda,hdc}(n) sauf le swap ]

    8 - je reboote en read-only (linux -b)
    9 - je re-partitionne hda en changeant le type de toutes les partitions linux en raid-autodetect (0xfd)
    10 - je partitionne hdc à l'identique de hda
    11 - je reboote pour activer les nouvelles tables de partition (toujours en r/o avec linux -b)
    12 - je crée les volumes RAID (mkraid -R /dev/md1 jusqu'à md10) et j'attends la reconstruction des volumes RAID (environ 1h pour 40 Go, voir /proc/mdstat)
    13 - je force le check des partitions (e2fsck -f /dev/md1 jusqu`à md10)
    14 - je redimensionne les partitions pour qu'elles soient consistantes avec la table des volumes RAID (resize2fs /dev/md1 ...)
    15 - je remonte / en r/w (mount / -o remount,rw)
    16 - je modifie la fstab pour tenir compte des volumes RAID
    17 - je monte le /boot en RAID et je modifie le menu.lst de grub comme suit:

    # Linux
    title GNU/Linux (RAID disk 0)
    root (hd0,0)
    kernel /vmlinuz-2.4.26 ro root=/dev/md6

    title GNU/Linux (RAID disk 1)
    root (hd1,0)
    kernel /vmlinuz-2.4.26 ro root=/dev/md6

    # Reinstall GRUB
    title (Re-)Install GRUB (RAID disk 0)
    root (hd0,0)
    setup (hd0)

    title (Re-)Install GRUB (RAID disk 1)
    root (hd1,0)
    setup (hd1)

    18 - je remonte les partitions précédentes en r/o
    19 - je reboote une dernière fois, et je réinstalle GRUB sur les deux disques via les entrées correspondantes du menu
    20 - Ca marche !

    Prochaine étape: tout passer en LVM !
    • [^] # Re: Ma méthode avec GRUB

      Posté par  . Évalué à 1.

      J'en étais arrivé à une étape comme celle-là mais en RAID-5 sur / avec un /boot normal sur mon premier disque.

      Je me demandais l'intérêt de passer en LVM et je me suis rendu compte de l'énaurme potentiel que ca a !

      Je suis donc preneur d'infos sur la complémentarité et de détails sur l'isntallation d'un LVM sur du RAID logiciel. Un de mes collegues l'a fait sur du raid hard, je vais tenter de le soudoyer ses docs ! ;)
  • # Chacun sa méthode

    Posté par  . Évalué à 1.

    Puisque tout le monde y va de sa petite contribution, voici le «tout de mon cru» :

    J'ai configuré mon pc à la maison avec 3 disques : un 120Go et deux de 80Go pour monter une grappe Raid5 sur mon /

    Je sais ce que vous allez dire, ils sont pas montés chacuns sur une
    seule interface IDE, et ca fait chuter les perfs, mais j'ai pas moyen de les brancher autrement pour le moment et les perfs c'est pas ma
    priorité, ce que je souhaite c'est avoir de quoi stocker au moins mes
    photos de manière sécurisée, et pourquoi pas carrément tout mon système :)

    Donc j'ai installé une debian (un SID quand meme :P ) sur une petite partoche de hda. J'ai mis le /boot à part pour pouvoir booter sur une des premières partoches du 120Go (avec le swap et le window$ de madame). J'ai passé mon kernel de base en 2.6 par la même occasion et configuré les drivers md en dur et préparé 3 partoches de 80Go sur l'ensemble de 3 disques en mode FD (raid autodetect).

    cte petite fresh-install m'a permis de créer la grappe :

    # apt-get install mdadm
    # mdadm --create /dev/md0 --chunk=64 --level=5 --raid-devices=3 \
    /dev/hda9 /dev/hdc1 /dev/hdd1

    et voila un raid5... bon ok, ca prend quand meme une bonne heure à créer, il suffit d'aller voir dans /proc/mdstat pour voir la progression.

    après un ptit coup de formatage

    # mkfs.xfs /dev/md0

    et la commande kivabien pour transferer mon système :

    # mount /dev/md0 /mnt
    # find / -xdev | cpio -pm /mnt

    hop hop hop, un ptit touillage du /mnt/etc/fstab pour mettre la racine non pas sur /dev/hdax, mais sur /dev/md0, un petit plus de bidouille pour configurer grub sur le bon disque (putain c'est quand meme top une disquette Grub quand même des fois) et un reboot pour avoir mon système en raid5 «incrashable» ;)

    Voila, c'était le HOWTO le plus merdique que j'ai jamais écris, j'en
    avais fait un plus beau y'a quelques temps [1], mais ca aura le mérite d'être publié kekpart avant que je me décide à mettre à jour l'ancien...

    [1] http://smitters.univ-lille3.fr/~maerten/docs/raid5/raid5-howto.html(...)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.