提取使用adb创建的TWRP备份


10

我有一个带有LineageOS和TWRP的三星Galaxy S2 GT-I9100智能手机。每周我都会使用以下命令进行备份:

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

我也可以选择使用该--compress选项。

有没有办法twrp-20170322.ab使用stardard GNU / Linux命令行工具提取备份文件?如果需要,我还将考虑安装其他软件,但该软件必须是免费的(与自由一样)。

链接:

Answers:


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给处理并解压缩
  • …并将其输出重定向到Tarball

从那里,您应该知道自己的方式:只需“不了解”(提取)您想要的内容。

为什么使用$1?好吧,我从中复制了这一行ab2tar,您可能也会对我的小工具Adebar包含此行:创建了一个不错的设备文档,备份脚本等等,所有这些都通过ADB进行,只使用了Bash😇😇小shell脚本,并调用它:

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 -tf twrp-20170320.tar列出tar归档文件的内容时,我得到:tar:看起来不像tar归档文件。tar:跳至下一个标题;焦油与失败状态由于先前的错误退出
弗朗西斯·图尔科

有一个不使用该--compress选项的原因adb:它的压缩方式效率不如xz。我更喜欢节省尽可能多的空间。但这与我最初的问题无关。
Francesco Turco

我上面描述的内容对于“常规” 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中定义。


0

基于幼稚的基于dd的方法的问题在于文件中经常出现元数据。这会导致任何重要长度的文件损坏。

我使用twadbstream.h(感谢@anarcat)编写了一个提取工具,用于成功恢复大型(〜10GB)多文件系统TWRP ADB备份。 twrpabx

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.