一次性编写并传输 gzip 压缩的 tar 存档

一次性编写并传输 gzip 压缩的 tar 存档

我正在尝试想出一种有效的方法来创建 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 文件压缩包文件模块。

答案2

您可能希望查看的主题哈克5论坛将展示正在开发的项目的使用方式mkfifo以及其他 Bash 魔法...我发现一旦设置好,它就可以轻松加密几乎所有内容,并且有用于批量解密的工具。

教授在布丁中,所以特拉维斯-CI当前用于显示所有工作功能,包括测试字符串、文件和目录的恢复。这已经在 Android 上使用 Busybox 和 chroot Linux 进行了测试,但您可能只需要 busybox(如果禁用了到电子邮件的输出轮换),因为大多数源代码是围绕有限的系统设计的。

具体提示tar,检查过去几天的构建日志,你会发现它可以是头发拉如果您忘记将尾随-或弄乱v进行测试,请体验一下。

相关内容