Ursache

Ursache

Ich hatte eine 500 GB-Festplatte mit BTRFS in meinem NAS. Ich habe vor Kurzem eine 4 TB-Festplatte bekommen und wollte nur die neue Festplatte verwenden, ohne Ausfallzeiten. Also habe ich ausgeführt btrfs replace start 1 /dev/sdb ., gewartet, bis es fertig ist, und das 500 GB-Laufwerk ausgesteckt.

Da ich nun keinen Zugriff mehr auf die 4-TB-Festplatte habe, möchte ich alle Daten von der ersetzten 500-GB-Festplatte wiederherstellen, aber die BTRFS-Partition darauf wird nicht mehr als solche erkannt. Ich habe versucht, sie normal zu mounten, mit -o degraded, -o recovery,ro, ich habe sogar btrfs restoreund ausprobiert btrfs check, aber alles ist fehlgeschlagen. Welche Optionen habe ich hier?

Antwort1

Dies ist eine alte Frage, aber ich bin auf dieselbe Situation gestoßen und werde sie beantworten.
Ich habe btrfs replacedas RAID1-Dateisystem auf Debian Bullseye (5.10.0-13-amd64) ausgeführt und es mit dem folgenden Verfahren auf Manjaro (5.13.19-2) wiederhergestellt.

Ursache

Zumindest für die Kernelversion 5.10 btrfs replaceruft der Befehl möglicherweise btrfs_scratch_superblocksdie Funktion an dieser Stelle auf:GitHub
Diese Funktion entfernt den „Magic String“ aus den Superblöcken der Originalfestplatte.

In meiner Umgebung habe ich tatsächlich folgende Ergebnisse erhalten:

# btrfs inspect-internal dump-super -F /dev/sdb1
superblock: bytenr=65536, device=/dev/sdb1
---------------------------------------------------------
csum_type       0 (crc32c)
csum_size       4
csum            0x7d4435b9 [DON'T MATCH]
bytenr          65536
flags           0x1
            ( WRITTEN )
magic           ........ [DON'T MATCH]

Entsprechend derbtrfs Wiki, "magic" (= "magischer String") muss sein _BHRfS_M.

Wiederherstellungsverfahren

Bezugnehmend auf What if I don't have wipefs at hand?diebtrfs Wikiführen Sie den folgenden Befehl in einer Shell aus.
Es ist wahrscheinlich sicherer, den Befehl auf einem anderen PC auszuführen als dem, an den die ausgetauschte Festplatte angeschlossen ist.

Bitte schreiben Sie das Gerät und den Einhängepunkt für Ihre Umgebung neu.
(In meiner Umgebung war es erfolgreich als /dev/sdb1!)

# # backup magic strings just in case
# dd bs=1 count=8 if=/dev/sdb skip=$((64*1024+64)) of=~/magic1
# dd bs=1 count=8 if=/dev/sdb skip=$((64*1024*1024+64)) of=~/magic2
# dd bs=1 count=8 if=/dev/sdb skip=$((256*1024*1024*1024+64)) of=~/magic3

# # write magic string
# echo "_BHRfS_M" | dd bs=1 count=8 of=/dev/sdb seek=$((64*1024+64))
# echo "_BHRfS_M" | dd bs=1 count=8 of=/dev/sdb seek=$((64*1024*1024+64))
# echo "_BHRfS_M" | dd bs=1 count=8 of=/dev/sdb seek=$((256*1024*1024*1024+64))

# btrfs device scan
# mkdir -p /mnt/before_replace
# mount -o degraded,ro /dev/sdb /mnt/before_replace

Ich bin nicht gut in Englisch, also entschuldigen Sie, wenn es schwer zu lesen ist. Aber ich hoffe, dass dies anderen in der gleichen Situation hilft.

verwandte Informationen