Извлечь резервные копии TWRP, сделанные с помощью ADB

10

У меня смартфон Samsung Galaxy S2 GT-I9100 с LineageOS и TWRP. Каждую неделю я делаю резервную копию следующей командой:

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

Я также могу по желанию использовать эту --compressопцию.

Есть ли способ извлечь twrp-20170322.abфайл резервной копии с помощью стандартных инструментов командной строки GNU / Linux? Я также рассмотрю возможность установки дополнительного программного обеспечения, если это необходимо, но оно должно быть бесплатным (как на свободе).

Ссылки:

Франческо Турко
источник

Ответы:

1

При условии, что вы не защитили его паролем:

dd if=$1 bs=24 skip=1 | openssl zlib -d >${1%%.ab}.tar
  • ddэто «Дубликатор диска» (также известный как «разрушитель диска» в случае, если вы путаете его параметры с переключателем ifи of;)
  • bs=23 советует использовать размер блока 24 байта, что нам нужно…
  • skip=1 пропустить 1 блок из 24 байт («Резервный заголовок»)
  • вывод opensslобрабатывается и распаковывается
  • ... и результат этого перенаправлен в тарбол

Оттуда вы должны знать свой путь: просто «распаковать» (извлечь) то, что вы хотите.

Почему это использует $1? Ну, я скопировал эту строку ab2tar, которая включена в мой небольшой инструмент Adebar, который вас также может заинтересовать: создает хорошую документацию по устройству, сценарии резервного копирования и многое другое, все через ADB, используя только Bash 😇 Так что поместите эту строку в крошечный маленький сценарий оболочки, и назовите его:

ab2tar twrp-20170322.ab

Затем найдите twrp-20170322.tarрезультат. Конечно, это необходимо opensslустановить на вашем компьютере с Linux.

Иззи
источник
Я получаю следующее сообщение об ошибке: 140376894071512: ошибка: 29065064: lib (41): BIO_ZLIB_READ: ошибка раздувания zlib: c_zlib.c: 548: ошибка zlib: ошибка данных
Francesco Turco
Никогда этого не видел. Может быть, TWRP использует метод сжатия, отличный от стандартного ADB (я не смог найти подробности об этом)? Или, как вы не указали --compressпри создании резервной копии, создает несжатые резервные копии? В последнем случае попробуйте пропустить zlibпараметр (или сделайте его наоборот и укажите --compressпри создании резервной копии;).
Иззи
Я пробовал с: dd if = twrp-20170320.ab bs = 24 skip = 1> twrp-20170320.tar (без вставки openssl). Но когда я пытаюсь составить список содержимого архива tar с помощью tar -tf twrp-20170320.tar, я получаю: tar: Это не похоже на архив tar; tar: переход к следующему заголовку; tar: выход с состоянием ошибки из-за предыдущих ошибок
Francesco Turco
Есть причина не использовать --compressопцию с adb: она сжимает гораздо менее эффективно, чем xz. Я предпочитаю экономить как можно больше места. Но это не связано с моей первоначальной проблемой.
Франческо Турко
То, что я описал выше, прекрасно работает для «обычных» резервных копий ADB (я часто использую их для тех, и там тоже не пользуюсь --compress). Из вашего заявления ( adb backup …) я предположил тот же формат. Если вы просто используете другое сжатие, вы должны учитывать это. opensslнеобходим для расшифровки резервной копии - поэтому без этого вы не получите действительный .tar. Из ваших последних комментариев я бы предположил, что вы должны заменить zlibна соответствующую часть для xz. Кроме того, у меня нет идей, извините.
Иззи
1

Я обнаружил, что сгенерированные TWRP .abфайлы отличаются от обычных adb backupфайлов, поэтому смещение отличается от обычных .abфайлов. Мне удалось проверить и извлечь файлы, используя (например, для проверки) следующую команду:

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

Очевидно, что заголовок может быть длиннее, но он должен быть выровнен по границам в 512 байт, поэтому просто увеличьте skip=параметр, если он не может его найти сначала.

Обратите внимание, что формат файла определен в twadbstream.h , если вам нужно углубиться в это.

anarcat
источник
0

Проблема с наивным подходом, основанным на dd, заключается в том, что в файле часто встречаются метаданные. Это приводит к повреждению файлов любой значительной длины.

Я написал инструмент извлечения, использующий twadbstream.h (спасибо @anarcat), который я использовал для успешного восстановления больших (~ 10 ГБ) резервных копий TWRP ADB с несколькими файловыми системами. twrpabx

arifogel
источник