如何手动提取由duplicity制作的备份集?

And*_*rew 5 backup tar gzip duplicity

我的网络服务器上有一组由 duplicity 软件生成的文件:

  • 口是心非。20110315T085334Z.vol1.difftar.gz
  • duplicity-full.20110315T085334Z.vol2.difftar.gz
  • duplicity-full.20110315T085334Z.vol3.difftar.gz
  • 等等...(50 个文件,总大小约 1 Gb)

已在未加密的情况下进行备份。

我目前的主机在他的服务器上没有口是心非,不想安装它。如何使用远程 SSH 访问解压这些文件?也许有一些 bash 脚本可以做到这一点?

小智 8

如果任何人遇到这样(我只是有)有一些比较详细的(并且大多是正确的)步骤在这里

关键细节

关键是将所有duplicity-full.*.difftar.gz文件解压到同一个地方,这样你就只剩下两个snapshot/multivol_snapshot/目录了。

如果您的文件在,snapshot/那么您就完成了。否则multivol_snapshot/在您的文件原来所在的路径中找到目录:您需要将此目录中的所有文件连接在一起以重新创建原始文件。文件被编号,并且可以使用cat命令连接在一起。根据原件的大小,可能会有很多部分。

原始指令有问题

上面链接的说明建议使用cat * > rescued-file. 不幸的是,如果您有 9 个以上的零件,这种简单的方法就会失败。由于*以字典顺序而不是数字顺序展开,10将在 之前列出2,并且文件将以错误的顺序重建。

解决方法

一种简单的方法是记住,当数字长度相同并且匹配单个字符时,字典顺序确实有效?。所以,如果您的最大的文件有3个数字,你可以手动输入:

cat ? ?? ??? > rescued-file
Run Code Online (Sandbox Code Playgroud)

?根据最大文件号,根据需要添加或删除模式。

脚本

如果您有很多文件要恢复并且不喜欢为所有文件都键入这些文件,您可能更喜欢使用这样的脚本。它列出每个文件的包含目录,从列表中删除重复项,然后转到每个目录并content从那里的片段创建一个文件。(spacer只是为了$1工作。)

find multivol_snapshot/ -type f -printf '%h\0' | \
  sort -uz | \
  xargs -0 -n 1 sh -c 'cd "$1" ; cat $(ls | sort -n) > content' spacer
Run Code Online (Sandbox Code Playgroud)

现在,您只需将/content要查找的任何文件名添加到末尾,您就会找到它。

限制

这不会恢复任何原始文件权限或所有权。它也不处理增量备份,但是链接的说明在这一点上也遇到了一些死胡同——他们只是建议使用rdiff“将文件拼接在一起”并将读者推荐给man rdiff.


小智 2

如何下载所需的存档,然后像这样制作:duplicity scp://uid@other.host//usr/backup returned_dir(来自官方网站的示例)