更快地从 tar 存档中选择文件

更快地从 tar 存档中选择文件

我们有一组使用 Duplicity 备份的服务器。我们正在尝试为员工构建一些功能,以便他们可以选择文件并查看可供恢复的版本。Duplicity 将其元数据存储在 tar 文件中,如下所示:

16M Mar  6 07:20 duplicity-new-signatures.20140305T070733Z.to.20140306T070755Z.sigtar.gz
17M Mar  5 07:17 duplicity-new-signatures.20140304T070728Z.to.20140305T070733Z.sigtar.gz
74M Mar  4 08:02 duplicity-full-signatures.20140304T070728Z.sigtar.gz
13M Mar  3 09:11 duplicity-new-signatures.20140302T070743Z.to.20140303T070723Z.sigtar.gz
14M Mar  2 07:18 duplicity-new-signatures.20140301T070921Z.to.20140302T070743Z.sigtar.gz
18M Mar  1 07:22 duplicity-new-signatures.20140228T071001Z.to.20140301T070921Z.sigtar.gz
16M Feb 28 07:23 duplicity-new-signatures.20140227T071151Z.to.20140228T071001Z.sigtar.gz
15M Feb 27 07:27 duplicity-new-signatures.20140226T070820Z.to.20140227T071151Z.sigtar.gz
13M Feb 26 07:20 duplicity-new-signatures.20140225T071049Z.to.20140226T070820Z.sigtar.gz
14M Feb 25 07:28 duplicity-new-signatures.20140224T070941Z.to.20140225T071049Z.sigtar.gz
92M Feb 24 08:14 duplicity-full-signatures.20140224T070941Z.sigtar.gz
  • 每个.sigtar.gz文件都是一个 tar 存档,其中包含所有已更改文件的签名。签名存储为与其引用的文件同名的文件。
  • duplicity-full文件包含集合中每个文件的签名
  • duplicity-new文件仅包含自上次完整或增量备份以来发生变化的文件的签名。

本质上我需要做的是:

for file in `ls /root/.cache/duplicity/hashid/*.sigtar.gz`; do
  tar -tzvf $file signature/path/to/specified/file.name
done

问题是,即使服务器的数据量仅为我们预期的“满载”服务器的 1/20,列出“满载”也可能需要超过 10 秒的时间。我不敢想象一旦这些机器装满,这个过程可能需要多长时间。

有没有什么方法可以加快通过 tar 检索的速度?

或者如果有人碰巧知道解析 Duplicity 元数据的更好方法,我肯定想知道。

答案1

可以使用以下--seek选项来加速通过 tar 进行的检索:

-n, --seek
  archive is seekable

然而,由于 tarball 是压缩的,因此无法进行查找。http://duplicity.nongnu.org/new_format.html承认这一限制。

相关内容