RAID (Français)
Introduction
Source Wikipédia, RAID :
En informatique, le mot RAID désigne les techniques permettant de répartir des données sur plusieurs disques durs afin d'améliorer soit la tolérance aux pannes, soit la sécurité, soit les performances de l'ensemble, ou une répartition de tout cela.
L'acronyme RAID a été défini en 1987 par l'Université de Berkeley, dans un article nommé A Case for Redundant Arrays of Inexpensive Disks (RAID), soit « regroupement redondant de disques peu onéreux ». Aujourd'hui, le mot est devenu l'acronyme de Redundant Array of Independent (or inexpensive) Disks, ce qui signifie « regroupement redondant de disques indépendants ». Le coût au mégaoctet des disques durs ayant diminué d'un facteur 1 300 000 en 29 ans, aujourd'hui le RAID est choisi pour d'autres raisons que le coût de l'espace de stockage.
Niveaux standard de RAID
Il existe différents niveaux de RAID, dont certains assez courants :
- RAID 0
- C'est un volume agrégé par bandes, il rassemble tous les disques en un. Utilisable à partir de deux disques.
- Avantage : autant d'espace de stockage que la totalité des disques. Division des temps de lecture/écriture par le nombre de disque.
- Inconvénient : aussi fiable qu'un seul disque.
- RAID 1
- Chaque disque du RAID est en miroir. Utilisable à partir de deux disques (de préférence de même capacité).
- Avantage : aussi fiable que la totalité des disques.
- Inconvénient : autant d'espace de stockage qu'un seul disque.
- RAID 5
- Comme le RAID 0 mais avec un des blocs de parités répartis dans le RAID, ce qui permet de perdre un disque sans perte de données. Utilisable à partir de trois disques (de préférence de même capacité).
- Avantage : autant d'espace de stockage que n - 1 disques. Presque aussi bonnes performances en lecture que le RAID 0.
- Inconvénient : aussi fiable que 2 disque (un secteur défectueux peut faire considérer le disque comme défectueux). Moins bonnes performances en écriture en raison du calcul de parité.
Niveaux de RAID combinés
- RAID 1+0
- Agrégation de miroirs. Utilisable à partir de quatre disques.
- Avantage : bonne fiabilité puisqu'il faut qu'un miroir (RAID 1) complet soit en défaut pour porter atteinte à toute l'agrégation. Reconstruction rapide.
- Inconvénient : autant d'espace de stockage que de miroirs (qui sont eux-même de la taille du plus petit disque les composant).
- RAID 0+1
- Miroir de volumes agrégés. Utilisable à partir de quatre disques.
- Avantage : pouvoir avoir une copie fonctionnelle en retirant un agrégat du miroir.
- Inconvénient : il suffit d'un disque défectueux par agrégat pour que le miroir soit en défaut. Reconstruction lente.
Mise en œuvre
Il existe différents moyens pour mettre en place un RAID :
- RAID Logiciel
- En RAID logiciel, le contrôle du RAID est intégralement assuré par une couche logicielle du système d'exploitation. Cette couche s'intercale entre la couche d'abstraction matérielle (pilote) et la couche du système de fichiers. Le système d'exploitation peut utiliser :
- RAID Matériel
- Dans le cas du RAID matériel, une carte ou un composant est dédié à la gestion des opérations. Le contrôleur RAID peut être interne à l'unité centrale (carte d'extension) ou déporté dans une baie de stockage.
- RAID Pseudo-matériel (Fake RAID)
- L'extrême majorité des contrôleurs RAID bon marché intégrés à de nombreuses cartes mères récentes en 2004/2005 gèrent souvent le RAID 0 et 1 sur des disques IDE ou SATA, mais ce ne sont pas de réels RAID Matériel, ils n'ont que quelques fonctionnalités d'implantées. dmraid est à utiliser avec ce type de contrôleur. Des exemples de FakeRAID : Intel® Rapid Storage, JMicron JMB36x RAID ROM, AMD RAID, ASMedia 106x...
Installation
Il faut tout d'abord installer le paquet mdadm, ce qui implique de vouloir mettre en place un RAID logiciel.
Préparation des périphériques
Tout d'abord, il est possible qu'il existe des résidus d'anciens RAID, donc il préférable de les supprimer avec la commande :
mdadm --zero-superblock /dev/<périphérique>
Ou bien on peut préciser une partition :
mdadm --zero-superblock /dev/<partition>
Création de la table de partitions
Il est préférable de créer les partitions sur les périphériques avant de mettre en place le RAID logiciel. Par la suite, dès la grappe créée, le code hexadécimal de ces partitions sera FD00. Notez qu'il est recommandé de laisser à peu près 100Mo non-alloués à la fin du disque dur, pour éviter certains problèmes si un jour vous êtes amenés à changer un des périphériques de la grappe.
Création de la grappe
Voici un exemple pour créer un RAID 0 logiciel (par exemple, on veut que ce soit le périphérique /dev/md0) avec deux partitions (/dev/sda1 et /dev/sdb1) :
mdadm --create --verbose --level=0 --metadata=1.2 --chunk=64 --raid-devices=2 /dev/md0 /dev/sda1 /dev/sdb1
Il est aisé d'utiliser un grand nombre de partitions, par exemple si nous voulons créer un RAID 0 (tel /dev/md1) avec la première partition des cinq premiers périphériques :
mdadm --create --verbose --level=0 --metadata=1.2 --chunk=64 --raid-devices=5 /dev/md0 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
On peut faire exactement la même chose, mais en version plus condensée :
mdadm --create --verbose --level=0 --metadata=1.2 --chunk=64 --raid-devices=5 /dev/md0 /dev/sd[abcde]1
Ou bien si on veut un créer RAID 1 avec deux partitions (/dev/sdb1 et /dev/sdc1) :
mdadm --create --verbose --level=1 --metadata=1.2 --raid-devices=2 /dev/md0 /dev/sdb1 /dev/sdc1
Et enfin, si on veut un RAID 5 (périphérique /dev/md0) avec trois partitions (comme /dev/sdb1, /dev/sdc1 et /dev/sdd1)
mdadm --create --verbose --level=5 --metadata=1.2 --chunk=256 --raid-devices=3 /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1
On peut faire la même chose mais avec un périphérique dit de "spare" (il est inutilisé jusqu'à ce qu'un des périphériques soit déclaré défectueux, et dans ce cas il est automatiquement utilisé pour reconstruire la grappe) :
mdadm --create --verbose --level=5 --metadata=1.2 --chunk=256 --raid-devices=3 /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1 --spare-devices=1 /dev/sde1
Les grappes sont créées en tant que périphérique /dev/mdX. Elles sont ensuite démarrées, prêtes à être utilisées (en mode dégradé). Mdadm va resynchroniser la grappe en arrière plan (la durée varie en fonction de la taille de la grappe) on peut donc vérifier l'avancement avec :
cat /proc/mdstat
Assemblage de la grappe
Ne pas oublier de générer un fichier contenant la configuration du RAID (ne pas oublier d'adapter l'emplacement du fichier, utile si vous faites ceci depuis l'installateur) :
mdadm --detail --scan >> /etc/mdadm.conf
Il sera possible d'utiliser la commande suivante pour assembler les grappes par la suite :
mdadm --assemble --scan
Formatage de la grappe
Quelques règles s'imposent pour créer correctement un système de fichier sur la grappe. Le choix en lui-même du système de fichier, ainsi que de certaines valeurs, telles le stride et le stripe width.
Calcul du Stride et du Stripe-width
Le stride est le nombre de blocs lus/écrits avant le passage à un autre disque. Il se calcule ainsi : stride = (chunk size / block size). Pour connaître la taille du morceau (chunk) :
mdadm --detail /dev/mdX | grep "Chunk Size"
Et celle du bloc :
tune2fs -l /dev/mdX | grep "Block size"
Le stripe width est est le nombre de blocs utiles utilisés pas le RAID. Il se calcule avec : stripe-width = (nombre de périphériques contenant des données * stride).
Exemple 1 : RAID 1
Pour formater correctement en Ext4 un RAID 1 constitué physiquement de deux périphériques (prenons Chunk size = 64k et Block size = 4k), il nous faut calculer le stride et le stripe-width (l'utilisation de calc est encouragée pour certaines personnes) :
Rappelons la formule pour calculer le stride : stride = (chunk size / block size). On remplace (ceci est un exemple, mettez vos valeurs) : stride = (64 / 4) = 16.
Et pour le stripe-width : stripe-width = (nombre de périphériques contenant des données * stride). On remplace : stripe-width = (2 * 16) = 32.
Formatons :
mkfs.ext4 -v -L <label_du_disque> -m 0.5 -b 4096 -E stride=16,stripe-width=32 /dev/mdX
Exemple 2 : RAID 5
Pour formater en Ext4 un RAID 5 constitué physiquement de quatre périphériques, dont trois de données et un autre de parité (prenons Chunk size = 256k et Block size = 4k), il nous faut calculer le stride et le stripe-width
On utilise la formule pour le stride : stride = (chunk size / block size). Soit : stride = (256 / 4) = 64.
Et enfin le stripe-width : stripe-width = (nombre de périphériques contenant des données * stride). Donc : stripe-width = (3*64) = 192.
Formatage ;
mkfs.ext4 -v -L <label_du_disque> -m 0.5 -b 4096 -E stride=64,stripe-width=192 /dev/mdX
Ajout à l'image du noyau
Ajoutez le Hook mdadm_udev
dans le fichier de configuration de mkinitcpio pour avoir la prise en charge de mdadm dans l'initramfs :
/etc/mkinitcpio.conf
HOOKS="base udev autodetect block '''mdadm_udev''' filesystems usbinput fsck"
N'oubliez pas de recréer les initramfs :
mkinitcpio -p linux
Montage manuel
Pour monter votre grappe manuellement (par exemple depuis un autre système avec mdadm d'installé), vous pouvez utiliser la commande :
mdadm --assemble /dev/mdX /dev/<partition1> /dev/<partition2> /dev/<partition3> /dev/<partition4> ...
Puis on la monte :
mount /dev/mdX <point de montage>
Démontage
Pour démonter votre grappe, utilisez :
umount /dev/mdX
Puis on peut désactiver la grappe avec :
mdadm --stop /dev/mdX