Notes d’apprentissage§

Le RAID combine plusieurs disques en un seul volume logique pour la redondance (survivre à une panne disque) et/ou la performance. mdadm gère le RAID logiciel du noyau Linux, sans carte matérielle dédiée.

Modèle mental : les niveaux de RAID = un compromis capacité / vitesse / tolérance.

NiveauDisques minCapacité utileToléranceIdée
0 (stripe)2100 %aucunevitesse pure, risqué
1 (mirror)250 %1 disquecopie identique, sûr
5 (parité)3(N-1)/N1 disquebon compromis
6 (double parité)4(N-2)/N2 disquessécurité accrue
10 (1+0)450 %selonmiroir + stripe

RAID-1 (cet exercice) écrit la même chose sur deux disques : si l’un meurt, l’autre continue, sans interruption.

Le cycle de vie d’un array :

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/vdd /dev/vde   # créer
cat /proc/mdstat                          # état + reconstruction en cours
mdadm --detail /dev/md0                   # détails complets
mdadm --fail /dev/md0 /dev/vdd            # simuler une panne
mdadm --remove /dev/md0 /dev/vdd          # retirer le disque mort
mdadm --add /dev/md0 /dev/vdf             # ajouter le remplaçant → resync auto

/proc/mdstat est le tableau de bord : il montre l’état de chaque disque et la progression de la reconstruction (resync) après remplacement.

Persistance : le fichier de conf + l’initramfs. Pour que l’array se réassemble au boot :

mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf   # (/etc/mdadm.conf sur RHEL)
sudo update-initramfs -u                                    # (dracut -f sur RHEL)

Puis monter le /dev/md0 via /etc/fstab (formaté en xfs/ext4).

Pièges :

Énoncé§

Solve this question on: terminal

  1. Build a RAID-1 array /dev/md0 from /dev/vdd and /dev/vde.
  2. Format it with xfs and mount it persistently at /mnt/raid1.
  3. Simulate a failure of /dev/vdd, then replace it with /dev/vdf.
  4. Write the contents of /proc/mdstat into /opt/course/41/mdstat.

Solution§

RAID levels worth knowing§

LevelMin disksCapacityFault toleranceNotes
02N × disknonestripe, fastest, risky
121 × diskN-1mirror
53(N-1) × disk1parity striped
64(N-2) × disk2double parity
104N/2 × diskdependsmirror of stripes

Install§

sudo apt install mdadm
sudo dnf install mdadm

Step 1 — Create the array§

Wipe any old signatures first (otherwise mdadm refuses):

sudo wipefs -a /dev/vdd /dev/vde
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/vdd /dev/vde
# answer 'y' to the prompt

Watch the initial sync:

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

Save the array definition (so it reassembles after reboot):

sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf       # Debian
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf             # RHEL
sudo update-initramfs -u                                              # Debian
sudo dracut -f                                                        # RHEL

Step 2 — Filesystem and mount§

sudo mkfs.xfs /dev/md0
sudo mkdir -p /mnt/raid1
sudo blkid /dev/md0
# UUID=xxxxx-xxxx ... TYPE="xfs"

echo 'UUID=xxxxx-xxxx  /mnt/raid1  xfs  defaults  0 2' | sudo tee -a /etc/fstab
sudo mount -a

Step 3 — Fail and replace a disk§

Mark /dev/vdd as failed:

sudo mdadm --manage /dev/md0 --fail /dev/vdd
sudo mdadm --detail /dev/md0          # state: degraded

Remove it from the array:

sudo mdadm --manage /dev/md0 --remove /dev/vdd

Add the replacement disk:

sudo wipefs -a /dev/vdf
sudo mdadm --manage /dev/md0 --add /dev/vdf

Watch the resync:

watch -n 1 cat /proc/mdstat
sudo mdadm --detail /dev/md0

Update the conf if the device list changed:

sudo sed -i '/^ARRAY \/dev\/md0/d' /etc/mdadm/mdadm.conf
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf

Step 4 — Snapshot of state§

cat /proc/mdstat > /opt/course/41/mdstat

Spare disks and hot spares§

Create with a hot spare:

sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 --spare-devices=1 \
           /dev/vdd /dev/vde /dev/vdf /dev/vdg

Convert a member to spare or back:

sudo mdadm --manage /dev/md0 --add-spare /dev/vdg

Grow an array (add a disk to a RAID 5)§

sudo mdadm --add /dev/md0 /dev/vdh
sudo mdadm --grow /dev/md0 --raid-devices=4
sudo xfs_growfs /mnt/raid1

Stop and reassemble§

sudo umount /mnt/raid1
sudo mdadm --stop /dev/md0
sudo mdadm --assemble /dev/md0 /dev/vd[ef]
sudo mdadm --assemble --scan        # auto-discover from mdadm.conf

Monitor + email alerts§

sudo mdadm --monitor --daemonise --mail root@localhost --delay=300 /dev/md0
# or via systemd unit mdmonitor.service (already shipped)

Check / repair (data scrub)§

echo check  | sudo tee /sys/block/md0/md/sync_action
echo repair | sudo tee /sys/block/md0/md/sync_action
cat /sys/block/md0/md/mismatch_cnt