Extraer copias de seguridad TWRP hechas con adb

10

Tengo un teléfono inteligente 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 --compress, también puedo usar la opción.

¿Hay alguna manera de extraer el twrp-20170322.abarchivo de copia de seguridad con las herramientas de línea de comandos GNU / Linux stardard? También consideraré instalar software adicional si es necesario, pero debe ser gratuito (como en libertad).

Enlaces:

Francesco Turco
fuente

Respuestas:

1

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

dd if=$1 bs=24 skip=1 | openssl zlib -d >${1%%.ab}.tar
  • ddes el "Duplicador de disco" (también conocido como "destructor de disco" en caso de que confunda sus parámetros y cambie ify of;)
  • bs=23 recomienda usar un tamaño de bloque de 24 bytes, que necesitamos ...
  • skip=1 omita 1 bloque de 24 bytes (el "encabezado de respaldo")
  • la salida se canaliza opensslpara procesarla y descomprimirla
  • ... y la salida de eso se redirige a un Tarball

A partir de ahí, debes conocer tu camino: simplemente "deshace" (extrae) lo que quieres.

¿Por qué lo usa $1? Bueno, copié esta línea de ab2tar, que se incluye con mi pequeña herramienta Adebar que también te puede interesar: crea una buena documentación del dispositivo, scripts de respaldo y más, todo a través de ADB usando nada más que Bash 😇 Así que pon esa línea en un pequeño pequeño script de shell, y llámalo:

ab2tar twrp-20170322.ab

Luego encuentra un twrp-20170322.tarresultado. Por supuesto, esto requiere opensslestar instalado en su máquina Linux.

Izzy
fuente
Recibo el siguiente mensaje de error: 140376894071512: error: 29065064: lib (41): BIO_ZLIB_READ: error de inflado de zlib: c_zlib.c: 548: error de zlib: error de datos
Francesco Turco
Nunca he visto eso. ¿Podría ser que TWRP usa un método de compresión diferente al ADB estándar (no pude encontrar detalles al respecto)? O, como no especificó --compressal crear la copia de seguridad, ¿crea copias de seguridad sin comprimir? En este último caso, intente omitir el zlibparámetro (o hágalo al revés y especifique --compressal crear la copia de seguridad;).
Izzy
Intenté con: dd if = twrp-20170320.ab bs = 24 skip = 1> twrp-20170320.tar (sin insertar openssl). Pero cuando trato de enumerar el contenido del archivo tar con tar -tf twrp-20170320.tar obtengo: tar: Esto no se parece a un archivo tar; tar: Saltando al siguiente encabezado; tar: Salir con estado de falla debido a errores anteriores
Francesco Turco
Hay una razón para no usar la --compressopción con adb: comprime de manera menos eficiente que xz. Prefiero ahorrar tanto espacio como sea posible. Pero eso no está relacionado con mi problema inicial.
Francesco Turco
Lo que describí anteriormente funciona bien para las copias de seguridad ADB "normales" (lo uso con frecuencia para esos, y tampoco uso un --compressallí). De su declaración ( adb backup …) asumí el mismo formato. Si solo está usando una compresión diferente, debe considerar eso. openssles necesario para descifrar la copia de seguridad, por lo que sin eso, no obtendrá una válida .tar. De sus últimos comentarios, supongo que debe reemplazar zlibpor la parte correspondiente para xz. Aparte de eso, se me acabaron las ideas, lo siento.
Izzy
1

He descubierto que los .abarchivos generados por TWRP son diferentes de los adb backuparchivos normales , por lo que el desplazamiento es diferente de los .abarchivos normales . Pude inspeccionar y extraer archivos usando (por ejemplo para inspeccionar) el siguiente comando:

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

Aparentemente, el encabezado puede ser más largo, pero debe estar alineado con los límites de 512 bytes, así que simplemente modifique el skip=parámetro si no puede encontrarlo al principio.

Tenga en cuenta que el formato de archivo se define en twadbstream.h , si necesita profundizar más en esto.

anarcat
fuente
0

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

Escribí una herramienta de extracción que utiliza twadbstream.h (gracias @anarcat) que he utilizado para recuperar con éxito grandes (~ 10GB) copias de seguridad de ADB TWRP de múltiples archivos del sistema. twrpabx

arifogel
fuente