Traduction de l'article original anglais.
Voici la procédure que j'ai suivi pour remplacer un disque RAID défectueux sur une machine Debian.
Remplacer le disque
Après avoir remarqué que /dev/sdb
a été expulsé de mon RAID, j'ai utilisé
smartmontools pour
identifier le numéro de série du disque à retirer :
smartctl -a /dev/sdb
Cette information en main, j'ai fermé l'ordinateur, retiré le disque défectueux et mis un nouveau disque vide à la place.
Initialiser le nouveau disque
Après avoir démarré avec le nouveau disque vide, j'ai copié la table de partitions avec parted.
Premièrement, j'ai examiné la table de partitions sur le disque dur non-défectueux :
$ parted /dev/sda
unit s
print
et créé une nouvelle table de partitions sur le disque de remplacement :
$ parted /dev/sdb
unit s
mktable gpt
Ensuite j'ai utilisé la commande mkpart
pour mes 4 partitions et je
leur ai toutes donné la même taille que les partitions équivalentes
sur /dev/sda
.
Finalement, j'ai utilisé les commandes toggle 1 bios_grub
(partition
d'amorce) et toggle X raid
(où X est le numéro de la partition)
pour toutes les partitions RAID, avant de vérifier avec la commande
print
que les deux tables de partitions sont maintenant identiques.
Resynchroniser/recréer les RAID
Pour synchroniser les données du bon disque (/dev/sda
) vers celui
de remplacement (/dev/sdb
), j'ai exécuté les commandes suivantes
sur mes partitions RAID1 :
mdadm /dev/md0 -a /dev/sdb2
mdadm /dev/md2 -a /dev/sdb4
et j'ai gardé un oeil sur le statut de la synchronisation avec :
watch -n 2 cat /proc/mdstat
Pour accélérer le processus, j'ai utilisé le truc suivant :
blockdev --setra 65536 "/dev/md0"
blockdev --setra 65536 "/dev/md2"
echo 300000 > /proc/sys/dev/raid/speed_limit_min
echo 1000000 > /proc/sys/dev/raid/speed_limit_max
Ensuite, j'ai recréé ma partition swap RAID0 comme suit :
mdadm /dev/md1 --create --level=0 --raid-devices=2 /dev/sda3 /dev/sdb3
mkswap /dev/md1
Par que la partition swap est toute neuve (il n'est pas possible de restorer une partition RAID0, il faut la re-créer complètement), j'ai dû faire deux choses:
- remplacer le UUID pour swap dans
/etc/fstab
, avec le UUID donné par la commandemkswap
(ou bien en utilisant la commandblkid
et en prenant le UUID pour/dev/md1
) - remplacer le UUID de
/dev/md1
dans/etc/mdadm/mdadm.conf
avec celui retourné pour/dev/md1
par la commandemdadm --detail --scan
S'assurer que l'on peut démarrer avec le disque de remplacement
Pour être certain de bien pouvoir démarrer la machine avec n'importe quel des deux disques, j'ai réinstallé le boot loader grub sur le nouveau disque :
grub-install /dev/sdb
avant de redémarrer avec les deux disques connectés. Ceci confirme que ma configuration fonctionne bien.
Ensuite, j'ai démarré sans le disque /dev/sda
pour m'assurer que tout
fonctionnerait bien si ce disque décidait de mourir et de me laisser
seulement avec le nouveau (/dev/sdb
).
Ce test brise évidemment la synchronisation entre les deux disques, donc
j'ai dû redémarrer avec les deux disques connectés et puis ré-ajouter
/dev/sda
à tous les RAID1 :
mdadm /dev/md0 -a /dev/sda2
mdadm /dev/md2 -a /dev/sda4
Une fois le tout fini, j'ai redémarrer à nouveau avec les deux disques pour confirmer que tout fonctionne bien :
cat /proc/mdstat
et j'ai ensuite exécuter un test SMART complet sur le nouveau disque :
smartctl -t long /dev/sdb