S2C5A Sûreté du stockage : RAID

SIO > S2_SISR > S2C04_stockage > S2C5A Stockage RAID.md

Introduction

Prérequis : Consulter le cours du 1er semestre sur le matériel et particulièrement sur le stockage

Pourquoi ?

Parce que les disques sont fragiles :

  • Vibrations, vieillissement, chaleur, obsolescence, court-circuit, ...
    • Il faut s'assurer que lors d'une panne on ne perde pas toutes les données
    • disques en double, en triple

Parce que les disques sont lents :

  • S'il fallait une seconde pour chercher une données en RAM, il faudrait près de 23 jours pour extraire une donnée d'un disque magnétique !!!
    • Il faut augmenter le débit de lecture/écriture
    • écriture en parallèle sur plusieurs disques

La réponse : multiplier les supports de stockage :

  • Disque en parallèle : écriture parallèle sur plusieurs disques
  • Disque de copie : copie fidèle (miroir) ou division des données et somme de contrôle pour les reconstruire

Les RAID

Le RAID consiste à multipliser les disques pour écrire plus vite et/ou pour augmenter la sûreté/sécurité du stockage.
La capacité de stockage dépend du RAID utilisé. Dans certains cas, on aura une capacité "utile" inférieure à la somme des capacités des disques.
Le RAID est soit formé par le microcode de la carte mère ou la carte contrôleur des disques (RAID matériel), soit par le système d'exploitation ou un logiciel pilote spécialisé (RAID logiciel).

Surface initiale perdue :
Comme les données sont réparties ou copiées sur plusieurs disques qui formeront un volume unique, il est préférable que la capacité matérielle de chaque disque soit identique.
De plus, pour optimiser les traitements du RAID, il est conseillé d'avoir, outre une même capacité, une même marque et un même modèle de disques.

Les capacités excédentaires au plus petit disque sont en général perdues.
Cependant, la surface disque "perdue" peut parfois être utilisée comme partition indépendante hors RAID.
Ce n'est évidemment pas recommandé afin de conserver l'intégrité des algo de RAID et ne pas surcharger un disque par rapport aux autres de la grappe RAID.

Capacité utile apparente :
La capacité utile dépend du RAID utilisé. Cependant, le système (et l'utilisateur) ne voit qu'un seul volume (disque).

RAID0, Stripping

(D1,D2,D3)->-+------------+------------+ 
             | D1         | D2         | D3
             v            v            v 
          Disque 1     Disque 2     Disque 3
          +------+     +------+     +------+
          |  D1  |     |  D2  |     |  D3  |
          +------+ - - +------+ - - +------+ - - -
          |  D4  |     |  D5  |     |  D6  |	Bande (strip) 
          +------+ - - +------+ - - +------+ - - -
          |      |     |      |     |      |
          +------+     +------+     +------+ 
Principes

  • Minimum 2 disques
  • Capacité utile = surface du plus petit disque (S0) multiplié par le nombre N de disques (S = N*S0).

Le stockage est fractionné : si on a 2 disques, on écrit une partie des données sur un disque, l'autre sur un second disque.

  • Meilleur taux d'écriture (Vécriture*n) : plusieurs données écrites en parallèle, une sur chaque disque.
  • Les données sont écrites par "bandes" (strips).

Attention : RAID 0 = 0 sécurité !!!

Exemple de calculs

Soit un grappe de 3 disques de 1, 2 et 4To.

  • Capacité utile = S0*N = 3*1To = 3To,

Sûreté

Aucune sécurité, Si un disque lâche, on perd toutes les données car elles sont fractionnées

Conclusion

  • Capacité utile = N*S0
  • Perte acceptable = 0 disque.

Synthèse :

  • RAID 0 est un système d'accélération de l'écriture
  • RAID 0 n'est pas un système de sécurisation

RAID1, Mirorring

(D1)------->-+------------+------------+ 
             | D1         | D1         | D1
             v            v            v 
          Disque 1     Disque 2     Disque 3
          +------+     +------+     +------+
          |  D1  |     |  D1  |     |  D1  |
          +------+ - - +------+ - - +------+ - - -
          |  D2  |     |  D2  |     |  D2  | Données copiées N fois 
          +------+ - - +------+ - - +------+ - - -
          |      |     |      |     |      |
          +------+     +------+     +------+ 
Principes

  • Minimum 2 disques
  • Capacité utile = surface du plus petit disque (S0).

Chaque donnée est stockée (copiée) sur chaque disque. On a donc une perte apparente de capacité égale à la somme des surfaces des disques moins celle du plus petit disque (S = Σ(Sn) - S0).

Attention : Si le RAID 1 est assuré par le système (RAID logiciel) il peut apparaître une perte de vitesse d'écriture car l'OS doit reproduire chaque écriture sur chaque disque.

Exemple de calculs

Soit un grappe de 3 disques de 1, 2 et 4To.

  • Capacité utile = S0 = 1To

Sûreté

Sécurité maximale grâce à la duplication (copie) des données. Tant qu'il reste un disque, les données sont conservées.

  • perte acceptable = N-1 disques.

Conclusion

  • Capacité utile = S0 : capacité du plus petit disque
  • Perte acceptable = N-1 disque.

Remarque : Le débit n'est pas amélioré, voire ralenti

Synthèse

Exellente sécurité … pour gros budget

RAID5, le plus courant

(D1,D2)---->-+------------+------------+ 
             | D1         | D2         | P1=D1+D2
             v            v            v 
          Disque 1     Disque 2     Disque 3
          +------+     +------+     +------+
          |  D1  |     |  D2  |     | (P1) |
          +------+ - - +------+ - - +------+ - - -
          |  D3  |     | (P2) |     |  D4  |	
          +------+ - - +------+ - - +------+ - - -
          | (P3) |     |  D5  |     |  D6  |
          +------+ - - +------+ - - +------+ - - -
          |      |     |      |     |      |
          +------+     +------+     +------+ 
Principes

  • Minimum 3 disques
  • Capacité utile = capacité de N-1 disques

Les données sont écrites par bande, comme en RAID 0 mais on utilise un espace par bande (pas toujours le même) pour écrire une somme de contrôle.
Cette somme de contrôle permet de retrouver une donnée perdue en cas de perte d'un disque (voir exemple plus bas).
La somme de contrôle n'est pas écrite sur le même disque à chaque bande, cela permet d'optimiser la vitesse d'acriture, la surface et la résistance aux pertes.

On obtient une accélération de l'écriture (comme en raid0) avec une sécurité des données (comme en raid1).
Même si séparément les gains sont moindres la combinaison des gains offre globalement une meilleure performance.

### Exemple de calcul de somme de contrôle ###
// XOR de parité : exemple en analogie avec une … addition
	Soit 
		A=5 et B=2 
	Calculer 
		P = A+B = 7
 
	Si on perd A, on le retouve aisément en effectuant : 
		A = P-B = 7-2 = 5
CQFD

Les inconvénients sont :

  • Moyen pour les gros fichiers
  • Ralenti si RAID logiciel (calcul de parité, écriture répartie, …)

Sûreté

Sécurité excellente, ressources optimisées

  • n données+parité de contrôle (d1 xor d2=P)
  • 1 donnée peut être retrouvée, parité pas tjrs sur le même disque

La perte de volume est limitée à un disque mais certains systèmes proposent d'utiliser un disque "spare" qui est reconstruit à la volée.

Conclusion

  • Capacité utile = (N-1)*S0 : somme des disques moins la somme da parité
  • Perte acceptable = 1 seul disque !

Remarque : Le débit n'est pas amélioré, voire ralenti

Synthèse

Exellent compromis entre la sécurité, le budget et la vitesse d'accès aux données.
Le meilleur système mais les boitiers doivent faire de la place pour les disques :D

Possibilité d'ajouter un disque "spare" qui sera automatiquement utilisé en cas de perte d'un disque. Dans certains systèmes, il peut être changé à chaud.

RAID10, 01 et les autres

RAID 0 (D1,D2)->--+------------------------+ 
                  | D1                     | D2
                  v                        v 
RAID 1 x 2   +----------+            +----------+ 
             | D1       | D1         | D2       | D2  
             v          v            v          v  
          Disque 1   Disque 2     Disque 3   Disque 4
          +------+   +------+     +------+   +------+
          |  D1  |   |  D1  |     |  D2  |   |  D2  |
          +------+ - +------+     +------+ - +------+
          |  D3  |   |  D3  |     |  D4  |   |  D4  |
          +------+ - +------+     +------+ - +------+
          |      |   |      |     |      |   |      |
          +------+   +------+     +------+   +------+ 
 
                 RAID10 = RAID 1 +0 de bas en haut


Les RAID 01 et 10 sont simplement des Mix des raid 0 et 1 (premier chiffre = grappe la plus basse).
Ils cumulent les avantages et les inconvénients des solutions individuelles.
Le plus sécurisé est le raid 50 (2 grappes de raid 5 associées en raid 0).

Autres mix :

  • RAID propriétaires
  • RAID 6
    • double parité …
    • plus de sécu permettant plus de perte (2 disques maxi)
  • RAID 7
    • 3 disques de données, un controleur + un disque de parité
    • une troisième parité ?
    • un délire russe ?
    • controleur tmp réel = un OS embarqué chargé de la gestion du stockage et des parités.

RAID2, 3 et 4 : ces RAID sont des variantes obsolètes, précurseurs du RAID 5.

Disque spare

Un disque spare est un disque de rechange qui peut remplacer à chaud (sans éteindre les disques et la machine) un disque défaillant dans une grappe.
Très utile pour augmenter la sûreté d'une grappe RAID 1 ou 5.
Inutile sur un RAID 0 car les données perdues sont ... perdues et ne peuvent être reconstituées.

Créer un RAID

RAID 1 logiciel

RAID 1 sous Windows Server

Au préalable, Il nous faut deux disques vides (pas de volume installé), si possible de même capacité. La différence sera perdue.
Dans une VM, il est très facile d'ajouter des disques virtuels. C'est l'exercice qui sera proposé en TP.

  • Entrer dans le gestionnaire de disques
  • choisir l'un des disques vides dont l'espace est "non alloué",
  • Clique droit sur l'un des disques non alloués pour créer un Nouveau volume en miroir et suivre les demandes de l'assistant :
    • choix du second disque,
    • lettre,
    • système de fichier (ntfs par défaut)
  • formater le nouveau volume.

Le système synchronise automatiquement les disques et crée le RAID 1.

Dans les versions récentes, il existe aussi un possibilité en passant par le Gestionnaire de stockage (Windows Storage Spaces).
Le disque miroir créé est en fait une synchronisation entre deux disque et non un vrai RAID. Mais avec deux disques seulement, c'est équivalent en termes de sécurité.

Vérifier un RAID 1 !

  • Voir si le nouveau volume (disque) apparaît dans l'arborescence de l'explorateur. Il n'est pas posible de voir ce que chaque disque contient indépendamment de l'autre.
    Cependant, en cas de panne d’un disque, les données restent accessibles sur l’autre. C'est le test qui doit être fait en TP, ainsi que la reconstruction de la grappe.

RAID 1 sous Linux

Même conditions préalables que pour Windaube.
Les deux disques sont vides, non formatés et détectés sous les noms de /dev/sdb et /dev/sdc
On vérifie les disques disponibles avec les commande lsblk ou fdisk \-l. On devrait voir les disques (non formatés) /dev/sdb et /dev/sdc.

Solution 1, avec mdadm

  1. Installer mdadm
  2. Créer le RAID 1 avec la commande :

[bash]
mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc

  • /dev/md0 est le nouveau périphérique RAID.
  • --level=1 = RAID 1
  • --raid-devices=2 = nombre de disques utilisés.
  • --verbose n'est pas nécessaire, juste pour voir les messages

  1. Vérifier l’état du RAID : lsblk ou lsblk puis :

[bash]
cat /proc/mdstat
mdadm --detail /dev/md0

La synchronisation est en cours...

  1. Formater le RAID et le monter

[bash]
mkfs.ext4 /dev/md0 # formater le volume RAID en ext4
mkdir /mnt/my_raid1_disk # créer le point de montage pour le volume
mount /dev/md0 /mnt/my_raid1_disk # monter le volume RAID
df -h	// vérifier le volume
Rendre le montage du RAID persistant

Montage :
Par défaut, les disques sont vus comme de simples fichiers qui sont placés dans le répertoire /dev.
Pour qu'ils soient accessibles, on va les "monter" dans le système de fichier, les brancher à l'arborescence des répertoires avec la commande mount.
Pour cela, il faut qu'un répertoire existe, par exemple /mnt/raid1, créé avec mkdir, puis que la commande mount "brenche" le fichier-dissque dans ce répertoire.
Et voilà, le contenu du disque devient accessible.


Pour rendre le montage persistant au redémarrage, il faut ajouter les commandes suivantes :

  1. ajouter le RAID au fichier /etc/fstab : table (tab) des systèmes de fichier (fs) :

[bash]
echo '/dev/md0 /mnt/my_raid1_disk ext4 defaults 0 0' >> /etc/fstab

  1. mettre à jour la configuration de mdadm :

[bash]
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
update-initramfs -u # mise à jour de l'image d'accès aux disques durant le boot
Tester le RAID 1

Simple : on débranche un disque et on vérifie si les données sont toujours accessibles.

Solution 2, avec lvm (préférée)

LVM (Logical Volume Manager) est un outils de gestion des disques physiques qui peut être installé au moment de l'initialisation du système dans Linux.

  • Il gère les partitions physiques et
  • peut déplacer les données entre les différents volumes,
  • utiliser plusieurs disques pour en faire un seul volume et
  • utiliser plusieurs disque pour faire un miroir (RAID 1).

Normalement, si on a choisi l'option à l'installation, les commandes suivantes devraient être accessibles. sinon, installer lvm avec apt.

  1. Créer le volume physique (PV - physical volume) : pvcreate /dev/sdb /dev/sdc puis vérifierpvs
  2. Créer le groupe de volumes (VG - volume group) : vgcreate vg_raid1 /dev/sdb /dev/sdc puis vérifier avec vgs
  3. Créer un volume logique (LV - Logical volume) en mode miroir du groupe de volumes puis vérifier :

[bash]
lvcreate -L 1G -m1 -n lv_mirror vg_raid 	# créer le volume logique lv_mirror avec le groupe vg_raid
lvs -a -o +devices # vérifier : affficher la liste des volumes

Paramètres :

  • -L 1G = taille du volume (1Go).
  • -m1 = RAID 1 (miroir 1).
  • -n lv_mirror = nom du volume logique.
  • vg_raid1 = le groupe de volumes précédent, créé avec vgcreate.

La taille du volume peut être inférieure à celle du groupe ... On peu alors créer plusieurs volumes en RAID

  1. formater le volume et le monter (remarquer que le chemin est différent qu'avec mdadm mais la procédure identique)

[bash]
mkfs.ext4 /dev/vg_raid/lv_mirror # formater le volume logique du groupe de volumes
mkdir /mnt/my_raid1_disk	# créer le dossier de montage comme avant
mount /dev/vg_raid/lv_mirror /mnt/my_raid1_disk # monter le volume (mais pas trop fort pour ne pas gêner les voisins ;P)
df -h # vérifier

Pour rendre le montage persistant au redémarrage, il faut ajouter la ligne suivante à la table des systèmes de fichiers, comme avant :

[bash]
echo '/dev/vg_raid/lv_mirror /mnt/my_raid1_disk ext4 defaults 0 0' >> /etc/fstab # Attn le chemins a changé par rapport à mdadm

Tester comme avant ou avec la commande

[bash]
vgreduce --removemissing vg_raid1

Voir l'article suivant qui explique bien l'utilisation de LVM : LinuxTricks : LVM

Ci-dessous, le schéma des couches de LVM et les commandes associées à chaque couche :

LinuxTricks : LVM

  • FS : mkdir et mount
  • Formatage (ext4fs) : mkfs
  • créer les volumes logiques : lvcreate
  • créer le groupe : vgcreate
  • associer les disques a LVM : pvcreate

Et voilà.

A noter que LVM permet aussi de déplacer physiquement les données de disque en disque afin de pouvoir remplacer un disque physique, sans arrêter la machine, si celle-ci admet l'ajout de disque à chaud.

RAID 5

Ce sont les mêmes procédures mais il faut avoir trois disques disponibles et choisir l'option avec RAID 5.

Les différences des procédures et commandes sont les suivantes :

Windows

  • choisir d'ajouter un volume RAID 5 et non miroir.

Linux

  • mdadm : choisir le niveau level=5 dans la commande mdadm et raid-device=3 au mini
  • lvm : utiliser 3 disques pour les commandes pgcreate et vgcreate et la commande lvcreate est modifiée comme suit :

[bash]
lvcreate -L 1G -i2 -n lv_raid5 --type raid5 vg_raid # créer le volume logique lv_raid avec le groupe vg_raid   

  • -i2 = nombre de disques de données = N-1 (ici 2) à la place de -m1 (mirror raid1)
  • --type raid5 = type de raid choisi, nouveau paramètre dans la commande

Synthèse

RAID 0 RAID 1 RAID 5 RAID 01 RAID 10
Nombre de disque minimum 2 2 3 4 (n pair) 4 (n pair)
Rapidité en lecture (par rapport à un disque simple) Très rapide Rapide Très rapide Rapide Rapide
Rapidité en écriture (par rapport à un disque simple) Très rapide Rapide Très rapide Rapide Rapide
Espace disque utilisable (pour N disques composant le grappe, et C la capacité du plus petit disque) N*C C (N-1)*C (N/2)*C (N/2)*C
Nombre de disques pouvant être défectueux sans perte de données (pour N disques composants le grappe) 0 N-1 1/N
Part d'espace perdu en fonction du nombre N de disques 0% 1-1/N 1/N

A suire : les NAS et SAN