Chapitre 7 : Partitionnement avancé RAID
1. 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) 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.
Le RAID est tolérant aux pannes en stockant de façon redondante ses informations selon plusieurs méthodes :
• RAID-0 ( appelé stripe mode ) : deux disques au moins forment un seul volume et 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. Le RAID-0 n’a aucune redondance et en cas de panne d’un des disques, il est
probable que l’ensemble des données soit perdu.
• RAID-1 ( appelé mirroring ) : c’est le premier mode redondant car 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 tombent en panne, 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).
• RAID-5 : RAID avec bande de parité redistribuée, il s’agit du mode le plus utilisé car il 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 tolère une panne de disque, dans ce cas si un disque de secours est présent, il sera
automatiquement reconstruit.
2. Considérations d’usage RAID
2.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 qui le remplace.
2.b. Disque défectueux
Un disque défectueux (Faulty Disk) est un disque qui a été reconnu 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.
2.c. Boot
La partition de boot (celle qui contient le noyau, la configuration du bootloader GRUB, 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.
3.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. Les périphériques RAID sont sous la forme : /dev/md0, /dev/md1…
3. L’outil mdadm
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, les partitions doivent posséder la
même taille.
L’outil mdadm permet d’effectuer l’ensemble des opérations sur les volumes RAID (Création, désactivation,
suppression,…). Son fichier de configuration est /etc/mdadm.conf.
3.a. Création et désactivation d’un volume RAID
*Syntaxe de la commande mdadm pour la création ou la désactivation de volume RAID :
mdadm action volume -l niveau -n nombre_disques stockages
-C ou - -create : crée un volume RAID.
action
-S ou - -stop : désactive un volume RAID et libère ses ressources.
Le fichier spécial de type bloc à créer pour représenter le nouveau volume RAID.
volume
Souvent /dev/mdx, mais peut être un nom quelconque.
Valeur du niveau de RAID, généralement 0, 1 ou 5.
niveau
L’option - -level=raidx peut être utilisée
Nombre d’espaces de stockage à employer, suivi des fichiers de blocs
représentant ces espaces.
nombre_disques
L’option - -raid-devices=N peut être utilisée
Les périphériques de stockages séparés par des espaces et désignés par leur
stockages
fichier spécial en mode bloc.
*Exemple de création d’un volume RAID1 :
On exploite deux disques durs /dev/sdb et /dev/sdc pour créer un volume RAID1
root@serveur# mdadm -C /dev/md0 -l 1 -n 2 /dev/sdb /dev/sdc
mdadm: array /dev/md0 started
root@serveur# mkfs -t ext3 /dev/md0
Remarque :
Les partitions constituant les disques de secours doivent être écrites après l’option --spare-devices et
suivant le nombre indiqué dans cette option.
# mdadm --create /dev/md0 --level=raid0 --raid-devices=2 /dev/sdb1
/dev/sdc1 --spare-devices=1 /dev/sdd1
3.b. Sauvegarde de la configuration RAID
On peut créer (ce n’est pas obligatoire) le fichier de configuration /etc/mdadm.conf, ce fichier peut être créé
manuellement mais l’outil mdadm peut le générer automatiquement après la création des matrices RAID avec les
commandes suivantes :
# echo "partitions des volumes RAID" > /etc/mdadm.conf
# mdadm --detail –scan >> /etc/mdadm.conf
4. État du volume RAID
Le fichier virtuel /proc/mdstat contient des informations sur le RAID. C’est dans ce fichier qu’on trouve les
détails d’un volume 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
On peut aussi utiliser mdadm avec le paramètre --detail :
# mdadm --detail /dev/md0
/dev/md0:
Version : 00.90.01
Creation Time : Mon Jan 23 22:10:20 2006
Raid Level : raid1
Array Size : 104320 (101.88 MiB 106.82 MB)
Device Size : 104320 (101.88 MiB 106.82 MB)
Raid Devices : 2
Total Devices : 3
Preferred Minor : 1
Persistence : Superblock is persistent
Update Time : Mon Jan 23 22:13:06 2006
State : clean
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1
Number Major Minor RaidDevice State
0 3 8 0 active sync /dev/hda8
1 3 9 1 active sync /dev/hda9
2 3 10 -1 spare /dev/hda10
UUID : 90e838b5:936f18c7:39f665d3:d9dad1a9
Events : 0.4
5. Simulation d’une panne d’un disque RAID
Pour simuler une panne sur /dev/hda8 on doit utiliser l’option -f :
# mdadm /dev/md0 -f /dev/hda8
mdadm: set /dev/hda8 faulty in /dev/md0
On peut visualiser l’état du RAID dans /proc/mdstat durant l’exécution :
md0 : active raid1 hda10[2] hda9[1] hda8[0](F)
104320 blocks [2/1] [U_]
[=> ] recovery = 8.8% (9216/104320) finish=0.1min
speed=9216K/sec
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. Après l’exécution, vous obtenez :
md0 : active raid1 hda10[1] hda9[0] hda8[2](F)
104320 blocks [2/2] [UU]
Le RAID est reconstruit automatiquement d’après le résultat de la commande mdadm --detail /dev/md0 :
# mdadm --detail /dev/md0
...
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 1
Spare Devices : 0
Number Major Minor RaidDevice State
0 3 9 0 active sync /dev/hda9
1 3 10 1 active sync /dev/hda10
2 3 8 -1 faulty /dev/hda8
Le disque Faulty est bien /dev/hda8 et /dev/hda10 a pris sa place en tant que disque de secours. Ainsi, le
disque de secours devient un disque RAID de la matrice.
6. Remplacement d’un disque RAID
Puisque /dev/hda8 est en panne, on doit le remplacer, mais avant on doit le retirer avec
l’option -r (ou --remove) :
# mdadm /dev/md0 -r /dev/hda8
mdadm: hot removed /dev/hda8
# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 hda10[1] hda9[0]
104320 blocks [2/2] [UU]
Puisque /dev/hda8 ne figure plus dans la liste, on peut éteindre la machine puis remplacer le disque défaillant.
Puis rallumer la machine, puis repartitionner le disque correctement. Il n’y a plus qu’à rajouter le disque réparé
dans la matrice RAID avec l’option -a (--add) :
# mdadm /dev/md0 -a /dev/hda8
mdadm: hot added /dev/hda8
# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 hda8[2] hda10[1] hda9[0]
104320 blocks [2/2] [UU]
# mdadm --detail /dev/md0
State : clean
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1
Number Major Minor RaidDevice State
0 3 9 0 active sync /dev/hda9
1 3 10 1 active sync /dev/hda10
2 3 8 -1 spare /dev/hda8
...
Le disque /dev/hda8 a été remis et est devenu le nouveau disque de secours.
7. Arrêt et redémarrage manuels des volumes RAID
On peut arrêter ponctuellement une matrice RAID avec l’option -S (--stop) après avoir démonté le
périphérique :
# mdadm --stop /dev/md0
Et on redémarre une matrice RAID avec l’option -As (--assemble -scan), cela implique que le fichier
/etc/mdadm.conf est correctement renseigné (--scan recherche les informations du volume RAID).
# 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 du volume RAID en cours n’est pas encore terminée :
# mdadm --run /dev/md0
8. Suppression définitive d’un volume RAID
Pour supprimer définitivement le volume RAID, il faut supprimer les informations des superblocs des disques composant le
RAID. C’est là que sont écrites les informations sur le volume RAID, la suppression de ces informations s’effectue avec l’option
--zero-superblock :
# mdadm --zero-superblock /dev/sdb2 /dev/sdb3