Voici une manipulation réalisée dans le but de retirer un disque dur défaillant d’une array RAID1 crée avec Btrfs. Aucune donnée ne doit normalement être perdue grâce à la redondance permise pas le RAID1. Cet article fait suite à mes précédentes difficultés pour restaurer des données issues d’un RAID0 Btrfs, situation bien plus délicate.

Si vous souhaitez utiliser ses informations pour vous-mêmes, je vous conseille fortement de sauvegarder vos données préalablement.

Constatation de la panne

Sur une grappe de stockage redondée RAID1 grâce à Btrfs (et non pas mdadm) je me rends compte que le système de fichiers ne veut pas se monter au démarrage. Des messages d’erreur assaillent mon kern.log.

Tous les malheurs de la terre semblent s’abattre sur le disque dur sdh. Curieusement, le monitoring SMART n’a pas pu anticiper la panne comme c’est le cas parfois.

Je décide donc d’extraire le disque dur défectueux et d’installer son replaçant.

Retrait du disque défectueux

Voici ensuite un état des lieux qui m’informe que le devid 5 (le disque sdh) est manquant.

La commande qui suit est fondamentale dans le cadre de cet article : j’ai besoin de monter le système de fichiers en mode dégradé mais lecture-écriture tout de même.

Quelque minutes après le système de fichiers est utilisable en mode RW. On peut vérifier cela avec la commande qui suit.

 

Ajout du disque de remplacement

Vient donc la commande de suppression de disque dur manquant. Ne l’utilisez pas tout de suite, il faut préalablement ajouter le disque de remplacement. Sans cela, vous obtiendrez probablement un échec pour cause d’espace disque insuffisant. En effet, Btrfs cherche à tout prix à conserver la redondance RAID1 en dupliquant un maximum de blocs sur les autres disques.

Il fallait en réalité commencer par ajouter le nouveau disque, pour supprimer ensuite l’ancien disque manquant.

A partir de là, avec un disque libre de 2,73 TiB, le retrait du disque devient plus envisageable.

Il m’a tout de même fallu équilibrer (balance) l’array afin que les autres disques ne soient pas à 100% d’usage.

L’opération « balance » a encore sa part de mystère pour moi, j’ai l’impression que cela permet de répartir les données uniformément sur les disques durs d’une part, et également remplir les blocs de système de fichiers qui ne seraient pas remplis à 100% par des fichiers. La plupart du temps, on ne veut pas équilibrer tout à l’aveugle (explications ici) mais on veut spécifier un seuil d’occupation du bloc en-deçà duquel on s’affranchit de bouger les donnés. Cela permet de rendre le système de fichiers « plus compact ».

L’opération prend plusieurs heures. Avec l’outil atop on voit qu’elle semble solliciter tous les disques en écriture principalement, à des vitesses de l’ordre de 5 Mo/sec par disque. Btrfs est en train de remplir le nouveau disque avec des données existantes et à qui il manquait la redondance suite au crash disque.

On peut suivre l’avancement de l’opération avec la commande suivante.

La suppression du disque manquant ne doit plus poser de problème. Malheureusement on ne peut pas suivre l’avancement de cette suppression, simplement tenter d’équilibrer les disques pour faire de l’espace, avant.

Ce qui est original avec Btrfs par rapport à d’autres systèmes de fichiers, c’est qu’il nécessite d’être monté, même en mode dégradé, afin d’opérer les modification sur le RAID. On ne peut pas discerner la fonctionnalité de RAID mode blocs et du système de fichiers.