💾 RAID, mdadm et LVM

Bloc B2 Module M2.2 BTS SIO SISR 3h30
FormationBTS SIO option SISR — IRIS Mediaschool
BlocB2 — Réseaux et sécurité
ModuleM2.2 — Services réseau et systèmes
CompétenceB2.3
Durée3h30

🎯 Introduction (10 min)

En 2019, le CHU de Rouen a subi une attaque par ransomware (Ryuk) qui a chiffré des données critiques ; les équipes ont découvert que les « sauvegardes » étaient stockées sur un RAID partagé et n'avaient pas été testées depuis six mois. La combinaison d'un RAID mal conçu pour les sauvegardes et l'absence de tests a contraint le CHU à trois semaines de restauration manuelle et d'intervention intensive. Cette séance montre pourquoi RAID n'est pas une sauvegarde et comment concevoir des solutions de stockage tolérantes et administrables.

💡 À l'issue de cette séance, vous serez capable de :
  • Expliquer les différents niveaux RAID (0/1/5/6/10), leurs forces, faiblesses et exigences matérielles.
  • Créer et administrer un ensemble RAID logiciel avec mdadm sur Proxmox/Debian, formater en ext4 et monter le volume.
  • Mettre en place LVM sur un périphérique RAID et décrire les notions fondamentales de ZFS (raidz, CoW, snapshots).

1 — Niveaux RAID et principes (45 min)

Le RAID (Redundant Array of Independent Disks) est une technique combinant plusieurs disques physiques pour améliorer la performance, la capacité ou la tolérance aux pannes. Il existe plusieurs niveaux classiques ; ci-dessous une explication en prose avec les caractéristiques essentielles et un exemple concret d'usage pour une PME comme InnovatTech.

RAID 0 (striping) répartit les blocs de données sur plusieurs disques pour augmenter les performances en lecture/écriture. Il n'offre aucune redondance : la panne d'un disque entraîne la perte totale du volume. Utilisation : espaces temporaires haute performance (scratch), jamais pour les données uniques.

RAID 1 (mirroring) duplique les données sur au moins 2 disques. Avantage : lecture plus rapide dans certains cas, tolérance à la panne d'un disque. Inconvénient : capacité effective = 1/n (pour 2 disques, 50 %). Usage : petits systèmes critiques (ex : contrôleur AD, petite VM critique).

RAID 5 (parité distribuée) nécessite au minimum 3 disques ; une seule panne est tolérée. Les blocs de parité sont distribués sur tous les disques, ce qui permet la reconstruction après panne mais affecte les performances d'écriture (calcul de parité). Usage : compromis stockage/fiabilité pour NAS PME (ex : nas01 chez InnovatTech) — attention à la durée de reconstruction qui expose à une seconde panne.

RAID 6 (double parité, raidz2 en ZFS) nécessite au minimum 4 disques et tolère la panne de 2 disques. C'est recommandé quand les disques sont volumineux (temps de reconstruction long) ou pour tolérer défaillances multiples.

RAID 10 (stripe of mirrors) combine mirroring et striping : minimum 4 disques. Il offre de bonnes performances et une haute tolérance (selon quels disques tombent), mais avec un coût en capacité (50 %). Usage : bases de données ou VM avec IOPS élevés.

Schémas RAID

RAID5 (3 disques minimum) :
+-------+   +-------+   +-------+
| Disk1 |   | Disk2 |   | Disk3 |
| A | P |   | A2| P2|   | A3| P3|
+-------+   +-------+   +-------+
parité distribuée -> tolérance 1 disque

RAID10 (4 disques min) :
+--------+   +--------+
| Mirror1|   | Mirror2|
| D1  D1'|   | D2  D2'|
+--------+   +--------+
striping entre mirrors -> tolérance selon disques

Tableau récapitulatif

NiveauDisques min.Tolérance pannesCapacité utileUsage typique
RAID 020100 %Scratch, cache temporaire
RAID 121 (n-1)50 %Contrôleur AD, VM critique
RAID 531(n-1)/nNAS PME, fichiers
RAID 642(n-2)/nGrands volumes, archivage
RAID 1041 par mirror50 %BDD, VM haute IOPS
⚠️ RAID ≠ Sauvegarde

RAID protège contre la défaillance matérielle mais pas contre la suppression accidentelle, la corruption logique ou un ransomware — il faut des sauvegardes séparées et testées.

1.1 — Commandes mdadm et sorties attendues (30 min)

Nous utilisons mdadm sur Debian 12 / Proxmox VE 8.0 (proxmox01). La création d'un ensemble RAID efface les métadonnées et potentiellement les données des disques concernés ; toujours vérifier les périphériques (/dev/sdX) avant d'exécuter.

Création d'un RAID 5

# Contexte : exécution en root sur proxmox01 (Proxmox VE 8.0 / Debian 12)
mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd
# Sortie attendue (extrait) : mdadm vous demande de confirmer ; ensuite :
# mdadm: array /dev/md0 started.

Vérifier l'état du RAID

mdadm --detail /dev/md0
# Sortie attendue (extrait) :
# /dev/md0:
#           Version : 1.2
#     Creation Time : Mon Jun 20 10:00:00 2025
#        Raid Level : raid5
#        Array Size : 1953125000 (1863.01 GiB 2000.59 GB)
#     Used Dev Size : 976562500 (931.51 GiB 1000.29 GB)
#      Raid Devices : 3
#     Total Devices : 3
#           State : clean

Moniteur d'activité temps réel

cat /proc/mdstat
# Sortie attendue (extrait) :
# Personalities : [raid5]
# md0 : active raid5 sdd[2] sdc[1] sdb[0]
#       1953125000 blocks super 1.2 512k chunks
#       [UUU]
#
# unused devices: <none>

Simuler une panne et reconstruire

# Marquer /dev/sdd comme défaillant
mdadm --fail /dev/md0 /dev/sdd

# Supprimer le périphérique de l'ensemble
mdadm --remove /dev/md0 /dev/sdd

# Ajouter un disque de remplacement /dev/sde
mdadm --add /dev/md0 /dev/sde

# Surveiller la reconstruction (toutes les 5 secondes)
watch -n 5 cat /proc/mdstat
💡 Temps de reconstruction

La reconstruction peut prendre plusieurs minutes à plusieurs heures selon la taille des disques et la charge I/O. Pendant la reconstruction, la tolérance aux pannes est réduite — une deuxième panne serait fatale pour un RAID 5.

2 — LVM sur RAID (30 min)

Mettre LVM au-dessus d'un RAID logiciel est une pratique courante : le RAID fournit la tolérance matérielle, LVM fournit la flexibilité (snapshots, redimensionnement, volumes logiques).

Concepts LVM

TermeDescription
PV (Physical Volume)Disque ou partition physique initialisé pour LVM
VG (Volume Group)Regroupement de PV en un pool de stockage logique
LV (Logical Volume)Partition logique créée dans un VG, utilisable comme disque
SnapshotCopie cohérente à un instant T d'un LV (sauvegarde, test)

Mise en œuvre LVM sur /dev/md0

# Après avoir créé /dev/md0 (RAID5)
pvcreate /dev/md0
vgcreate vg-prod /dev/md0
lvcreate -n lv_data -l 100%FREE vg-prod

# Formatage et montage
mkfs.ext4 /dev/vg-prod/lv_data
mkdir -p /mnt/data
mount /dev/vg-prod/lv_data /mnt/data

# Pour monter automatiquement au démarrage, ajouter dans /etc/fstab :
# /dev/vg-prod/lv_data  /mnt/data  ext4  defaults  0 2

Les snapshots LVM peuvent être utilisés pour sauvegarder un état cohérent avant une opération critique, mais attention aux performances et à la place disque consommée.

3 — Notions ZFS (25 min)

ZFS est un système de fichiers et gestionnaire de volumes combiné, avec des fonctionnalités avancées : pools (zpool), raidz1/raidz2 (équivalents RAID5/6), CoW (copy-on-write), compression transparente et snapshots natifs. Contrairement à LVM+ext4, ZFS gère intégralement l'intégrité des données (checksums) et la réparation silencieuse lors de la lecture/réplication.

Fonctionnalités clés ZFS

FonctionnalitéDescription
zpoolPool de stockage regroupant plusieurs disques (raidz1, raidz2, mirror…)
raidz1 / raidz2Équivalents RAID5 / RAID6 gérés nativement par ZFS
CoW (Copy-on-Write)Chaque écriture crée une nouvelle version, l'ancienne reste intacte → base des snapshots
ChecksumIntégrité vérifiée à chaque lecture ; corruption silencieuse détectée et réparée
SnapshotCopie instantanée, cohérente et quasi gratuite en espace (grâce au CoW)
ARC (Adaptive Replacement Cache)Cache en RAM adaptatif — nécessite un bon dimensionnement mémoire

Commandes ZFS de base (notions)

# Créer un pool raidz1 (équivalent RAID5, 3 disques)
zpool create tank raidz1 /dev/sdb /dev/sdc /dev/sdd

# Voir l'état du pool
zpool status

# Créer un dataset et activer la compression
zfs create tank/data
zfs set compression=on tank/data

# Créer un snapshot avant une mise à jour
zfs snapshot tank/data@avant_maj

# Lister les snapshots
zfs list -t snapshot
💡 ZFS vs LVM+ext4

ZFS est recommandé pour des environnements où l'intégrité des données et les snapshots sont essentiels (NAS, serveurs de fichiers critiques). Il nécessite un soin particulier lors du dimensionnement de la mémoire (ARC) et du choix des disques.

💻 Travaux Pratiques (120 min)

Contexte du TP

Vous êtes technicien chez InnovatTech SARL. Sur proxmox01 (Proxmox VE 8.0), l'équipe vous demande de créer un volume RAID logiciel pour y stocker des données de VM. Trois disques virtuels vides (/dev/sdb, /dev/sdc, /dev/sdd) sont disponibles.

Objectif

Construire un RAID5 logiciel avec mdadm, formater en ext4, le monter sur /mnt/data, simuler la panne d'un disque (/dev/sdd) puis effectuer la reconstruction en remplaçant par un disque /dev/sde ; mesurer le temps de reconstruction et produire un rapport.

Prérequis techniques

  • Accès root sur proxmox01 (Proxmox VE 8.0 / Debian 12)
  • Trois disques vides attachés à la VM : /dev/sdb /dev/sdc /dev/sdd
  • Espace pour un disque de remplacement /dev/sde
  • Outils : mdadm, lsblk, fdisk, mkfs.ext4, watch

Étape 1 — Vérifier les disques disponibles

lsblk -o NAME,SIZE,TYPE,MOUNTPOINT
# Vérifier que /dev/sdb /dev/sdc /dev/sdd sont présents et non montés

Étape 2 — Créer le RAID5

# ATTENTION : cette commande efface les disques indiqués
mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd

# Initialiser le fichier de configuration mdadm pour le démarrage
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
update-initramfs -u

Étape 3 — Vérifier l'état initial

mdadm --detail /dev/md0
cat /proc/mdstat

Étape 4 — Formater et monter en ext4

mkfs.ext4 -L data_md5 /dev/md0
mkdir -p /mnt/data
mount /dev/md0 /mnt/data

# Vérifier le montage
mount | grep /mnt/data
df -h /mnt/data

Étape 5 — Mesurer une opération d'écriture (optionnel)

# Créer un fichier de test de 1 Go pour générer des I/O
dd if=/dev/zero of=/mnt/data/testfile bs=1M count=1024 oflag=direct
sync

Étape 6 — Simuler la panne du disque /dev/sdd

# Avant : noter l'heure de début
date '+%s' > /root/rebuild_start

# Simuler la panne
mdadm --fail /dev/md0 /dev/sdd
mdadm --remove /dev/md0 /dev/sdd

# Vérifier l'état réduit (doit afficher [UU_])
cat /proc/mdstat

Étape 7 — Remplacer le disque et reconstruire

# Ajouter le nouveau disque à l'ensemble
mdadm --add /dev/md0 /dev/sde

# Surveiller la reconstruction (toutes les 10 secondes)
watch -n 10 cat /proc/mdstat

Étape 8 — Mesurer le temps de reconstruction

# Une fois la reconstruction terminée, relever l'heure de fin
date '+%s' > /root/rebuild_end

# Calculer la durée en secondes
awk 'NR==1{start=$0} NR==2{end=$0} END{print end-start " secondes"}' \
  /root/rebuild_start /root/rebuild_end

Étape 9 — Vérifier l'intégrité et le montage

mdadm --detail /dev/md0
cat /proc/mdstat
ls -la /mnt/data

# S'assurer que les fichiers test sont lisibles
md5sum /mnt/data/testfile

📋 Livrable attendu

Un rapport (1 page) contenant :

  • Sortie de mdadm --detail /dev/md0 avant et après reconstruction
  • Captures de /proc/mdstat (initial, pendant la reconstruction, fin)
  • Durée mesurée de reconstruction en secondes/minutes
  • Courte analyse des risques (reconstruction longue → exposition à perte de données → proposition d'amélioration)

✅ Critères de réussite

  • Le RAID /dev/md0 est en état clean et actif après reconstruction.
  • /mnt/data est monté et accessible en lecture/écriture.
  • La reconstruction s'est terminée sans erreurs et la durée a été mesurée et documentée.

📌 Synthèse (10 min)

Cette séance a montré que les différents niveaux de RAID répondent à des besoins distincts : performances (RAID0), redondance simple (RAID1), compromis capacité/tolérance (RAID5), et sécurité renforcée pour grands volumes (RAID6/RAID10). Nous avons mis en pratique la création d'un RAID logiciel avec mdadm, observé la gestion d'une panne et la reconstruction, et vu comment LVM peut être posé au-dessus d'un RAID pour plus de souplesse.

⚠️ Rappel fondamental

RAID n'est PAS une stratégie de sauvegarde — il faut des sauvegardes externes et testées. Un RAID5 sur de grands disques modernes peut exposer à une seconde panne pendant la reconstruction (durée de reconstruction > 24h pour des disques de plusieurs To).

❓ Question de vérification

En une phrase, expliquez pourquoi RAID5 peut être risqué sur des disques très volumineux.

Réponse

Sur des disques de plusieurs To, la reconstruction après panne peut durer plusieurs dizaines d'heures pendant lesquelles une deuxième panne détruirait définitivement les données, car RAID5 ne tolère qu'une seule panne simultanée.

🎮 Quiz — Testez vos connaissances

  1. Q1 (QCM) — Quelle est la principale différence entre RAID 5 et RAID 6 ?
    • A) RAID 5 nécessite 4 disques minimum, RAID 6 seulement 3
    • B) RAID 6 tolère la panne de 2 disques simultanément, RAID 5 une seule
    • C) RAID 5 utilise le mirroring, RAID 6 le striping
    • D) RAID 6 n'utilise pas de parité, contrairement à RAID 5
  2. Q2 (QCM) — Quelle commande permet de surveiller en temps réel la reconstruction d'un ensemble RAID sous Linux ?
    • A) mdadm --status /dev/md0
    • B) watch -n 5 cat /proc/mdstat
    • C) lsblk --raid /dev/md0
    • D) fdisk -l /dev/md0
  3. Q3 (Vrai/Faux) — « Un RAID 1 sur deux disques protège contre la suppression accidentelle d'un fichier. » — Vrai ou Faux ?
  4. Q4 (QCM) — Dans LVM, quel est le rôle de la commande pvcreate /dev/md0 ?
    • A) Créer un volume logique (LV) nommé md0
    • B) Initialiser /dev/md0 comme volume physique LVM (PV)
    • C) Formater /dev/md0 en ext4
    • D) Monter /dev/md0 dans /mnt/data
  5. Q5 (QCM) — Qu'est-ce que le CoW (Copy-on-Write) dans ZFS ?
    • A) Un mécanisme de compression des données à la volée
    • B) Une technique où chaque écriture crée une nouvelle version des blocs, permettant des snapshots instantanés
    • C) Un protocole de réplication réseau entre pools ZFS
    • D) Un algorithme de parité équivalent à RAID 6
📝 Corrections
  1. B — RAID 6 tolère la panne de 2 disques simultanément, RAID 5 une seule. RAID 6 utilise une double parité, ce qui le rend plus résilient mais nécessite au moins 4 disques et réduit davantage la capacité utile.
  2. B — watch -n 5 cat /proc/mdstat. Le fichier /proc/mdstat contient l'état de tous les ensembles RAID actifs avec leur progression de reconstruction ; watch le rafraîchit toutes les 5 secondes.
  3. Faux. Le RAID 1 duplique les données en temps réel : si un fichier est supprimé sur un disque, il l'est sur tous les miroirs simultanément. RAID ne protège que contre les pannes matérielles, pas les suppressions logiques.
  4. B — Initialiser /dev/md0 comme volume physique LVM (PV). pvcreate écrit les métadonnées LVM sur le périphérique pour qu'il puisse être ajouté à un groupe de volumes (VG) via vgcreate.
  5. B — Chaque écriture crée une nouvelle version des blocs, permettant des snapshots instantanés. Grâce au CoW, un snapshot ZFS ne copie pas les données existantes mais référence simplement les blocs d'origine ; seuls les blocs modifiés ultérieurement occupent de l'espace supplémentaire.