如何手动提取备份集的副本?

我在我的networking服务器上有一套由复制软件生成的文件:

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

备份没有encryption。

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

如何下载所需的档案,然后如下所示:duplicity scp://[email protected]//usr/backup restored_dir(来自官方网站的示例)

如果有其他人遇到这种情况(就像我刚才那样),在这里有一些相当详细的(也是正确的)步骤。

重要细节

关键是要将所有的duplicity-full.*.difftar.gz文件放在同一个地方,这样你只剩下两个snapshot/multivol_snapshot/目录。

如果你的文件在snapshot/那么你就完成了。 否则,请在multivol_snapshot/中find文件所在的path:您需要将此目录中的所有文件连接在一起以重新创build原始文件。 这些文件是编号的,可以使用cat命令连接在一起。 根据原来的大小,可能有很多部分。

问题与原来的指示

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

解决方法

一个简单的方法是记住字典顺序在数字长度相同的情况下工作,那? 匹配单个字符。 所以如果你最大的文件有三位数,你可以手动input:

 cat ? ?? ??? > rescued-file 

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

脚本

如果你有很多文件需要恢复,并且不想为所有的文件input文件,你可能更喜欢使用这样的脚本。 它列出每个文件的包含目录,从列表中删除重复项,然后转到每个目录,并从那里的片段创build一个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到你正在寻找的任何文件名的末尾,你应该find它。

限制

这不会还原任何原始文件权限或所有权。 它也不处理增量备份,但是在这一点上, 链接的指令也有点死胡同 – 他们只是build议使用rdiff '将文件拼接在一起',并将读者引用到man rdiff

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

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