RAID

De ArchwikiFR
Révision datée du 28 mai 2015 à 17:06 par Xorg (discussion | contributions) (Ajout de la page RAID à la page Partitionnement)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)


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.

Attention : Avant toute action, assurez-vous d'avoir une sauvegarde de vos données, de préférence sur un support différent de ceux de votre machine.

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 :
  • par une couche d'abstraction telle mdadm;
    Note : Ceci est la méthode utilisée dans la suite du Wiki.
  • par un gestionnaire de volume logique (par exemple LVM);
  • par un composant d'un système de fichier (par exemple ZFS).
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

Attention : Ces étapes effacent TOUT sur le périphérique, prudence...

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>
Note : Effacer le superbloc d'une partition ne devrait pas affecter les autres partitions du périphérique.

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

Attention : Il est fortement déconseillé de copier/coller les commandes
Note : Dans le cas d'une partition système en RAID 1, les bootloaders tels GRUB ou Syslinux ont besoin que vous utilisiez les métadonnées en version 1.0.
Astuce : Il est important de bien choisir le chunk. Quelques liens : [[1]], [2], [3]

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
Note : Il n'est pas nécessaire d'utiliser l'option chunk pour un RAID 1.

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

Note : Cette section concerne uniquement les utilisateurs dont le système est installé sur un RAID.

Ajoutez le HOOKS mdadm_udev dans le fichier de configuration de Mkinitcpio pour avoir le support de mdadm dans l'initramfs :

Fichier: /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