Ça commence le 7 août 2016, le service mdadm envoie 4 mails intitulés :

  1. DegradedArray event on /dev/md0
  2. DegradedArray event on /dev/md1
  3. DegradedArray event on /dev/md2
  4. DegradedArray event on /dev/md3

Je lance donc un diagnostic des disques grâce aux données SMART :

smartctl -i /dev/sda
smartctl -i /dev/sdb

Si pour le disque "sdb" le résultat est normal, pour le disque "sda" c'est du grand n'importe quoi! Il m'annonce une capacité de plusieurs To et n'arrive pas à me donner toutes les informations. Je note les numéros de série des disques pour les repérer une fois le serveur ouvert. Dans mon cas j'ai du procéder par élimination car je n'obtenais pas le numéro de série du disque défaillant.

Bref, un disque de mon serveur est en train d'admettre ses limites, il va falloir le changer pour éviter la perte de données. Vu que les deux disques ont le même âge (8ans) et ont eu la même utilisation, je choisis de changer les deux disques. Je vais donc changer mes Western Digital Caviar Green 500Go par des Western Digital Red 1To. Je passe du modèle "économie d'énergie" au modèle prévu pour serveur (utilisation 24/24).

Après quelques recherches, je trouve ce tutoriel qui va me permettre de procéder au changement de disque sans trop de problème. Je suis donc le tutoriel section 5.2. Je retire les différentes partitions du disque "sda" des différents ensembles RAID (/boot, /, swap, /home) :

mdadm --manage /dev/md0 --remove /dev/sda1
mdadm --manage /dev/md1 --remove /dev/sda2
mdadm --manage /dev/md2 --remove /dev/sda5
mdadm --manage /dev/md3 --remove /dev/sda6

Extinction et ouverture du serveur pour accéder aux disques. Première remarque la poussière est trop présente à mon goût, je commence par un grand nettoyage. Grâce au numéro de série récupéré précédemment, j'identifie les disques. Le disque "sda" était sur la connexion "primaire" du serveur mais je ne sais pas si on peut se fier à çà. Je retire le disque défectueux et le remplace par un neuf.

Remontage et mise sous tension du serveur. Le disque est reconnu sans souci et comme l'indique le tutoriel, je copie la table des partitions du 500 Go vers le 1 To.

sfdisk -d /dev/sdb | sfdisk /dev/sda

Premier problème, la table des partitions ainsi copiée n'est pas alignée avec les cylindres du nouveau disque. Vu que le disque est vierge, je fais au plus simple et recrée les partitions "à la main" afin qu'elles soient alignées. J'ajoute les différentes partitions du nouveau disque aux différents ensembles RAID.

mdadm --manage /dev/md0 --add /dev/sda1
mdadm --manage /dev/md1 --add /dev/sda2
mdadm --manage /dev/md2 --add /dev/sda5
mdadm --manage /dev/md3 --add /dev/sda6

Les ensembles RAID se reconstruisent et je patiente en surveillant l'évolution :

cat /proc/mdstat

Après vérification, je n'ai pas eu besoin de mettre à jour le fichier de configuration :

mdadm --detail --scan --verbose > /etc/mdadm/mdadm.conf

Et voilà mon serveur est de nouveau équipé de deux disques sains. Cependant je veux utiliser mes deux nouveaux disques et profiter de l'espace supplémentaires. Je retire donc des ensembles RAID les partitions du "petit" disque de 500Go :

mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm --manage /dev/md1 --remove /dev/sdb2
mdadm --manage /dev/md2 --remove /dev/sdb5
mdadm --manage /dev/md3 --remove /dev/sdb6

Extinction du serveur, changement du disque de 500Go pour un de 1To et mise sous tension du serveur. Le disque est reconnu, je copie la table de partition, cette fois-ci pas de problème d'alignement :

sfdisk -d /dev/sda | sfdisk /dev/sdb

J'ajoute les différentes partitions aux différents ensembles RAID :

mdadm --manage /dev/md0 --add /dev/sdb1
mdadm --manage /dev/md1 --add /dev/sdb2
mdadm --manage /dev/md2 --add /dev/sdb5
mdadm --manage /dev/md3 --add /dev/sdb6

Et comme précédemment, je suis l'évolution et je vérifie la mise à jour du fichier de configuration :

cat /proc/mdstat
mdadm --detail --scan --verbose > /etc/mdadm/mdadm.conf

Cette fois-ci c'est fini, deux disques sains, plus grand et aucune données perdues.

Les mauvaises blagues en bonus :

  1. Je n'ai pas tout de suite noter les numéros de série, j'ai du brancher les disques sur un dock pour repérer le défectueux.
  2. J'ai détecté le problème d'alignement des cylindres après avoir fait la synchronisation des deux disques de 1To. Comme je n'ai pas réussi à "bouger" les partitions sans perdre de données, j'ai du tout recommencer.
  3. J'ai cru que l'ensemble RAID "md2" était inutile, je l'ai supprimé et refait une synchronisation. C'était la partition SWAP! J'ai du recommencer mes tables de partitions et mes synchronisations.

Au final, ça aurait du durer une matinée, ça m'a pris deux jours. Heureusement tout tourne parfaitement depuis ce jour et pour longtemps j'espère.