¿Cómo recupero una partición BTRFS que no se montará?

13

La instalación para 12.04 seguía fallando, y la solución era hacer que el instalador ignorara la partición btrfs que había estado usando anteriormente para / home.

Ahora que está instalado, he intentado que monte la partición btrfs para poder acceder a mis 70 GB de archivos. No se montará, y btrfsck errores con las siguientes tres líneas:

parent transid verify failed on 31302336512 wanted 62455 found 62456
parent transid verify failed on 31302336512 wanted 62455 found 62456
parent transid verify failed on 31302336512 wanted 62455 found 62456

¿Alguien puede decirme cómo hacer que esta partición funcione? He leído en línea que probablemente pueda recuperar los datos usando btrfs-restore, pero no puedo encontrar ese programa en ningún lado.

Tony
fuente

Respuestas:

10

La manera más fácil

btrfs-zero-log /dev/sda5

Obtiene ese problema porque una transacción (escribir o eliminar) está atascada en el registro del diario y el disco no coincide.

Cómo funciona:

Entonces, cuando los datos se escriben primero, se escriben en el diario y luego en el disco (o al mismo tiempo, pero el diario solo guarda metadatos sobre la próxima escritura, no estoy seguro ... necesita más investigación sobre esa parte) ...

De todos modos, si apaga el sistema en el medio de esta escritura / eliminación o hace algo que bloquea el sistema (desmonte el USB que contiene su punto de montaje btrfs), cuando regrese, ese montaje no funcionará, fallará ( dmesg y btrfsck lo harán mostrarle los errores con más detalle) ...

Mirando dmesg verá esos mismos mensajes transid.

Verás algo como esto:

parent transid verify failed on 109973766144 wanted 1823 found 1821

Significa que btrfs quería transif 1826 (eso estaba en el diario) pero en el disco vio 1821. Entonces el disco estaba a 2 transacciones de estar sincronizado con el diario. Personalmente, arriesgaría un brtfs-zero-log aquí solo porque son solo 2 transacciones. Pero para estar 100% seguro si estos son sus únicos datos (por cierto, si tiene datos críticos, NUNCA debería tener solo 1 copia de ellos, siempre tenga una copia / copia de seguridad en otra ubicación segura; culpar a los creadores de btrfs no justifique contra la propia falta de responsabilidad de las personas de no tener una copia de seguridad: btrfs no es una solución de copia de seguridad, es un sistema de archivos; nada es una verdadera solución de copia de seguridad además de tener una copia de ella en otro lugar, ni siquiera paridad o unidades duplicadas, una verdadera copia de seguridad es sentado en algún lugar subterráneo en los Alpes mientras su copia activa está en su oficina en Texas)

parent transid verify failed on 31302336512 wanted 62455 found 62456

Aquí el diario quiere 62455 pero el disco está uno adelante en 62456, por lo que en su caso simplemente borraría el diario. El diario no se actualizó esta vez. Una vez más, te dije que era seguro, si son tus únicos datos y son megacríticos (la culpa es tuya), y primero haría las siguientes operaciones para estar seguro.

Ejecutar un btrfsck / dev / sda5 (que por cierto solo hace una comprobación de solo lectura, por lo que es completamente seguro, sus únicas opciones de btrfsck de las que debe preocuparse) también le mostrarán esos mensajes.

Pero tenga cuidado si esos datos son críticos, primero lo haría (como dijeron los otros caballeros)

mount -t btrfs -o rootflags=recovery,nospace_cache /dev/sda3 /mnt/sda3

mount -t btrfs -o rootflags=recovery,nospace_cache,clear_cache /dev/sda3 /mnt/sda3

mount -t btrfs -o recovery,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3

Luego cp o rsync todos sus archivos a una ubicación segura, luego, cuando sea seguro, haga el btrfs-zero-log, si es una operación exitosa, solo perdió mucho tiempo haciendo una copia de seguridad de su sistema (pero si no es exitoso, simplemente guardó su culo)

Luego, si los montajes fallaron, realice una restauración btrfs (volcado del sistema, según tengo entendido que es una operación reanudable, sin embargo, sigue pidiendo Y o y de vez en cuando, así que observe la salida)

btrfs restore /dev/sda5 /USB

Luego, cuando sea seguro (cuando se realiza la restauración de btrfs), haga el btrfs-zero-log, si es una operación exitosa, solo perdió mucho tiempo haciendo una copia de seguridad de su sistema (pero si no es exitoso, simplemente salvó su trasero)

Puedes ejecutar la pantalla primero

screen /bin/bash

btrfs restore /dev/sda5 /USB

PANTALLA NOTA LATERAL

Para separar (el comando aún se ejecutará): CONTROL-a luego escriba ": detach" sin las comillas y luego presione ENTER

Otra forma de desconectar: ​​luego cierre la masilla o su terminal y se desconectará (el comando / restauración seguirá ejecutándose).

Para verificarlo, simplemente vuelva a la pantalla:

screen -x

screen -x se adjuntará a las sesiones, incluso si está separado, y a diferencia de -h dice, se adjuntará incluso si ya está adjunto también)

Si tiene varias pantallas, screen -x le indicará que necesita ser más específico para adjuntar a la sesión:

screen -ls

Es para listar todas las sesiones, fácil de recordar.

para ver el PID también puedes hacer esto:

ps aux | grep screen

Una vez que encuentre su PID, ejecute una pantalla como esta:

screen -x PID

Eso se adjuntará a una sesión específica. Puede tener varias sesiones / puttys adjuntas a la misma pantalla (generarán el mismo texto, puede escribir comandos en una y se reflejarán en la otra masilla)

kossboss
fuente
7

Montar en el arranque usando las opciones de montaje de root fs:

rootflags=recovery,nospace_cache

o

rootflags=recovery,nospace_cache,clear_cache

La lista completa de opciones de montaje de btrfs debe estar aquí https://btrfs.wiki.kernel.org/index.php/Mount_options y otras cosas también pueden ser útiles, como noatime, nodatacow (solucionó un error del kernel para mí dándome un posibilidad de copiar mis archivos).

Agréguelo a su grub.cfg / menu.lst, o escríbalo al arrancar.

Las cosas nospace_cache harán las cosas terriblemente lentas. Simplemente inicie, espere (largo), apague y arranque normalmente.

Tuve lo mismo hace unos días, y lo anterior lo solucionó. Pero también después, hubo algunos problemas de espacio ... el espacio reportado no es del 100%, pero aún puede decirse que no hay espacio.

==

Creo que también puede agregar las mismas opciones en su fstab, por ejemplo:

UUID=0237alksfadg-lhdfkj3624-4fdfjb-9dsfe2d-dfddaf /home btrfs defaults,recovery,nospace_cache,clear_cache,subvol=@home 0  
 2

Si intentaba recuperar un directorio / home montado sobre una partición con UUID=0237alksfadg-lhdfkj3624-4fdfjb-9dsfe2d-dfddaf.

Peter
fuente
¿Por qué dos nospace_cache?
un CVn
era un error tipográfico, se suponía que era clear_cache
Peter
:) Usted acaba de guardar por copia de seguridad!
derflocki
1

La respuesta de Peter resolvió el problema para mí, aunque no en Ubuntu. Tenía una /homepartición btrfs'd que, por supuesto, se corrompió. El sistema no arrancaba porque estaba encendido fstab. Ingresé al modo de mantenimiento, corté la línea con esa partición y arranqué normalmente (tenía una partición ext4 de repuesto que podía usar como /home).

Monté la partición manualmente con el siguiente comando:

mount -t btrfs -o recovery,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3y en realidad pude guardar mis datos. Aunque no tardó tanto en montarlo. Así que gracias Peter.

Nikos
fuente
3
Es posible que desee publicar eso como un comentario en la respuesta de Peter, diciendo 'Esto funcionó' y luego marcarlo como la respuesta verdadera. de lo contrario, Peter no obtendrá ningún crédito "verdadero" (puntos de representante)
Thomas Ward
1
mount -t btrfs -o ro,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3

ro = solo lectura

Este trabajo para mi

Dan
fuente
1
¿Leíste el comentario de @The Lord of Time a un comentario similar que se agregó como respuesta? Aquí está de nuevo si no lo hizo: "Es posible que desee publicar eso como un comentario en la respuesta de Peter, diciendo 'Esto funcionó' y luego simplemente marcarlo como la respuesta verdadera. De lo contrario, Peter no obtendrá ninguna" verdad " crédito (puntos de representación) "
geezanansa
1

Yo tuve el mismo problema. Después de reiniciar, ya no pude montar mi partición btrfs. Sin embargo, ninguna de las soluciones mencionadas aquí podría resolverlo.

Lo que me solucionó fue actualizar el kernel de 3.10 a 3.12. Después de reiniciar, la partición btrfs podría volver a montarse.

Fabian Jakobs
fuente