Extrair backups de TWRP feitos com adb

10

Eu tenho um smartphone Samsung Galaxy S2 GT-I9100 com LineageOS e TWRP. Toda semana eu faço um backup com o seguinte comando:

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

Opcionalmente --compress, também posso usar a opção.

Existe uma maneira de extrair o twrp-20170322.abarquivo de backup com as ferramentas padrão de linha de comando GNU / Linux? Também considerarei a instalação de software extra, se necessário, mas ele deve ser gratuito (como em liberdade).

Ligações:

Francesco Turco
fonte

Respostas:

1

Desde que você não a tenha protegido com uma senha:

dd if=$1 bs=24 skip=1 | openssl zlib -d >${1%%.ab}.tar
  • ddé o "Disk Duplicator" (também conhecido como "destruidor de disco", caso você confunda seus parâmetros e alterne ife of;)
  • bs=23 aconselha usar um tamanho de bloco de 24 bytes, que precisamos…
  • skip=1 pule 1 bloco de 24 bytes (o "cabeçalho de backup")
  • a saída é canalizada opensslpara processar e desembalar
  • … E a saída disso é redirecionada para um Tarball

A partir daí, você deve conhecer o seu caminho: simplesmente "descompacte" (extraia) o que deseja.

Por que ele usa $1? Bem, eu copiei esta linha ab2tar, que está incluída na minha pequena ferramenta Adebar, na qual você também pode se interessar: cria uma boa documentação do dispositivo, scripts de backup e muito mais, tudo via ADB usando nada além do Bash. pequeno script shell e chame-o de:

ab2tar twrp-20170322.ab

Então encontre um twrp-20170322.tarresultado. Obviamente, isso requer openssla instalação na sua máquina Linux.

Izzy
fonte
Eu recebo a seguinte mensagem de erro: 140376894071512: erro: 29065064: lib (41): BIO_ZLIB_READ: zlib inflate error: c_zlib.c: 548: zlib error: data error
Francesco Turco
Nunca vi isso. Poderia ser TWRP usa um método de compactação diferente do ADB padrão (não consegui encontrar detalhes sobre isso)? Ou, como você não especificou --compressao criar o backup, cria backups não compactados? No último caso, tente deixar de fora o zlibparâmetro (ou faça o contrário e especifique --compressao criar o backup;).
Izzy
Eu tentei com: dd if = twrp-20170320.ab bs = 24 skip = 1> twrp-20170320.tar (sem inserir openssl). Mas quando tento listar o conteúdo do arquivo tar com tar -tf twrp-20170320.tar, recebo: tar: Isso não se parece com um arquivo tar; tar: pulando para o próximo cabeçalho; tar: Saindo com o status de falha devido a erros anteriores
Francesco Turco
Há uma razão para não usar a --compressopção adb: comprime com menos eficiência do que xz. Prefiro economizar o máximo de espaço possível. Mas isso não está relacionado ao meu problema inicial.
Francesco Turco
O que eu descrevi acima funciona bem para backups ADB "normais" (eu o uso frequentemente para esses e também não uso um --compress). Pela sua declaração ( adb backup …), assumi o mesmo formato. Se você estiver apenas usando uma compactação diferente, considere isso. opensslé necessário para descriptografar o backup - portanto, sem isso, você não recebe um válido .tar. Dos seus últimos comentários, eu suponho que você deve substituir zliba parte correspondente por xz. Além disso, estou sem ideias, desculpe.
Izzy
1

Descobri que os .abarquivos gerados pelo TWRP são diferentes dos adb backuparquivos normais , portanto o deslocamento é diferente dos .abarquivos normais . Consegui inspecionar e extrair arquivos usando (por exemplo, para inspecionar) o seguinte comando:

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

Aparentemente, o cabeçalho pode ser mais longo, mas deve estar alinhado com os limites de 512 bytes; portanto, basta aumentar o skip=parâmetro se ele não conseguir encontrá-lo primeiro.

Observe que o formato do arquivo é definido em twadbstream.h , se você precisar aprofundar isso.

anarcat
fonte
0

O problema com a abordagem ingênua baseada em dd é que há metadados de vez em quando no arquivo. Isso resulta em corrupção para arquivos de qualquer tamanho significativo.

Eu escrevi uma ferramenta de extração utilizando twadbstream.h (obrigado @anarcat) que usei para recuperar com êxito backups grandes (~ 10GB) de TWRP ADB de vários arquivos do sistema. twrpabx

arifogel
fonte