我正在尝试想出一种有效的方法来创建 Android 上各种系统分区的 gzip 压缩存档,将所有内容通过管道传输到 stdout,以便能够在通过gpg
.
工作流程如下所示:
adb shell "/data/dobackup.sh" | gpg --output suchbackup.tar.gz.gpg --encrypt --sign --recipient [email protected]
shell 脚本基本上需要执行以下操作:
cat /dev/block/platform/msm_sdcc.1/by-name/recovery > recovery.img
cat /dev/block/platform/msm_sdcc.1/by-name/system > system.img
...
然而,正如所见,我想通过 adb shell 执行来完成整个事情,以便所有内容都通过 USB 传输到内存中,并快速加密然后写入磁盘,即不留下未加密的痕迹。
我遇到的问题是,我不确定如何将脚本的内部结构制作成由多个文件/源组成的 tar.gz 文件。基本上,我希望从该脚本的 stdout 输出一个 tar.gz 文件,其中包含以下文件:
/recovery.img
/system.img
/userdata.img
/cache.img
/...
我有什么办法可以做到这一点吗?到目前为止,我的旅行中还没有遇到过这样的问题。
答案1
假设您想要使用 tar 创建存档并将其发送到标准输出,那么如果您不使用f
将输出发送到文件的选项,默认情况下会发生这种情况:
tar cz /{recovery,system,userdata,cache}.img | ...
如果问题是归档文件系统上实际上不存在的“文件”,那么由于 tar 文件的格式,这会有点棘手:每个文件都是之前通过包含文件大小的标头。标头中的文件大小必须正确,因为这是tar
必须知道下一个标头条目从哪里开始的唯一方法。
因此,只有当您可以精确预测生成的文件对象的大小时,才可行。如果你能做到这一点,你应该能够使用标准 python 库等构建 tar 文件压缩包文件模块。