Causa

Causa

Tenía un disco de 500 GB con BTRFS en mi NAS. Hace poco compré un disco de 4 TB y quería usar solo el disco nuevo, sin ningún tiempo de inactividad. Así que ejecuté btrfs replace start 1 /dev/sdb ., esperé a que terminara y desconecté la unidad de 500 GB.

Ahora que perdí el acceso al disco de 4 TB, quiero recuperar todos los datos del disco de 500 GB reemplazado, pero la partición BTRFS ya no se reconoce como tal. Intenté montarlo normalmente, con -o degraded, -o recovery,ro, incluso lo intenté btrfs restorey btrfs check, todo lo cual falló. ¿Cuáles son mis opciones aquí?

Respuesta1

Esta es una pregunta anterior, pero me encontré con la misma situación y responderé.
Ejecuté btrfs replaceel sistema de archivos RAID1 en Debian Bullseye (5.10.0-13-amd64) y lo recuperé en Manjaro (5.13.19-2) usando el siguiente procedimiento.

Causa

Al menos para la versión 5.10 del kernel, el btrfs replacecomando finalmente llama a btrfs_scratch_superblocksla función en esta ubicación:GitHub
Esta función elimina la "cuerda mágica" de los superbloques del disco original.

De hecho, obtuve los siguientes resultados en mi entorno:

# 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]

De acuerdo con laContenido Wiki, "magia" (= "cuerda mágica") debe ser _BHRfS_M.

Procedimiento de recuperación

Refiriéndose a What if I don't have wipefs at hand?laContenido Wiki, ejecute lo siguiente en un shell.
Probablemente sea más seguro ejecutarlo en una PC diferente a aquella a la que está conectado el disco reemplazado.

Vuelva a escribir el dispositivo y la ubicación del punto de montaje para su entorno.
(¡En mi entorno tuvo éxito como /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

No soy bueno en inglés, lo siento si es difícil de leer. Pero espero que esto ayude a otros en la misma situación.

información relacionada