Mdadm
Mdadm est un outil intégré au noyau Linux permettant de faire du RAID logiciel. Il est utilisé par l'installeur Debian pour configurer un RAID d’amorçage.
Avant propos
Sur mon serveur, un disque dur de la grappe RAID 1 est tombé en panne. Aucune perte de données n'est à déploré du fait de la réplication des deux disques mais il a bien fallut le remplacer. C'est ce que je vais expliquer dans ce document en utilisant une machine virtuelle comportant 2 disques dur en RAID 1, chiffrés avec Cryptsetup et comportant des partions LVM.
ASTUCE
Afin de simuler la perte d'un disque dur, il est possible d'utiliser la commande suivante:mdadm --manage /dev/md0 --fail /dev/sdb1
.Remise en œuvre d'une grappe RAID 1
Configuration matérielle
- On a une machine virtuelle Debian installée avec deux grappes RAID 1 mdadm (md0 pour le /boot et md1 pour le /) exploitant les deux disques sda et sdb.
- Le disque sda tombe en panne
- La grappe RAID passe en état inactif
Conduite à tenir
- À ce stade, la machine ne voudra plus démarrer correctement. Il faut restaurer l'état du RAID
- On éteint la machine et on débranche le disque défaillant (du coup sdb devient le nouveau sda au prochain démarrage)
- La grappe RAID étant en état inactif, l'initramfs ne démarre plus (on est dans ash, le shell du ram disque de démarrage). Il faut repasser les grappes en état actif:
mdadm --manage /dev/md0 --run mdadm --manage /dev/md1 --run
INFORMATION
l'état des grappe RAID est visualisable dans le fichier spécial dédié avec ceci:cat /proc/mdstat
.Une fois ceci fait, nous pouvons sortir de l'initramfs pour continuer le démarrage.
exit
Cryptsetup nous invite à taper le mot de passe. Le système démarre (et ce sera toujours le cas vu que les grappes sont passées en état actif) et LVM se démerde tout seul.
Changement d'un disque dur défaillant
Une fois dans le système il est possible de voir le détail des grappes avec:
mdadm --detail /dev/md0 mdadm --detail /dev/md1
On remarque alors qu'un des disque est en état removed (il s'agit de l'ancien disque dur que l'on a débranché). Suivez les étapes suivantes:
- Éteindre le serveur (je conseil de ne pas faire le branchement du nouveau disque à chaud afin que Linux remette les mêmes noms de périphérique /dev (sda et sdb)
- Installer le nouveau disque dur et démarrer
Il va falloir copier le schéma de partition sur le nouveau disque.
Pour un MBR
sfdisk -d /dev/sdb | sfdisk /dev/sda
Pour un GPT (paquet "gdisk")
sgdisk /dev/sdb -R /dev/sda sgdisk -G /dev/sda
le -R copie la table GPT du disque sdb vers sda tandis que le -G génère un nouveau GUID aléatoirement.
Vérifier le résultat
lsblk
ou
fdisk -l
Ajouter le nouveau disque aux grappes
mdadm --manage /dev/md0 --add /dev/sda1 mdadm --manage /dev/md1 --add /dev/sda2
De là, la réplication commence automatiquement en arrière plan (vous pouvez entendre vos disques dur gratter à mort).
ATTENTION
Laisser la synchronisation se faire et contrôler régulièrement l'avancée avant de faire une opération à la con du style redémarrer la machine et enlever un disque pour voir si ça fonctionne... il convient de faire régulièrement uncat /proc/mdstat
pour afficher l'état de la reconstruction.
À l'issue, installer Grub sur le nouveau disque pour que ça démarrer lors de la prochaine panne (oui oui ça vous arriveras, ne faites pas les malins).
grub-install /dev/sda
Vérifier l'intégrité de la réplication
En production, il peut être intelligent de vérifier de temps à autre la bonne intégrité de la synchronisation des deux disques. Cette étape se nomme "scrub" et s'effectue en arrière plan après initialisation.
Lancer un scrub
echo check > /sys/block/mdX/md/sync_action
Vérifier l'avancée
cat /proc/mdstat
Les données erronées seront automatiquement corrigés.
L'interrompre
echo idle > /sys/block/mdX/md/sync_action
Sur un RAID 5 ou 6 on utilisera plutôt cette façon de faire:
echo repair > /sys/block/mdX/md/sync_action