Aller au contenu
Administration Linux medium

RAID logiciel sous Linux avec mdadm

10 min de lecture

Le RAID logiciel regroupe plusieurs disques en un seul volume qui survit à la panne de l'un d'eux. Sous Linux, l'outil standard est mdadm : il crée des arrays redondants, les surveille et permet de remplacer un disque à chaud. Ce guide montre comment choisir un niveau RAID, créer un array avec un disque de secours, le rendre persistant et le réparer. Pour administrateurs intermédiaires à avancés, sur Debian, Ubuntu ou RHEL. Commandes testées sur AlmaLinux 10.

  • Choisir le niveau RAID adapté (0, 1, 5, 6, 10)
  • Créer un array mdadm avec un disque de secours
  • Le rendre persistant au démarrage (mdadm.conf + initramfs)
  • Surveiller l'array et remplacer un disque défaillant

Le niveau définit le compromis entre capacité, performance et tolérance de panne. Choisissez-le avant de créer l'array, il ne se change pas facilement ensuite.

NiveauDisques min.Tolérance de panneCapacité utilePour quoi
RAID 02aucune100 %Performance pure, données jetables
RAID 121 disque50 %Disque système, petits volumes critiques
RAID 531 disque(n-1)/nBon compromis capacité / sécurité
RAID 642 disques(n-2)/nGros arrays (reconstruction longue)
RAID 1041 par miroir50 %Performance et redondance (bases de données)

Le disque de secours (spare) est inactif jusqu'à une panne, puis prend le relais automatiquement. C'est ce qui transforme la redondance en résilience sans intervention.

  1. Créer l'array : 3 disques actifs (--raid-devices=3) plus 1 spare (--spare-devices=1).

    Fenêtre de terminal
    sudo mdadm --create /dev/md0 --level=5 \
    --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd \
    --spare-devices=1 /dev/sde
    mdadm: array /dev/md0 started.
  2. Suivre la synchronisation dans /proc/mdstat.

    Fenêtre de terminal
    cat /proc/mdstat
    md0 : active raid5 sde[4](S) sdd[3] sdc[1] sdb[0]
    241664 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

    Le (S) marque le spare. La notation [UUU] donne l'état de chaque disque actif (U = up, _ = en panne) ; ici les 3 sont sains.

  3. Vérifier le détail de l'array.

    Fenêtre de terminal
    sudo mdadm --detail /dev/md0
    Raid Level : raid5
    Array Size : 241664 (236.00 MiB 247.46 MB)
    State : clean
    Active Devices : 3
    Working Devices : 4
    Spare Devices : 1

L'array /dev/md0 est prêt : 3 disques actifs et 1 de secours (Working Devices : 4).

Un array mdadm se comporte comme un disque ordinaire. Formatez-le et montez-le :

Fenêtre de terminal
sudo mkfs.xfs /dev/md0
sudo mkdir -p /mnt/raid
sudo mount /dev/md0 /mnt/raid

Pour un montage persistant, ajoutez-le à /etc/fstab par UUID, avec l'option nofail pour éviter un blocage au boot si l'array est dégradé.

Un array créé en mémoire n'est pas réassemblé automatiquement après un redémarrage tant qu'il n'est pas déclaré dans la configuration et inclus dans l'initramfs. C'est la cause numéro un d'un RAID qui « disparaît » après reboot. La procédure diffère selon la distribution.

Fenêtre de terminal
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
sudo update-initramfs -u

La ligne générée identifie l'array par UUID, indépendamment de l'ordre des disques :

ARRAY /dev/md0 metadata=1.2 spares=1 UUID=76755a1f:40a789ed:c6b8d707:16526c13

Un RAID sans surveillance est dangereux : si une panne de disque passe inaperçue, un second disque qui lâche entraîne la perte totale. Le service mdmonitor envoie une alerte par mail à la moindre dégradation.

Déclarez l'adresse de notification en tête de mdadm.conf, puis activez le service (confirmé enabled sur AlmaLinux) :

mdadm.conf
MAILADDR root@localhost
Fenêtre de terminal
sudo systemctl enable --now mdmonitor

Vous pouvez tester l'état à tout moment ; mdadm --detail --test /dev/md0 renvoie un code de sortie non nul si un disque est en panne, pratique dans un script de supervision.

Quand un disque lâche, le workflow est toujours le même : marquer, retirer, ajouter. Si un spare est présent, la reconstruction démarre avant même d'avoir remplacé physiquement le disque.

  1. Marquer le disque comme défaillant (simulé ici avec --fail).

    Fenêtre de terminal
    sudo mdadm /dev/md0 --fail /dev/sdb

    Dans /proc/mdstat, le disque passe en (F) et le spare prend aussitôt le relais :

    md0 : active raid5 sde[4] sdd[3] sdc[1] sdb[0](F)
    241664 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

    L'array reste [UUU] : le spare a remplacé le disque failed, la redondance est préservée.

  2. Retirer le disque défaillant de l'array.

    Fenêtre de terminal
    sudo mdadm /dev/md0 --remove /dev/sdb
  3. Ajouter le disque de remplacement, qui devient le nouveau spare.

    Fenêtre de terminal
    sudo mdadm /dev/md0 --add /dev/sdf

Suivez la reconstruction avec watch -n1 cat /proc/mdstat : la ligne recovery = XX% indique la progression et l'estimation de fin.

Pour combiner redondance et flexibilité, l'ordre recommandé est RAID en dessous, LVM au-dessus : mdadm crée /dev/md0, qui devient un volume physique LVM. Vous gardez la résilience du RAID et la souplesse des volumes logiques.

Alternative : LVM RAID (lvcreate --type raid5 ...) intègre le RAID directement dans LVM, en s'appuyant sur les mêmes pilotes noyau que mdadm. Préférez mdadm pour une couche RAID pure et éprouvée (notamment pour le disque système) ; LVM RAID pour une pile LVM unifiée.

  • RAID 0 et données critiques : aucune redondance, à proscrire hors caches jetables.
  • Pas de monitoring : sans mdmonitor + MAILADDR, une panne reste invisible jusqu'au drame.
  • Oublier l'initramfs : sans update-initramfs/dracut après modification de mdadm.conf, l'array ne remonte pas au boot.
  • Write hole du RAID 5/6 : après un arrêt brutal, la parité peut devenir incohérente. Pour le fermer, créez l'array avec une politique de cohérence PPL (--consistency-policy=ppl, RAID 5) ou un journal sur SSD ; un write-intent bitmap (par défaut) accélère le resync mais ne ferme pas le trou.
  • Confondre RAID et sauvegarde : voir l'avertissement plus haut.
SymptômeCause probableSolution
Array absent après rebootmdadm.conf ou initramfs non mis à jourRégénérer la conf + update-initramfs/dracut
/proc/mdstat montre [U_U]Un disque en pannemdadm --detail puis remplacer le disque
Reconstruction lenteCharge I/O ou limite noyaucat /proc/mdstat (speed), patienter, éviter les écritures
mdadm: cannot open /dev/sdXDisque déjà membre d'un arraymdadm --zero-superblock /dev/sdX avant réemploi
Aucune alerte de pannemdmonitor inactifsystemctl enable --now mdmonitor + MAILADDR
  • Choisir le niveau avant : RAID 1 (miroir), RAID 5 (compromis), RAID 6 (double parité), RAID 10 (perf + redondance).
  • Un spare (--spare-devices) déclenche la reconstruction automatique à la première panne.
  • /proc/mdstat et mdadm --detail sont les deux outils d'inspection : [UUU] = sain, (S) = spare, (F) = failed.
  • Rendre l'array persistant = mdadm.conf + initramfs (update-initramfs sur Debian, dracut --force sur RHEL).
  • Activez mdmonitor : un RAID sans surveillance n'est pas résilient.
  • Le RAID n'est pas une sauvegarde ; RAID 0 ne protège rien.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn