Ekstrak cadangan TWRP yang dibuat dengan adb

10

Saya memiliki smartphone Samsung Galaxy S2 GT-I9100 dengan LineageOS dan TWRP. Setiap minggu saya membuat cadangan dengan perintah berikut:

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

Saya juga bisa menggunakan --compressopsi ini.

Apakah ada cara untuk mengekstrak twrp-20170322.abfile cadangan dengan alat baris perintah GNU / Linux stardard? Saya juga akan mempertimbangkan untuk menginstal perangkat lunak tambahan jika diperlukan, tetapi harus gratis (seperti dalam kebebasan).

Tautan:

Francesco Turco
sumber

Jawaban:

1

Asalkan Anda tidak melindunginya dengan kata sandi:

dd if=$1 bs=24 skip=1 | openssl zlib -d >${1%%.ab}.tar
  • ddadalah "Disk Duplicator" (juga dikenal sebagai "penghancur disk" jika Anda bingung dengan parameternya ifdan of;)
  • bs=23 menyarankan untuk menggunakan ukuran blok 24 byte, yang kita perlu…
  • skip=1 lewati 1 blok 24 byte ("Header cadangan")
  • output akan disalurkan opensslke proses dan membongkar itu
  • ... dan output dari itu diarahkan ke Tarball

Dari sana, Anda harus tahu jalan Anda: cukup "untar" (ekstrak) apa yang Anda inginkan.

Kenapa menggunakan $1? Yah, saya menyalin baris ini dari ab2tar, yang disertakan dengan Adebar alat kecil saya, Anda mungkin tertarik juga: membuat dokumentasi perangkat yang bagus, skrip cadangan, dan banyak lagi, semua melalui ADB tidak menggunakan apa-apa selain Bash 😇 Jadi tuliskan baris itu di kecil skrip shell kecil, dan menyebutnya:

ab2tar twrp-20170322.ab

Kemudian temukan twrp-20170322.tarhasilnya. Tentu saja, ini perlu openssldiinstal pada mesin Linux Anda.

Izzy
sumber
Saya mendapatkan pesan galat berikut: 140376894071512: galat: 29065064: lib (41): BIO_ZLIB_READ: zlib galat kembang: c_zlib.c: 548: galat zlib: galat data
Francesco Turco
Belum pernah melihatnya. Mungkinkah TWRP menggunakan metode kompresi yang berbeda dari ADB standar (saya tidak bisa menemukan detailnya)? Atau, karena Anda tidak menentukan --compresskapan membuat cadangan, membuat cadangan tidak terkompresi? Dalam kasus terakhir, coba tinggalkan zlibparameter (atau lakukan sebaliknya dan tentukan --compresssaat membuat cadangan;).
Izzy
Saya mencoba dengan: dd if = twrp-20170320.ab bs = 24 skip = 1> twrp-20170320.tar (tanpa menyisipkan openssl). Tetapi ketika saya mencoba mendaftar isi arsip tar dengan tar -tf twrp-20170320.tar saya mendapatkan: tar: Ini tidak terlihat seperti arsip tar; tar: Melewati header berikutnya; tar: Keluar dengan status kegagalan karena kesalahan sebelumnya
Francesco Turco
Ada alasan untuk tidak menggunakan --compressopsi adb: kompres jauh lebih efisien daripada xz. Saya lebih suka menghemat ruang sebanyak mungkin. Tapi itu tidak terkait dengan masalah awal saya.
Francesco Turco
Apa yang saya jelaskan di atas berfungsi dengan baik untuk backup ADB "normal" (Saya sering menggunakannya untuk itu, dan saya juga tidak menggunakannya di --compresssana). Dari pernyataan Anda ( adb backup …) saya mengasumsikan format yang sama. Jika Anda hanya menggunakan kompresi berbeda, Anda harus mempertimbangkan itu. openssldiperlukan untuk mendekripsi cadangan - jadi tanpa itu, Anda tidak mendapatkan valid .tar. Dari komentar terakhir Anda, saya menganggap Anda harus mengganti zlibdengan bagian yang sesuai untuk xz. Selain itu, saya kehabisan ide, maaf.
Izzy
1

Saya telah menemukan bahwa .abfile yang dihasilkan TWRP berbeda dari adb backupfile normal , sehingga offset berbeda dari .abfile normal . Saya dapat memeriksa dan mengekstrak file menggunakan (misalnya untuk memeriksa) perintah berikut:

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

Tampaknya, tajuknya mungkin lebih panjang, tetapi harus disejajarkan dengan batas 512-byte, jadi cukup benturkan skip=parameter jika tidak dapat menemukannya pada awalnya.

Perhatikan bahwa format file didefinisikan dalam twadbstream.h , jika Anda perlu menggali lebih dalam.

anarcat
sumber
0

Masalah dengan pendekatan berbasis dd naif adalah bahwa ada metadata setiap begitu sering dalam file. Ini menghasilkan korupsi untuk file dengan panjang yang signifikan.

Saya menulis sebuah alat ekstraksi yang menggunakan twadbstream.h (terima kasih @anarcat) yang telah saya gunakan untuk berhasil memulihkan cadangan multi-filesystem TWRP ADB yang besar (~ 10GB). twrpabx

arifogel
sumber