
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 restore
y 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 replace
el 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 replace
comando finalmente llama a btrfs_scratch_superblocks
la 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.