Bene, l'ho capito con l'aiuto di questo link Trello. Nel caso qualcun altro voglia farlo, ecco la procedura.
Procedura
Da un array RAID1 di due dischi, uno /dev/sda
che è difettoso e un altro /dev/sdc
noto-buono:
- Disabilita il montaggio automatico di questo array in
/etc/fstab
, riavvia . Fondamentalmente, vogliamo che btrfs dimentichi l'esistenza di questo array, poiché c'è un bug per cui proverà comunque a utilizzare una delle unità se è scollegata. -
Ora che il tuo array è smontato, esegui:
echo 1 | sudo tee /sys/block/sda/device/delete
sostituendo
sda
con il nome del dispositivo errato. Ciò causa la rotazione del disco (dovresti verificarlo in dmesg) e diventa inaccessibile al kernel.In alternativa :basta estrarre l'unità dal computer prima dell'avvio! Ho scelto di non optare per questo metodo, poiché il precedente funziona bene per me.
- Monta il tuo array, con
-o degraded
modalità. - Inizia un'operazione di ribilanciamento con
sudo btrfs balance start -f -mconvert=single -dconvert=single /mountpoint
. Questo riorganizzerà le estensioni sull'unità valida, convertendole insingle
(non RAID). Il completamento di questa operazione richiederà quasi un giorno, a seconda della velocità dell'unità e delle dimensioni dell'array. (il mio aveva ~700 GiB e ribilanciato a una velocità di 1 pezzo da 1GiB al minuto) Fortunatamente, questa operazione può essere messa in pausa e manterrà l'array online mentre si verifica. - Una volta fatto questo, puoi emettere
sudo btrfs device remove missing /mountpoint
per rimuovere il dispositivo difettoso "mancante". - Inizia un secondo ribilanciamento con
sudo btrfs balance start -mconvert=dup /mountpoint
per ripristinare la ridondanza dei metadati. Questo richiede alcuni minuti sul mio sistema. - Hai finito! Il tuo array ora è
single
modalità, con tutta la ridondanza rimossa. - Porta fuori il tuo disco difettoso e battilo con un martello.
Risoluzione dei problemi
- Aiuto, btrfs ha provato a scrivere sul mio disco difettoso, si è verificato un errore e l'ha forzato in sola lettura!
- Hai seguito il passaggio 1 e riavviato prima di continuare? È probabile che btrfs pensi ancora che l'unità che hai bloccato sia presente. Il riavvio farà sì che btrfs dimentichi eventuali errori e ti consentirà di continuare.
Grazie per il tuo post. Ho avuto l'idea di poter testare il raid, estrarre l'unità dal mio alloggiamento hotswap, utilizzare un'altra unità e quindi reinserire l'unità raid. In retrospettiva, questa è stata una cattiva idea e ora ho bisogno del mio alloggiamento hotswap.
Ecco cosa ho trovato. Come 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
Prendere nota del dispositivo elencato per ogni unità. Man for brtrfs balance mi ha portato all'opzione devid, ci sono voluti un paio di tentativi per capire come funzionavano i filtri (inizialmente provando devid=/dev/sdb1). Quindi il tuo primo tentativo sarà simile a questo.
# btrfs balance start -dconvert=single,devid=2 -mconvert=single,devid=2 /mnt
Che mi ha dato un errore.
ERROR: error during balancing '/media/.media': Invalid argument
There may be more info in syslog - try dmesg | tail
Ecco l'errore di dmesg:
BTRFS error (device sdb1): balance will reduce metadata integrity, use force if you want this
Quindi questa è la finale che ha funzionato:
# btrfs balance start -f -dconvert=single,devid=2 -mconvert=single,devid=2 /mnt
Spero che questo aiuti qualcun altro.