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

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

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

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

备份已完成且未加密。

我当前的托管商的服务器上没有 duplicity,也不想安装它。如何使用远程 SSH 访问解压这些文件?也许有一些 bash 脚本可以做到这一点?

答案1

如何下载所需的档案,然后这样做:duplicity scp://[电子邮件保护]//usr/backup restored_dir (来自官方网站的示例)

答案2

万一其他人遇到这种情况(就像我刚刚遇到的一样),这里有一些相当详细的(和大多正确的)步骤在这里

关键细节

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

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

原始说明存在问题

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

解决方法

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

cat ? ?? ??? > rescued-file

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

脚本

如果您有很多文件需要恢复,但又不想为所有文件都输入这些代码,那么您可能更愿意使用这样的脚本。它会列出每个文件的包含目录,从列表中删除重复项,然后转到每个目录并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

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

限制

这不会恢复任何原始文件权限或所有权。它也不处理增量备份,但链接指令在这一点上也遇到了一些死胡同——他们只是建议使用rdiff“将文件缝合在一起”并让读者参考man rdiff

答案3

您可以尝试解压这些档案,并复制所需的文件。我不知道它如何备份文件,但我认为它将文件复制到目录并对其进行 gzip 压缩(或 tar.gz)

答案4

就你的情况而言,我认为最好使用可以简单提取的备份软件(或脚本)。你可以看看 backuppc、flaxbackup(我不知道它是否在你的主机上工作,如果是 vps(或 vds)它可以,但如果只是共享主机则不行)。

相关内容