Rappel sur le RAID 5

RAID signifie Redundant Array of Inexpensive/Independent Disks. Le but étant d'utiliser plusieurs disques durs comme un seul disque avec une tolérance de panne.

Dans le cas du RAID 5, il est possible de perdre un disque sans perte de données (par contre il vaut mieux changer le disque défectueux rapidement, la perte d'un second disque entrainerait la perte de toutes les données). Le RAID-5 a besoin d'un minimum de 3 partitions de tailles identiques. La taille utile du disque en RAID-5 est la somme des tailles des partitions utilisées moins une.

Préliminaires

Je décris ici la création d'un disque en RAID-5 sur une Debian, le disque créé n'étant pas utilisé comme partition système.

Munissez vous de plusieurs disques de taille identique (ici 4 disques de 500Go) et montez les un par un dans votre ordinateur. Surtout n'oubliez pas de repérer chaque disque. Il est important de pouvoir facilement identifier le nom logique d'un disque (genre /dev/sda) avec le disque physique (branché dans votre ordinateur), sinon en cas de panne il est assez difficile de changer un disque sans savoir lequel est en panne réellement.

Pour cela vous pouvez noter pour chaque disque (en les branchant un par un) son "id", "path" donné par linux (le nom logique /dev/sda, /dev/sdb n'est pas systématiquement le même d'un démarrage à l'autre) :

$ ls -l /dev/disk/by-id/↵
total 0
lrwxrwxrwx 1 root root  9 2008-01-20 12:45 ata-SAMSUNG_HD501LJ-S0MUJ1MPC01769 -> ../../sdc
lrwxrwxrwx 1 root root  9 2008-01-20 12:45 ata-SAMSUNG_HD501LJ-S0MUJ1MPC01770 -> ../../sde
lrwxrwxrwx 1 root root  9 2008-01-20 12:45 ata-SAMSUNG_HD501LJ-S0MUJ1MPC01771 -> ../../sdb
(…)
$ ls -l /dev/disk/by-path/↵
total 0
lrwxrwxrwx 1 root root  9 2008-01-20 12:45 pci-0000:00:12.0-scsi-0:0:0:0 -> ../../sdd
lrwxrwxrwx 1 root root  9 2008-01-20 12:45 pci-0000:00:12.0-scsi-1:0:0:0 -> ../../sde
lrwxrwxrwx 1 root root  9 2008-01-20 12:45 pci-0000:01:00.0-scsi-0:0:0:0 -> ../../sdb
(…)

Sur chaque disque il est nécessaire de créer une partition de type "Linux raid autodetect" :

$ sudo fdisk /dev/sde↵
n↵ (crée une nouvelle partition)
p↵ (partition primaire)
1↵ (partition primaire numéro 1, accepter ensuite les tailles par défaut pour utiliser la totalité du disque)
t↵ (changer le type de partition)
Hex code (type L to list codes): fd↵ (change le type de partition pour "Linux raid autodetect")
w↵ (écrit la table de partition sur le disque et quitte fdisk)

Créer un disque en RAID 5

Il est nécessaire d'avoir l'utilitaire mdadm, à installer avec la commande suivante si vous ne l'avez pas :

$ sudo apt-get install mdadm↵

Utilisation de mdadm (les disque que je veux mettre en raid sont les disques sdb, sdc, sdd et sde) :

$ sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1↵

Voilà c'est fini.

Conclusion

Les préliminaires sont toujours plus long.

Plus sérieusement, un disque (ici /dev/md0) a été créé, c'est celui-là qu'il faut monter pour profiter de votre tout nouveau RAID.

Pour vérifier son état :

$ sudo mdadm --detail /dev/md0↵
/dev/md0:
        Version : 00.90.03
  Creation Time : Sat Jan 19 17:03:46 2008
     Raid Level : raid5
     Array Size : 1465151808 (1397.28 GiB 1500.32 GB)
  Used Dev Size : 488383936 (465.76 GiB 500.11 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent  

    Update Time : Sun Jan 20 15:49:00 2008
          State : clean
 Active Devices : 4 
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : 02918692:35547ed8:6ec71e01:ff96950c
         Events : 0.34

    Number   Major   Minor   RaidDevice State
       0       8       49        0      active sync   /dev/sdd1
       1       8       65        1      active sync   /dev/sde1
       2       8        1        2      active sync   /dev/sdc1
       3       8       17        3      active sync   /dev/sdb1

Il est important que la ligne "State" affiche "clean" et que la colonne "State" affiche "active sync" pour chaque disque. Juste après la création du volume RAID, l'état doit ressembler à "clean, degraded, recovering", c'est normal, le système est en train de synchroniser les disques entre eux (et ça peut être assez long, quelques heures avant d'arriver à "clean"). Pour voir l'évolution de la synchronisation :

$ cat /proc/mdstat↵

Maintenant il faut surveiller l'état du disque régulièrement, il ne faut pas attendre qu'il ne marche plus vu qu'il risque d'arrêter de fonctionner lorsque 2 disques seront mort et il sera trop tard.

Par défaut (voir le fichier /etc/mdadm/mdadm.conf) mdadm envoie un mail à "root" en cas de problème, je vous conseille de configurer cette valeur vers une boîte que vous lisez régulièrement.

Lorsque le système est "clean" vous pouvez stopper un des disques pour simuler une panne, vérifier que vous recevez bien une alerte et redémarrer le disque (et attendre de nouveau plusieurs heures que le système redevienne "clean") :

$ sudo mdadm /dev/md0 --fail /dev/sdb1↵ (déclare le disque sdb1 "en panne")
$ sudo mdadm /dev/md0 --add /dev/sdb1↵ (ajoute le disque sdb1 au système RAID, la synchronisation reprend immédiatement)

Je vous conseille fortement de lire un peu plus de documentation pour bien comprendre comment tout fonctionne (il faudrait que je suive les conseilles que je donne ;-)).

Si vous avez déjà un volume RAID en place et que vous voulez l'étendre en rajoutant un disque, apparemment c'est possible : http://scotgate.org/?p=107.

Bon courage.