Ce guide explique comment retirer un disque dur défaillant d'une matrice Linux RAID1 (RAID logiciel) et comment ajouter un nouveau disque dur à la matrice RAID1 sans perdre de données. J'utiliserai gdisk pour copier le schéma de partition, de sorte qu'il fonctionnera également avec les grands disques durs avec GPT (table de partition GUID).
1 Remarque préliminaire
Dans cet exemple, j'ai deux disques durs, /dev/sda et /dev/sdb, avec les partitions /dev/sda1 et /dev/sda2 ainsi que /dev/sdb1 et /dev/sdb2.
/dev/sda1 et /dev/sdb1 constituent la matrice RAID1 /dev/md0.
/dev/sda2 et /dev/sdb2 constituent la matrice RAID1 /dev/md1.
/dev/sda1 + /dev/sdb1 = /dev/md0
/dev/sda2 + /dev/sdb2 = /dev/md1
/dev/sdb a échoué et nous voulons le remplacer.
2 Comment savoir si un disque dur est en panne ?
Si un disque est en panne, vous trouverez probablement de nombreux messages d'erreur dans les fichiers journaux, par ex. /var/log/messages ou /var/log/syslog.
Vous pouvez également exécuter
cat /proc/mdstat
et au lieu de la chaîne [UU], vous verrez [U_] si vous avez une matrice RAID1 dégradée.
3 Retrait du disque défaillant
Pour supprimer /dev/sdb, nous marquerons /dev/sdb1 et /dev/sdb2 comme ayant échoué et les supprimerons de leurs matrices RAID respectives (/dev/md0 et /dev/md1).
Nous marquons d'abord /dev/sdb1 comme ayant échoué :
mdadm --manage /dev/md0 --fail /dev/sdb1
La sortie de
cat /proc/mdstat
devrait ressembler à ceci :
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[2](F)
24418688 blocks [2/1] [U_]
md1 : active raid1 sda2[0] sdb2[1]
24418688 blocks [2/2] [UU]
unused devices: <none>
Ensuite, nous supprimons /dev/sdb1 de /dev/md0 :
mdadm --manage /dev/md0 --remove /dev/sdb1
Le résultat devrait ressembler à ceci :
server1:~# mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm: hot removed /dev/sdb1
Et
cat /proc/mdstat
devrait afficher ceci :
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
24418688 blocks [2/1] [U_]
md1 : active raid1 sda2[0] sdb2[1]
24418688 blocks [2/2] [UU]
unused devices: <none>
Maintenant, nous recommençons les mêmes étapes pour /dev/sdb2 (qui fait partie de /dev/md1) :
mdadm --manage /dev/md1 --fail /dev/sdb2
cat /proc/mdstat
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
24418688 blocks [2/1] [U_]
md1 : active raid1 sda2[0] sdb2[2](F)
24418688 blocks [2/1] [U_]
unused devices: <none>
mdadm --manage /dev/md1 --remove /dev/sdb2
server1:~# mdadm --manage /dev/md1 --remove /dev/sdb2
mdadm: hot removed /dev/sdb2
cat /proc/mdstat
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
24418688 blocks [2/1] [U_]
md1 : active raid1 sda2[0]
24418688 blocks [2/1] [U_]
unused devices: <none>
Puis éteignez le système :
shutdown -h now
et remplacez l'ancien disque dur /dev/sdb par un nouveau (il doit avoir au moins la même taille que l'ancien - s'il ne fait que quelques Mo de moins que l'ancien, la reconstruction des baies échouera).
4 Ajout du nouveau disque dur
Après avoir changé le disque dur /dev/sdb, démarrez le système.
La première chose que nous devons faire maintenant est de créer exactement le même partitionnement que sur /dev/sda. Nous pouvons le faire avec la commande sgdisk du paquet gdisk. Si vous n'avez pas encore installé gdisk, exécutez cette commande pour l'installer sur Debian et Ubuntu :
apt-get install gdisk
Pour les distributions Linux basées sur RedHat comme CentOS, utilisez :
yum install gdisk
et pour l'utilisation d'OpenSuSE :
yast install gdisk
La prochaine étape est facultative mais recommandée. Pour vous assurer que vous disposez d'une sauvegarde du schéma de partition, vous pouvez utiliser sgdisk pour écrire les schémas de partition des deux disques dans un fichier. Je vais stocker la sauvegarde dans le dossier /root.
sgdisk --backup=/root/sda.partitiontable /dev/sda
sgdisk --backup=/root/sdb.partitiontable /dev/sdb
En cas d'échec, vous pouvez restaurer les tables de partition avec l'option --load-backup de la commande sgdisk.
Copiez maintenant le schéma de partition de /dev/sda vers /dev/sdb run :
sgdisk -R /dev/sdb /dev/sda
ensuite, vous devez randomiser le GUID sur le nouveau disque dur pour vous assurer qu'ils sont uniques
sgdisk -G /dev/sdb
Vous pouvez courir
sgdisk -p /dev/sda
sgdisk -p /dev/sdb
pour vérifier si les deux disques durs ont maintenant le même partitionnement.
Ensuite, nous ajoutons /dev/sdb1 à /dev/md0 et /dev/sdb2 à /dev/md1 :
mdadm --manage /dev/md0 --add /dev/sdb1
server1:~# mdadm --manage /dev/md0 --add /dev/sdb1
mdadm: re-added /dev/sdb1
mdadm --manage /dev/md1 --add /dev/sdb2
server1:~# mdadm --manage /dev/md1 --add /dev/sdb2
mdadm: re-added /dev/sdb2
Maintenant, les deux tableaux (/dev/md0 et /dev/md1) seront synchronisés. Exécuter
cat /proc/mdstat
pour voir quand c'est fini.
Pendant la synchronisation, la sortie ressemblera à ceci :
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[1]
24418688 blocks [2/1] [U_]
[=>...................] recovery = 9.9% (2423168/24418688) finish=2.8min speed=127535K/sec
md1 : active raid1 sda2[0] sdb2[1]
24418688 blocks [2/1] [U_]
[=>...................] recovery = 6.4% (1572096/24418688) finish=1.9min speed=196512K/sec
unused devices: <none>
Une fois la synchronisation terminée, la sortie ressemblera à ceci :
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[1]
24418688 blocks [2/2] [UU]
md1 : active raid1 sda2[0] sdb2[1]
24418688 blocks [2/2] [UU]
unused devices: <none>
Ça y est, vous avez remplacé /dev/sdb avec succès !