RAID Linux
Octobre 2017
Définitions
• Le RAID (Redundant Array of Inexpansive Disks) a
été défini par l’université de Berkeley en 1987 dans
le double but de réduire les coûts et d’augmenter
la fiabilité du stockage des données. Le but est de
combiner plusieurs petits disques physiques
indépendants en une matrice (array : tableau,
ensemble, rangée, matrice) de disques dont la
capacité dépasse celle du SLED (Single Large
Expensive Drive). Une matrice apparaît comme une
unité logique de stockage unique.
Définitions
• Le MTBF (Mean Time Between Failure - temps
moyen entre pannes) de l’ensemble est égal au
MTBF d’un disque individuel divisé par le
nombre de disques dans l’ensemble et donc
théoriquement, une solution RAID peut être
inadaptée pour des tâches critiques.
• Heureusement, le RAID peut être tolérant aux
fautes en stockant de manière redondante ses
informations selon plusieurs méthodes :
Définitions
• RAID-0 : appelé stripe mode : deux disques au moins forment
un seul volume. Les deux disques ont en principe la même
taille. Chaque opération de lecture/écriture sera fractionnée
et effectuée sur chacun des disques. Par exemple, 4 ko seront
écrits sur le disque 0, 4 ko sur le disque 1, 4 ko sur le disque
2, puis 4 ko sur le disque 0, etc. Ainsi, les performances sont
accrues puisque les opérations de lecture et d’écriture sont
effectuées en parallèle sur les disques. Si N est le nombre de
disques et P la vitesse de transfert, la vitesse de transfert du
volume RAID est en principe proche de N*P mbps. Le RAID-0
n’a aucune redondance. En cas de panne d’un des disques, il
est probable que l’ensemble des données soit perdu.
• RAID-1 : appelé mirroring : premier mode redondant. Il peut
être utilisé à partir de deux disques ou plus avec d’éventuels
disques de secours (Spare Disk). Chaque information écrite sur
un disque est dupliquée sur les autres. Si N-1 disques du RAID
viennent à tomber, les données restent intactes. Si un disque
de secours est présent, en cas de panne, il est
automatiquement reconstruit et prend la place du disque
défaillant. Les performances en écriture peuvent être
mauvaises : écriture sur N disques en même temps, risquant
de saturer le contrôleur disque et le bus. Les performances en
lecture sont bonnes, car RAID emploie un algorithme qui peut
lire les données sur chaque disque (puisqu’ils sont identiques).
Définitions
• RAID-5 : RAID avec bande de parité redistribuée. C’est le
mode le plus utilisé car c’est celui qui offre le meilleur
compromis entre le nombre de disques, l’espace disponible et
la redondance.
• Il faut au moins trois disques avec d’éventuels disques de
secours. La parité est présente sur chacun des disques. La
taille finale est celle de N-1 disques. Le RAID-5 survit à une
panne de disque. Dans ce cas, si un disque de secours est
présent, il sera automatiquement reconstruit.
• Les performances en lecture sont équivalentes à celles du
RAID-0 tandis qu’en écriture, elles dépendent de l’algorithme
employé et de la mémoire de la machine.
Précautions et considérations d’usage
a. Disque de secours
• Un disque de secours (Spare Disk) ne fait pas partie
intégrante d’une matrice RAID tant qu’un disque ne tombe
pas en panne. Si cela arrive, le disque est marqué défectueux
et le premier disque Spare prend le relais. Quoi qu’il arrive, il
faut tout de même, le plus vite possible, changer le disque
défaillant et reconstruire le RAID.
b. Disque défectueux
• Un disque défectueux (Faulty Disk) est un disque qui a été
reconnu défaillant ou en panne par le RAID.
• Dans ce cas, RAID utilise le premier disque Spare pour
reconstruire sa matrice. Les disques Faulty appartiennent
toujours à la matrice mais sont désactivés.
Précautions et considérations d’usage
c. Boot
La partition de boot (celle qui contient le noyau, la configuration du
bootloader, les fichiers images de disques) ne doit pas être placée dans une
matrice RAID : le chargeur de démarrage est incapable de monter des
partitions RAID (la prochaine version de GRUB en sera capable).
d. Swap
• Vous pouvez installer un swap sur du RAID mais ce n’est en principe pas utile
dans les cas courants.
• En effet, Linux est capable d’équilibrer l’utilisation du swap sur plusieurs
disques/partitions seuls.
• Dans ce cas, déclarez n swaps dans /etc/fstab avec la même priorité.
• /dev/sda2 swap swap defaults,pri= 0 0
• /dev/sdb2 swap swap defaults,pri=1 0 0
• /dev/sdc2 swap swap defaults,pri=1 0 0
• Cependant, en cas de besoin de haute disponibilité, le swap sur le RAID est
possible.
Précautions et considérations d’usage
e. Périphériques
• Une matrice RAID est reconnue par le système comme un
périphérique de type bloc, comme n’importe quel disque
physique. Ainsi, un RAID peut être constitué avec des disques, des
partitions (généralement, on crée une unique partition sur chaque
disque). Le bus n’a aucune importance : vous pouvez construire
une matrice RAID avec des disques SCSI et IDE mélangés. De
même, on peut construire du RAID sur d’autres matrices RAID, par
exemple du RAID-0+1 (2x2 disques en RAID-1, les deux matrices
résultantes en formant une nouvelle en RAID-0). Les périphériques
RAID sont sous la forme :
/dev/md0
/dev/md1
f. IDE
• Si les disques IDE ont longtemps été le SCSI du pauvre (matériel de
moins bonne qualité, lenteur, manque de fiabilité) ce n’est plus
vraiment le cas. Les derniers modèles sont totalement identiques aux
disques SCSI, contrôleur excepté. Vous pouvez donc monter pour un
coût raisonnable des configurations RAID en IDE. Cependant une règle
est à retenir :
• UN SEUL DISQUE IDE PAR BUS IDE
• En pratique, cela correspond à un disque par câble, sans rien d’autre. En
effet, un bus IDE survit en principe à la déficience d’un disque mais il
arrive régulièrement que le bus IDE devienne lui-même défectueux,
entraînant la perte du second disque présent sur le bus et donc la perte
de la matrice RAID. L’achat de cartes IDE supplémentaires (bas prix)
permet de compenser le problème de fiabilité (deux disques par carte).
g. Hot Swap
IDE : NE JAMAIS DEBRANCHER À CHAUD UN DISQUE IDE ! C’est le meilleur moyen
de détruire le disque, si ce n’était pas encore le cas et de détruire le contrôleur
IDE (et donc éventuellement la carte mère ou additionnelle). L’IDE n’est pas
prévu pour.
SCSI : les contrôleurs SCSI ne sont pas prévus pour le Hot Swap mais devraient en
théorie tout de même fonctionner, si le disque est identique physiquement et
logiquement.
SATA : le SATA est reconnu comme du SCSI. La spécification SATA en version 2
supporte théoriquement le Hot Swap. Seulement, la plupart des contrôleurs
actuels implémentent mal ou pas du tout cette possibilité, d’où les risques de
plantages ou de griller son contrôleur.
Référez-vous à la documentation du constructeur de votre carte mère (chipset).
SCA : ce sont des disques SCSI spécifiques. Consultez le document « Software RAID
Howto ».
RAID avec mdadm
a. Préparation
• L’outil mdadm remplace les outils raidtools des
anciennes distributions Linux. Cet outil unique est plus
simple et permet d’effectuer l’ensemble des opérations.
Son fichier de configuration est /etc/[Link].
• Afin de créer des matrices RAID, il faut que les partitions
qui vont servir à créer la matrice soient de type 0xFD
(Linux RAID autodetect). Les partitions doivent être
logiquement sur des disques différents, mais pour des
tests, le support RAID autorise des partitions sur le
même disque. Dans ce cas, vous veillerez à ce que les
partitions disposent de la même taille.
RAID avec mdadm
b. Création
• RAID-0
Principe du RAID 0 : Striping
RAID avec mdadm
b. Création
• Soient deux partitions /dev/sdb1 et /dev/sdc1. Vous allez créer une
partition RAID-0, assemblage de ces deux partitions.
# mdadm --create /dev/md0 --level=raid0 --raid-devices=2 /dev/sdb1
/dev/sdc1
--create : Créer un RAID.
/dev/md0 : Nom du fichier périphérique de type bloc représentant la matrice
RAID.
--level : Type de RAID à créer : 0, raid0 et stripe pour du RAID0.
--raid-devices : Nombre de partitions utilisées pour créer la matrice.
/dev/sdb1, /dev/sdc1 : Partitions constituant la matrice, suivant le nombre
indiqué dans --raiddevices.
• Il ne reste plus qu’à installer le système de fichiers sur le disque RAID :
# mkfs -t ext3 /dev/md0
RAID-1
RAID-1
• Même principe. Vous allez cette fois pouvoir rajouter une partition
de secours /dev/sdd1.
# mdadm --create /dev/md1 --level=raid1 --raid-devices=2 /dev/sdb1
/dev/sdc1
--spare-devices=1 /dev/sdd1
--level : mirror ou raid1 sont de bonnes valeurs pour RAID-1.
--spare-devices nombre de disques de secours à utiliser.
/dev/sdd1 partitions constituant les disques de secours, suivant le
nombre indiqué dans --sparedevices.
Puis :
# mkfs -t ext3 /dev/md1
• Montage de la partition /dev/md1 dans /RAID1
# mount /dev/md1 /RAID1
Ou bien montage automatique en insérant l’entrée dans /etc/fstab
• Vérification avec les commandes telles que blkid
• RAID-0+1
• Il faut au moins quatre partitions. Vous devez créer
deux matrices RAID-1 que vous allez regrouper en
une matrice RAID-0.
# mdadm --create /dev/md0 --level=raid1 --raid-devices=2 /dev/sdb1
/dev/sdc1
# mdadm --create /dev/md1 --level=raid1 --raid-devices=2 /dev/sdd1
/dev/sde1
# mdadm --create /dev/md2 --level=raid0 --raid-devices=2
/dev/md0 /dev/md1
• Puis :
# mkfs -t ext3 /dev/md2
• RAID 5
• Vous allez utiliser trois disques de données
/dev/sdb1, /dev/sdc1, /dev/sdd1 et un disque de
secours /dev/sde1.
# mdadm --create /dev/md2 --level=raid5 --raid-
devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1 --spare-
devices=1 /dev/sde1
• Puis on formate :
# mkfs -t ext3 /dev/md2
Etat du RAID
• Le fichier virtuel /proc/mdstat contient des
informations sur le RAID. C’est ici que vous
pouvez voir le détail d’un RAID, notamment si un
des volumes de la matrice est défectueux (Faulty).
• La commande watch permet de vérifier un état
en continu :
# watch cat /proc/mdstat
• Vous pouvez aussi utiliser mdadm avec le
paramètre --detail
Simuler une panne
• Vous allez simuler une panne sur /dev/hda8 :
# mdadm /dev/md0 -f /dev/hda8
mdadm: set /dev/hda8 faulty in /dev/md0
• Remarquez qu’un « (F) » est apparu près de hda8, indiquant un disque
Faulty. On voit aussi que sur les deux disques, un est en panne et que
le RAID reconstruit sa matrice avec le spare disk. Le RAID se
reconstruit et fonctionne correctement.
# mdadm --detail /dev/md0
• Le disque Faulty est bien /dev/hda8 ; /dev/hda10 a pris sa place en
tant que disque de secours. Ainsi, le disque de secours devient un
disque RAID de la matrice.
Remplacer un disque
• Puisque /dev/hda8 est en panne, vous allez le remplacer. Retirez-le avec
-r (ou --remove) :
# mdadm /dev/md0 -r /dev/hda8
mdadm: hot removed /dev/hda8
• Constatez que hda8 a disparu. Vous pouvez éteindre la machine puis
remplacer le disque défaillant. Rallumez la machine, puis repartitionnez
le disque correctement. Il n’y a plus qu’à rajouter le disque réparé dans
la matrice RAID avec -a (--add) :
# mdadm /dev/md0 -a /dev/hda8
mdadm: hot added /dev/hda8
• Le disque hda8 apparaît à nouveau. Voyez le détail :
# mdadm --detail /dev/md0
• Le disque /dev/hda8 a été remis et est devenu le nouveau disque de
secours !
Arrêt et relance manuels
• Vous pouvez arrêter une matrice RAID avec -S (--stop) APRÈS
avoir démonté le périphérique :
# mdadm --stop /dev/md0
• Vous redémarrez une matrice RAID avec -As (--assemble -scan).
Cela implique que le fichier /etc/[Link] est correctement
renseigné (--scan recherche les informations dedans).
# mdadm --assemble --scan /dev/md0
• Si le RAID ne redémarre pas, vous pouvez tenter avec -R (--run) :
il est probable qu’il manque un disque ou qu’une reconstruction
en cours n’est pas terminée :
# mdadm --run /dev/md0