Très bien, je l'ai compris avec l'aide de ce lien Trello. Au cas où quelqu'un d'autre voudrait le faire, voici la procédure.
Procédure
À partir d'une matrice RAID1 de deux disques, un /dev/sda
qui est défectueux et un autre /dev/sdc
bien connu :
- Désactiver le montage automatique de ce tableau dans
/etc/fstab
, redémarrer . Fondamentalement, nous voulons que btrfs oublie que ce tableau existe, car il y a un bogue où il essaiera toujours d'utiliser l'un des lecteurs s'il est débranché. -
Maintenant que votre tableau est démonté, exécutez :
echo 1 | sudo tee /sys/block/sda/device/delete
remplaçant
sda
avec le nom d'appareil défectueux. Cela provoque l'arrêt du disque (vous devriez le vérifier dans dmesg) et devient inaccessible au noyau.Alternativement :retirez simplement le lecteur de l'ordinateur avant de démarrer ! J'ai choisi de ne pas opter pour cette méthode, car ce qui précède fonctionne bien pour moi.
- Montez votre tableau, avec
-o degraded
mode. - Commencer une opération de rééquilibrage avec
sudo btrfs balance start -f -mconvert=single -dconvert=single /mountpoint
. Cela réorganisera les étendues sur le lecteur connu en bon état, en les convertissant ensingle
(non RAID). Cela prendra presque une journée, selon la vitesse de votre disque et la taille de votre baie. (le mien avait environ 700 Gio et était rééquilibré à un rythme de 1 morceau de 1 Gio par minute) Heureusement, cette opération peut être interrompue et maintiendra la baie en ligne pendant qu'elle se produit. - Une fois cela fait, vous pouvez émettre
sudo btrfs device remove missing /mountpoint
pour supprimer le périphérique défectueux "manquant". - Commencer un deuxième rééquilibrage avec
sudo btrfs balance start -mconvert=dup /mountpoint
pour restaurer la redondance des métadonnées. Cela prend quelques minutes sur mon système. - Vous avez terminé ! Votre tableau est maintenant
single
mode, avec toute redondance supprimée. - Amenez votre disque défectueux à l'extérieur et frappez-le avec un marteau.
Dépannage
- Au secours, btrfs a essayé d'écrire sur mon disque défectueux, a généré une erreur et l'a forcé en lecture seule !
- Avez-vous suivi l'étape 1 et redémarré avant de continuer ? Il est probable que btrfs pense toujours que le lecteur que vous avez arrêté est présent. Le redémarrage entraînera l'oubli de toutes les erreurs par btrfs et vous permettra de continuer.
Merci pour votre message. J'ai eu cette idée que je pouvais tester le raid, sortir le lecteur de ma baie de remplacement à chaud, utiliser un autre lecteur, puis remettre le lecteur de raid en place. Rétrospectivement, c'était une mauvaise idée et maintenant j'ai besoin de ma baie de remplacement à chaud.
Voici ce que j'ai trouvé. En tant que root :
# sudo btrfs fi show
Label: 'disk' uuid: 12817aeb-d303-4815-8bba-a3440e36c62c
Total devices 2 FS bytes used 803.10GiB
devid 1 size 931.51GiB used 805.03GiB path /dev/sda1
devid 2 size 931.51GiB used 805.03GiB path /dev/sdb1
Notez le devid répertorié pour chaque lecteur. L'homme pour l'équilibre brtrfs m'a conduit à l'option devid, a pris quelques essais pour comprendre comment les filtres fonctionnaient (en essayant initialement devid=/dev/sdb1). Donc, votre première tentative ressemblera à quelque chose comme ça.
# btrfs balance start -dconvert=single,devid=2 -mconvert=single,devid=2 /mnt
Ce qui m'a donné une erreur.
ERROR: error during balancing '/media/.media': Invalid argument
There may be more info in syslog - try dmesg | tail
Voici l'erreur de dmesg :
BTRFS error (device sdb1): balance will reduce metadata integrity, use force if you want this
Voici donc la finale qui a fonctionné :
# btrfs balance start -f -dconvert=single,devid=2 -mconvert=single,devid=2 /mnt
Espérons que cela aide quelqu'un d'autre.