Okay, ich habe es mit Hilfe dieses Trello-Links herausgefunden. Falls jemand anderes dies tun möchte, hier ist das Verfahren.
Verfahren
Von einem RAID1-Array aus zwei Festplatten, eine /dev/sda
welches defekt ist und noch ein /dev/sdc
bekanntlich gut:
- Deaktivieren Sie das automatische Mounten dieses Arrays in
/etc/fstab
, Neustart . Grundsätzlich möchten wir, dass btrfs vergisst, dass dieses Array existiert, da es einen Fehler gibt, bei dem es immer noch versucht, eines der Laufwerke zu verwenden, wenn es nicht angeschlossen ist. -
Nachdem Ihr Array nun ausgehängt ist, führen Sie Folgendes aus:
echo 1 | sudo tee /sys/block/sda/device/delete
ersetzt
sda
mit dem fehlerhaften Gerätenamen. Dies führt dazu, dass die Festplatte herunterfährt (Sie sollten dies in dmesg überprüfen) und für den Kernel unzugänglich wird.Alternativ :Nehmen Sie einfach das Laufwerk vor dem Booten aus dem Computer! Ich habe mich gegen diese Methode entschieden, da das obige für mich gut funktioniert.
- Mounten Sie Ihr Array mit
-o degraded
Modus. - Beginnen Sie einen Rebalancing-Vorgang mit
sudo btrfs balance start -f -mconvert=single -dconvert=single /mountpoint
. Dadurch werden die Extents auf dem bekanntermaßen funktionierenden Laufwerk neu organisiert und insingle
konvertiert (Nicht-RAID). Dies dauert fast einen Tag, abhängig von der Geschwindigkeit Ihres Laufwerks und der Größe Ihres Arrays. (meins hatte ~700 GiB und wurde mit einer Rate von 1 1-GiB-Blöcken pro Minute neu ausbalanciert.) Glücklicherweise kann dieser Vorgang angehalten werden und hält das Array online, während er ausgeführt wird. - Sobald dies erledigt ist, können Sie
sudo btrfs device remove missing /mountpoint
ausgeben um das 'fehlende' fehlerhafte Gerät zu entfernen. - Beginnen Sie eine zweite Neuverteilung mit
sudo btrfs balance start -mconvert=dup /mountpoint
Metadatenredundanz wiederherzustellen. Dies dauert auf meinem System einige Minuten. - Du bist fertig! Ihr Array ist jetzt
single
Modus, bei dem alle Redundanzen entfernt wurden. - Bringen Sie Ihr defektes Laufwerk nach draußen und schlagen Sie es mit einem Hammer ein.
Fehlerbehebung
- Hilfe, btrfs hat versucht, auf meine fehlerhafte Festplatte zu schreiben, hat einen Fehler ausgegeben und sie auf Readonly gesetzt!
- Haben Sie Schritt 1 befolgt und neu gestartet, bevor Sie fortfahren? Es ist wahrscheinlich, dass btrfs immer noch denkt, dass das Laufwerk, das Sie heruntergefahren haben, vorhanden ist. Ein Neustart wird dazu führen, dass btrfs alle Fehler vergisst und Sie fortfahren können.
Danke für deinen Beitrag. Ich hatte die Idee, Raid zu testen, das Laufwerk aus meinem Hotswap-Schacht zu nehmen, ein anderes Laufwerk zu verwenden und dann das Raid-Laufwerk wieder einzubauen. Im Nachhinein war das eine schlechte Idee, und jetzt brauche ich meinen Hotswap-Schacht.
Hier ist, was ich gefunden habe. Als 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
Beachten Sie das für jedes Laufwerk aufgeführte Gerät. Man for brtrfs balance führte mich zur Option devid, brauchte ein paar Versuche, um herauszufinden, wie die Filter funktionierten (zunächst versuchte man devid=/dev/sdb1). Ihr erster Versuch wird also in etwa so aussehen.
# btrfs balance start -dconvert=single,devid=2 -mconvert=single,devid=2 /mnt
Was mir einen Fehler gab.
ERROR: error during balancing '/media/.media': Invalid argument
There may be more info in syslog - try dmesg | tail
Hier ist der Fehler von dmesg:
BTRFS error (device sdb1): balance will reduce metadata integrity, use force if you want this
Das ist also das Finale, das funktioniert hat:
# btrfs balance start -f -dconvert=single,devid=2 -mconvert=single,devid=2 /mnt
Hoffentlich hilft das jemand anderem weiter.