Dernière mise à jour : 29/10/2009
Linux vous permet de façon très simple de mettre en place un RAID logiciel en utilisant plusieurs partitions réparties sur deux disques durs (minimum) ou plus. Notez que l'on parle ici de RAID logiciel qui est donc entièrement géré par votre OS favori, contrairement au RAID matériel géré par une carte RAID (3ware, adaptec, etc ...). Contrairement aux idées reçues, Promise ou Sil font du RAID pseudo-logiciel bien que ce soient des controleurs à part entière. Cet article va donc vous présenter de façon rapide comment préparer des partitions pour en faire du RAID logiciel et les créer et gérer avec mdadm dont le projet officiel se trouve ici.
Il est important de faire un petit rappel sur les RAID "de base" qui sont les suivants : 0, 1, 5. Il existe d'autres types de RAID (0+1, 6, 10) mais je ne les traiterais pas ici. Les différents RAID traités ici se décomposent ainsi :
- RAID 0 : permet de joindre deux partitions de même taille en une seule. Forcemment une solution efficace car la rapidité des deux disques durs est alors engagée lors des transactions. L'inconvénient majeur est que si vous perdez un des disques, la totalité de votre partition est perdue.
- RAID 1 : utilise deux partitions de même taille afin d'en faire une seule mais dont le contenu est répliqué sur les 2. L'avantage inconterstable est que si vous perdez un disque, l'autre est toujours là avec le même contenu. L'inconvénient est que vu qu'il doit écrire les même données sur les deux disques, l'opération est un peu plus lente que l'utilisation d'une partition normale.
- RAID 5 : cette solution nécessite 3 disques au minimum avec 3 partitions identiques et consiste à copier les données et les informations de contrôle sur tous les disques à la fois (cette solution est d'ailleurs proche du RAID3 sauf que ce dernier utilise un seul disque pour les informations de contrôle). Le RAID 5 est déconseillé en logiciel (à moins d'avoir un très bon processeur et des disques durs et controleurs très rapides) car les sommes de controle sont calculées par votre processeur, faisant donc chûter les performances.
Sous Linux, il faut commencer par partionner vos disques dur en sélectionnant fd comme type d'id de partition. Dans l'exemple ci-dessous (venant de mon système), nous avons deux partitions identiques de 98GO et 3 partitions identiques de 20GO. Si vous vous demandez pourquoi mes partitions sont vues en tant que sda au lieu de hda, cela est dû au controleur Serial ATA (Sil 3112). Voici ce que me donne fdisk :
/dev/sda2 14 12172 97667167+ fd Linux raid autodetect /dev/sda3 12173 14605 19543072+ fd Linux raid autodetect ... /dev/sdb2 14 12172 97667167+ fd Linux raid autodetect /dev/sdb3 12173 14605 19543072+ fd Linux raid autodetect ... /dev/sdc3 12173 14605 19543072+ fd Linux raid autodetect
Une fois vos partitions prêtes, installez mdadm puis créez donc le type de raid dont vous avez besoin, voici les commandes pour les trois types de RAID. La première prends donc deux partitions pour faire un RAID de type 0, la seconde un type RAID 1, la différence est que dans le premier exemple, votre espace total sera de 98GO x 2 = 196GO alors que dans le cadre du RAID 1, vous aurez seulement 98GO vu que le contenu est dupliqué. Dans le cadre du RAID 5, l'espace disponible sera de 2 fois la taille de la plus petite des partitions, le reste servant à la répartition des sommes de contrôle.
mdadm --create /dev/md0 --level 0 --raid-devices=2 /dev/sda2 /dev/sdb2 mdadm --create /dev/md0 --level 1 --raid-devices=2 /dev/sda2 /dev/sdb2 mdadm --create /dev/md0 --level 5 --raid-devices=3 /dev/sda3 /dev/sdb3 /dev/sdc3
Une fois le raid logiciel créé et synchronisé, vous devriez obtenir quelque chose ressemblant à la sortie ci-dessous. Les informations du raid se trouvent dans /proc/mdstat. Un petit cat sur ce fichier vous donnera les informations actuelles de vos partitions. Notez le nom des périphériques (md0,1,2 etc ...) qui correspond au nombre de RAID logiciels présents sur votre système.
Personalities : [linear] [raid0] [raid1] [raid5] md1 : active raid1 sdb3[1] sda3[0] 19542976 blocks [2/2] [UU] md0 : active raid0 sdb2[1] sda2[0] 97667072 blocks [2/2] [UU]
Une fois vos partitions prêtes à l'emploi, il ne vous reste plus qu'à les déclarer dans /etc/mdadm.conf en tapant la commande suivante : mdadm --detail --scan >> /etc/mdadm.conf. Cela renseignera votre système à l'avenir sur les RAID logiciels présents. Du côté du noyau, n'oubliez pas de bien déclarer les bonnes options comme ceci. Il vous incombe de sélectionner les types de RAID dont vous avez besoin mais sélectionnez au moins les 5 premiers. Notez que le device mapper n'est nécessaire que pour ceux utilisant LVM2 (pratique en serveur). Enfin, si vous mettez ces options en modules plutôt qu'en statique, utilisez initrd pour charger les modules au démarrage.
Multi-device support (RAID and LVM) ---> [*] Multiple devices driver support (RAID and LVM) <*> RAID support <*> Linear (append) mode <*> RAID-0 (striping) mode <*> RAID-1 (mirroring) mode < > RAID-10 (mirrored striping) mode (EXPERIMENTAL) <*> RAID-4/RAID-5 mode < > RAID-6 mode (EXPERIMENTAL) < > Multipath I/O support < > Faulty test module for MD < > Device mapper support
Il ne vous reste qu'à formater votre RAID avec le système de fichier que vous voulez. Par exemple, vous pouvez utiliser mkfs.ext3 /dev/md0. Montez alors votre partition comme vous le désirez.
Dans la liste rapide des dépannages on notera les commandes suivantes. Imaginez que vous ayez à dépanner un système à partir d'un liveCD (sous noyau 2.6 avec support RAID), vous pouvez utiliser ce qui suit :
- mdadm --assemble /dev/md0 /dev/sda2 /dev/sdb2 - Permet de réassembler votre RAID logiciel que vous avez créé sur md0 à partir de vos deux partitions sda2 et sdc2. Si vous avez une erreur vous indiquant que md0 n'existe pas, utilisez mknod comme suit : mknod /dev/md0 b 9 0.
- mdadm /dev/md1 -a /dev/sdb3 - Imaginez à présent que votre raid1 aie un disque dur qui soit mort et que vous l'ayez changé, la nouvelle partition sdb3 (de même taille que sda3) doit être synchronisée en étant ajoutée grâce à cette commande.
- echo "10000" > /proc/sys/dev/raid/speed_limit_max : vous pouvez utiliser cette commande pour limiter la synchronisation a 10Mo/s et eviter de rendre votre système inutilisable pendant ce temps.
Si vous avez un problème de RAID, vous pouvez taper cette commande :
- echo check >> /sys/block/mdX/md/sync_action : Vous pouvez alors vérifier son état dans /proc/mdstat.
Cette page devrait donc vous permettre de paramétrer de façon simple du RAID logiciel sur une machine. J'utilise cette méthode sur de nombreuses machines depuis plusieurs années (auparavant raidtools) et je n'ai jamais rencontré de problème majeur. Amusez-vous bien.