RAID soft

L'installation est décrite sous Debian Lenny, mais peut etre adaptée au besoin

Description

Je ne vais pas decrire ici le RAID, wikipedia est la pour ca.

Le but de cette page est de decrire l'installation d'un RAID logiciel entre différents disques, puis d'utiliser le volume (grappe) ainsi construit comme volume physique pour du LVM.

Les volumes logiques créés seront ensuite exportés en iSCSI, mais cette partie fera l'objet d'une autre page. Les disques /dev/sdX mentionnés dans la suite sont d'ailleurs des partitions accédées en iSCSI.

Prérequis

Installation des outils RAID et LVM :

aptitude install lvm2 mdadm

Création de la grappe

La création de la grappe RAID, ainsi que toutes les opérations concernant le RAID sont effectuées a l'aide de la commande mdadm.

man mdadm vous donnera plein d'options non décrites ici.

La création de grappes RAID en utilisant des disques entiers semble poser probleme, c'est pour cela que nous utiliserons des partitions comme volume de base. En effet, les disques n'ont pas tous exactement la meme taille (au cylindre pres), et il est préférable de créer une partition légèrement plus petite quitte a perdre 10Mo sur chaque disque, plutot que de ne pas pouvoir remplacer un disque défectueux apres coup.

Ces partitions doivent etre de type “Linux raid autodetect”, soit FD en hexadécimal.

  • Pour créer une grappe RAID5 sur 3 partitions /dev/sda1 /dev/sdb1 et /dev/hda2 :
    mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3  /dev/hda2 /dev/sda1 /dev/sdb1

    Si vous aviez voulu créer la même grappe, en mode dégradé, si par exemple vous n'avez pas encore reçu votre dernier disque : (noter le mot clef “missing”)

    mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 missing /dev/sda1 /dev/sdb1

    vous devriez obtenir quelque chose qui ressemble a :

    # mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3  /dev/hda2 /dev/sda1 /dev/sdb1
    mdadm: layout defaults to left-symmetric
    mdadm: chunk size defaults to 64K
    mdadm: /dev/hda2 appears to contain an ext2fs file system
        size=70316504K  mtime=Thu Oct 15 14:53:26 2009
    mdadm: /dev/hda2 appears to be part of a raid array:
        level=raid5 devices=3 ctime=Tue Nov 10 11:34:28 2009
    mdadm: /dev/sda1 appears to contain an ext2fs file system
        size=70316472K  mtime=Mon Nov  9 10:16:38 2009
    mdadm: /dev/sda1 appears to be part of a raid array:
        level=raid5 devices=3 ctime=Tue Nov 10 11:34:28 2009
    mdadm: /dev/sdb1 appears to be part of a raid array:
        level=raid5 devices=3 ctime=Tue Nov 10 11:34:28 2009
    mdadm: size set to 70316352K
    Continue creating array? y
    mdadm: array /dev/md0 started.
  • Pour vérifier que la grappe RAID est bien vue, un petit
    cat /proc/mdstat

    devrait vous renseigner :

    # cat /proc/mdstat 
    Personalities : [raid1] [raid6] [raid5] [raid4] 
    md0 : active (auto-read-only) raid5 sdb1[3](S) sda1[1] hda2[0]
          140632704 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]

On peut ici voir que le RAID est monté en lecture seule, et que la 3e partition n'est pas synchronisée (le _ dans la liste entre [], car l'une des partitions est déclarée en spare (S)) Je vous conseille d'ailleurs cette doc sur mdstat : http://linux-raid.osdl.org/index.php/Mdstat

  • Pour la monter en RW (et par la meme lancer la synchronisation), faites un petit :
    mdadm --readwrite /dev/md0

    vous pouvez vérifier avec un cat /proc/mdstat :

    # cat /proc/mdstat 
    Personalities : [raid1] [raid6] [raid5] [raid4] 
    md0 : active raid5 sdb1[3] sda1[1] hda2[0]
          140632704 blocks level 5, 64k chunk, algorithm 2 [3/2] [UU_]
          [>....................]  recovery =  0.1% (92800/70316352) finish=37.7min speed=30933K/sec

    La vitesse de (re)construction dépend de vos disques, mais est limitée par le systeme, comme peut le montrer un dmesg :

    [360814.192484] md: recovery of RAID array md0
    [360814.192484] md: minimum _guaranteed_  speed: 1000 KB/sec/disk.
    [360814.192484] md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for recovery.
    [360814.192484] md: using 128k window, over a total of 70316352 blocks.

Vous pouvez d'ores et deja utiliser cette grappe RAID, meme si pour l'instant les performances vont etre faibles a cause de la reconstruction en cours.

Un cat /proc/mdstat donne ça une fois la reconstruction effectuée :

Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid5 sdb1[2] sda1[1] hda2[0]
      140632704 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>

Et voila, on a obtenu un bô volume en RAID 5 logiciel sous linux

Finalisation

Vous pensiez en avoir fini ? que nenni. Pour l'instant votre grappe RAID risque de ne pas être détectée lors du prochain reboot. Pour contourner ce probleme, il faut déclarer cette grappe dans le fichier /etc/mdadm/mdadm.conf :

mdadm  --detail --scan >> /etc/mdadm/mdadm.conf

mdadm integre un démon de monitoring pour les grappes RAID qui envoie un mail a root en cas de probleme sur l'un des disques de la grappe, il faut donc vous assurer que les mails envoyés a root vous parviennent sous peine de louper le fait qu'un de vos disques vient de vous lâcher. Et si un 2e meurt, votre grappe (ainsi que les données) ne s'en remettra pas.

Opérations courantes

Si l'un de vos disques meurt, la grappe passe en mode “dégradé”, mais vous continuez a accéder a vos données tant qu'un autre disque ne rend pas l'âme a son tour.

Marquer une partition comme défectueuse

Au besoin, attention a ne pas en marquer une qui ne l'es pas si votre grappe est dégradée :

mdadm --manage /dev/md0 --fail /dev/sda1

Exclure une partition de la grappe

Pour pouvoir exclure une partition il faut d'abord qu'ellene soit pas “active” (ie : marquée en tant que “spare” ou “failed”, grace a la commande ci dessus par exemple) .

mdadm --manage /dev/md0 --remove /dev/sda1

Ajouter une nouvelle partition de la grappe

Une fois le disque flambant neuf reçu, installez le physiquement dans votre PC (ordinateur éteind bien sur dans la plupart des cas).

mdadm /dev/md0 --add /dev/sda1

Remplacer un disque defectueux

Attention à ne pas vous tromper de sens des disques et pensez bien que cela va copier l'intégralité (en écrasant) de la table de partition d'un disque sur l'autre

Admettons qu'un disque defectueux soit remplacé on va devoir, si par exemple votre disque OK est /dev/sdb et que le nouveau vierge est /dev/sda :

  • Recréer une table de partition identique sur le disque flambant neuf :
    # sfdisk --dump /dev/sdb | sfdisk /dev/sda
  • Vous pouvez ensuite verifier avec lsblk ou encore fdisk -l que vous voyez bien les nouvelles partitions sur le nouveau disque
  • Rajouter ensuite toutes les partitions “aux bonnes grappes”, donc si vous avez fait ca un peu bien :
    # mdadm --manage /dev/md1 --add /dev/sda1
    # mdadm --manage /dev/md2 --add /dev/sda2
    # mdadm --manage /dev/md2 --add /dev/sda2
    [...]
  • Pour les impatients vous pouvez suivre l'avancement de la reconstruction des grappes avec :
    # watch cat /proc/mdstat

Surveiller l'état de la grappe

Il existe plusieurs moyen :

  • A la main :
    • le “cat /proc/mdstat” vu au dessus qui vous indique la progression de la reconstruction le cas échéant
    • mdadm --examine /dev/sda1

      qui devrait vous donner quelque chose de similaire a :

      # mdadm --examine /dev/sda1
      /dev/sda1:
                Magic : a92b4efc
              Version : 00.90.00
                 UUID : b3b0fcee:6da97471:bbd6c5d0:6131c770 (local to host suricat)
        Creation Time : Tue Nov 10 11:39:42 2009
           Raid Level : raid5
        Used Dev Size : 70316352 (67.06 GiB 72.00 GB)
           Array Size : 140632704 (134.12 GiB 144.01 GB)
         Raid Devices : 3
        Total Devices : 3
      Preferred Minor : 0
      
          Update Time : Tue Nov 10 18:00:08 2009
                State : clean
       Active Devices : 3
      Working Devices : 3
       Failed Devices : 0
        Spare Devices : 0
             Checksum : 81b31f1e - correct
               Events : 14
      
               Layout : left-symmetric
           Chunk Size : 64K
      
            Number   Major   Minor   RaidDevice State
      this     1       8       33        1      active sync   /dev/sda1
      
         0     0       3        2        0      active sync   /dev/hda2
         1     1       8       33        1      active sync   /dev/sda1
         2     2       8       49        2      active sync   /dev/sdb1
  • en automatique :
    • mdadm dispose d'un moniteur qui alerte par mail en cas de problème, et qui est démarré par défaut (sauf mention expresse du contraire dans /etc/default/mdadm sous debian)

Un peu plus loin

Le probleme avec cette installatin est que sur une installation en utilisant des volumes iscsi (seule la partition hda2 est locale), lors du redemarrage, mdadm voit une des partitions du rAID, et se dit “chouette, du RAID? activons tout ca”. Sauf que bien sur à ce moment la , le réseau de la machine n'est pas encore démarré, et donc les volumes iSCSI ne sont pas encore présents ;-)

LA solution consiste donc a mettre

INITRDSTART='none'

dans le /etc/default/mdadm pour l'empecher d'activer automatiquement les grappes RAID lors du boot (a exclure bien sur si vous avec une partition de boot comme / sur le RAID

Destruction de la grappe

Pour détruire une grappe, des informations etant stockées dans le superblock de chacune des partitions, il faut :

  • marquer en “faulty” chacune des partitions composant le RAID :
    mdadm --manage /dev/md0 --fail /dev/sda1
    mdadm --manage /dev/md0 --fail /dev/sdb1
    mdadm --manage /dev/md0 --fail /dev/hda2
  • les enlever de la grappe :
    mdadm --manage /dev/md0 --remove /dev/sda1
    mdadm --manage /dev/md0 --remove /dev/sdb1
    mdadm --manage /dev/md0 --remove /dev/hda2
  • et enfin “arreter” la grappe :
    mdadm --manage --stop /dev/md0
  • penser ensuite a enlever la ligne concernant la grappe supprimée (/dev/md0) dans le fichier /etc/mdadm/mdadm.conf

Cela evitera que mdadm veuille réutiliser cette grappe au prochain redemarrage/découverte des partitions “RAID autodetect”.

Références

sysadmin/software_raid.txt · Dernière modification: 2019/12/18 19:59 par james
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0