11 votos

Extraer las copias de seguridad de TWRP hechas con adb

Tengo un smartphone Samsung Galaxy S2 GT-I9100 con LineageOS y TWRP. Cada semana hago una copia de seguridad con el siguiente comando:

adb backup -f twrp-20170322.ab --twrp boot data system

Opcionalmente puedo usar el --compress también.

¿Hay alguna manera de extraer el twrp-20170322.ab con herramientas de línea de comandos GNU/Linux? También consideraré la instalación de software extra si es necesario, pero debe ser libre (como en la libertad).

Enlaces:

2voto

anarcat Puntos 108

He comprobado que los generados por TWRP .ab son diferentes de los archivos normales adb backup por lo que el desplazamiento es diferente al normal .ab archivos. Pude inspeccionar y extraer archivos usando (por ejemplo para inspeccionar) el siguiente comando:

dd if=backup.ab bs=512 skip=1 | tar ft -

Aparentemente, la cabecera puede ser más larga, pero debe estar alineada con los límites de 512 bytes, por lo que sólo hay que golpear el skip= si no lo encuentra al principio.

Tenga en cuenta que el formato del archivo se define en twadbstream.h si necesitas profundizar en esto.

2voto

arifogel Puntos 1

El problema con el enfoque ingenuo basado en dd es que hay metadatos cada cierto tiempo en el archivo. Esto da lugar a la corrupción de los archivos de cualquier longitud significativa.

Escribí una herramienta de extracción utilizando twadbstream.h (gracias @anarcat) que he utilizado para recuperar con éxito grandes (~10GB) copias de seguridad TWRP ADB de varios sistemas de archivos. twrpabx

0 votos

Gracias. Su herramienta funcionó para mí después de aplicar estos parches mencionados en las cuestiones de Github github.com/prudy/twrpabx/tree/img_and_issue4

0 votos

@TrojanName ¿has podido extraer la copia de seguridad de varias particiones con estos parches?

0 votos

@SandroAntonucci Sí, creo que lo hizo

1voto

Izzy Puntos 45544

Siempre que no lo hayas protegido con una contraseña:

dd if=$1 bs=24 skip=1 | openssl zlib -d >${1%%.ab}.tar
  • dd es el "Duplicador de Disco" (también conocido como "destructor de disco" en caso de que confundas sus parámetros y cambies if y of ;)
  • bs=23 le aconseja usar un tamaño de bloque de 24 bytes, que necesitamos
  • skip=1 saltarse 1 bloque de 24 bytes (la "Cabecera de reserva")
  • la salida se canaliza a openssl para procesarlo y desempaquetarlo
  • y la salida de eso es redirigida a una bola de tar

A partir de ahí, deberías saber el camino: simplemente "untar" (extraer) lo que quieres.

Por qué utiliza $1 ? Bueno, copié esta línea de ab2tar que está incluido en mi pequeña herramienta Adebar también podría interesarte: crea una bonita documentación del dispositivo, scripts de copia de seguridad y más, todo vía ADB usando nada más que Bash

0 votos

Me aparece el siguiente mensaje de error: 140376894071512:error:29065064:lib(41):BIO_ZLIB_READ:zlib inflate error:c_zlib.c:548:zlib error:data error

0 votos

Nunca he visto eso. ¿Podría ser que TWRP utilice un método de compresión diferente al del ADB estándar (no he podido encontrar detalles al respecto)? O, como no has especificado --compress al crear la copia de seguridad, crea copias de seguridad sin comprimir? En este último caso, pruebe a omitir el zlib (o hazlo al revés y especifica --compress al crear la copia de seguridad ;).

0 votos

He probado con: dd if=twrp-20170320.ab bs=24 skip=1 > twrp-20170320.tar (sin insertar openssl ). Pero cuando intento listar el contenido del archivo tar con tar -tf twrp-20170320.tar obtengo: tar: Esto no parece un archivo tar; tar: Saltando a la siguiente cabecera; tar: Exiting with failure status due to previous errors

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X