Remplacer un disque dur dans un RAID avec mdadm
Ce guide montre comment retirer un disque failed d’un RAID1 Linux et le remplacer par un nouveau disque à chaud.
1. Contexte
Section intitulée « 1. Contexte »Mon disque /dev/sdb est défaillant (SMART remonte de nombreuses erreurs, état « Disk Failing »). Je choisis de le changer par prévention.
Les disques /dev/sda et /dev/sdb forment 2 RAID1, /dev/md0 et /dev/md1 :
/dev/sda2 + /dev/sdb2 = /dev/md0/dev/sda3 + /dev/sdb3 = /dev/md1Voici l’arborescence avec lsblk :
lsblksda 8:0 0 223.6G 0 disk├─sda1 8:1 0 1M 0 part├─sda2 8:2 0 1G 0 part│ └─md0 9:0 0 1022M 0 raid1│ └─md0p1 259:5 0 1020M 0 part /boot└─sda3 8:3 0 220G 0 part └─md1 9:1 0 219.9G 0 raid1 └─md1p1 259:6 0 219.9G 0 part /sdb 8:16 0 232.9G 0 disk├─sdb1 8:17 0 1M 0 part├─sdb2 8:18 0 1G 0 part│ └─md0 9:0 0 1022M 0 raid1│ └─md0p1 259:5 0 1020M 0 part /boot└─sdb3 8:19 0 220G 0 part └─md1 9:1 0 219.9G 0 raid1 └─md1p1 259:6 0 219.9G 0 part /2. Retirer le disque du RAID
Section intitulée « 2. Retirer le disque du RAID »On marque d’abord le disque comme failed, dans les deux RAID :
mdadm --manage /dev/md0 --fail /dev/sdb2mdadm --manage /dev/md1 --fail /dev/sdb3On vérifie que le disque est bien marqué comme failed :
cat /proc/mdstatmd1 : active raid1 sda3[1] sdb3[2](F) 230554624 blocks super 1.2 [2/1] [U_]
md0 : active raid1 sda2[2] sdb2[3](F) 1046528 blocks super 1.2 [2/1] [U_]Dans les deux RAID, un seul disque est actif (U_) et (F) signale le disque défaillant. Avec les deux disques présents et fonctionnels, on verrait UU.
On peut maintenant retirer le disque du RAID :
mdadm --manage /dev/md0 --remove /dev/sdb2mdadm --manage /dev/md1 --remove /dev/sdb3Il a bien disparu des deux RAID :
cat /proc/mdstatmd1 : active raid1 sda3[1] 230554624 blocks super 1.2 [2/1] [U_]
md0 : active raid1 sda2[2] 1046528 blocks super 1.2 [2/1] [U_]3. Remplacer le disque
Section intitulée « 3. Remplacer le disque »Si la machine le supporte, on remplace le disque à chaud. Le nouveau disque apparaît sans partitions : il faut les recréer avant de reconstruire le RAID.
lsblksda 8:0 0 223.6G 0 disk├─sda1 8:1 0 1M 0 part├─sda2 8:2 0 1G 0 part│ └─md0 9:0 0 1022M 0 raid1│ └─md0p1 259:5 0 1020M 0 part /boot└─sda3 8:3 0 220G 0 part └─md1 9:1 0 219.9G 0 raid1 └─md1p1 259:6 0 219.9G 0 part /sdb 8:16 0 232.9G 0 diskOn a besoin de gdisk, si ce n’est pas déjà fait :
apt install gdiskOn sauvegarde la table des partitions. Ce n’est pas obligatoire mais très fortement recommandé :
sgdisk --backup=/root/sda.partitiontable /dev/sdasgdisk --backup=/root/sdb.partitiontable /dev/sdbEn cas de problème, on peut restaurer le schéma avec l’option --load-backup.
On copie ensuite le schéma de partitions de sda vers sdb :
sgdisk -R /dev/sdb /dev/sdaOn randomise le GUID du nouveau disque, qui a été copié de sda avec le schéma :
sgdisk -G /dev/sdbOn vérifie que les partitions ont bien été copiées :
lsblksdb 8:16 0 232.9G 0 disk├─sdb1 8:17 0 1M 0 part├─sdb2 8:18 0 1G 0 part└─sdb3 8:19 0 220G 0 part4. Ajouter le disque au RAID
Section intitulée « 4. Ajouter le disque au RAID »Les partitions sont créées, on reconstruit le RAID :
mdadm --manage /dev/md0 --add /dev/sdb2mdadm --manage /dev/md1 --add /dev/sdb3La synchronisation démarre ; on suit son avancement avec :
cat /proc/mdstat
Bien joué, le disque est remplacé !