Lui*_*tin 8 gzip backup restore duplicity
我丢失了驱动器和安装在其中的 Ubuntu 操作系统,我使用 Duplicity 从中创建了一个备份,但我不知道如何恢复仍然保留在另一个驱动器中的存档文件。他们都遵循这 4 个符号
duplicity-full.20140106T111233Z.manifest
duplicity-full-signatures.20140106T111233Z.sigtar.gz
duplicity-full.20140106T111233Z.volxxx.difftar.gz (multiple volumes)
duplicity-full.20140106T111233Z.volxxx.difftar (multiple volumes)
Run Code Online (Sandbox Code Playgroud)
有重要数据我需要恢复。有什么我可以做的吗?使用 gzip 就足够了吗?如果是这样,我如何轻松提取它们?
编辑 1尝试您的建议,包括恢复和 --gio 选项,我得到以下文本:
duplicity restore file://media/ubuntu/Toshiba\ HDD/BACKUPS/Documents/ /media/ubuntu/9fb63c8e-ecb5-4c55-b4e0-282e7b4a82ff/tmp/docs/
Local and Remote metadata are synchronized, no sync needed.
Last full backup date: none
GnuPG passphrase:
Traceback (most recent call last):
File "/usr/bin/duplicity", line 1494, in <module>
with_tempdir(main)
File "/usr/bin/duplicity", line 1488, in with_tempdir
fn()
File "/usr/bin/duplicity", line 1337, in main
do_backup(action)
File "/usr/bin/duplicity", line 1422, in do_backup
restore(col_stats)
File "/usr/bin/duplicity", line 697, in restore
restore_get_patched_rop_iter(col_stats)):
File "/usr/bin/duplicity", line 719, in restore_get_patched_rop_iter
backup_chain = col_stats.get_backup_chain_at_time(time)
File "/usr/lib/python2.7/dist-packages/duplicity/collections.py", line 952, in get_backup_chain_at_time
raise CollectionsError("No backup chains found")
CollectionsError: No backup chains found
Run Code Online (Sandbox Code Playgroud)
/media/ubuntu/Toshiba\ HDD/BACKUPS/Documents/是所有重复文件所在的位置,和/media/ubuntu/9fb63c8e-ecb5-4c55-b4e0-282e7b4a82ff/tmp/docs/一个临时目标文件夹我想恢复文件到。
编辑 2更正了 file://media... 中丢失的斜杠。现在我得到了恢复的文件,但不完全符合我的预期。有很多文件丢失(最多 24 GB!)
root@ubuntu:/media/ubuntu/Toshiba HDD/BACKUPS/Documents# ls -la /tmp/docs/home/luis/
total 4176
drwx------ 16 root root 1000 Jun 30 19:13 .
drwx------ 3 root root 60 Jun 30 19:13 ..
drwx------ 3 1000 1000 60 Oct 23 2013 .activestate
drwxr-xr-x 2 1000 1000 60 Oct 23 2013 .ActiveState
drwx------ 3 1000 1000 60 Dec 28 2012 .adobe
-rw------- 1 1000 1000 32120 Jan 4 12:56 .bash_history
-rw-r--r-- 1 1000 1000 220 Dec 28 2012 .bash_logout
-rw-r--r-- 1 1000 1000 3637 Dec 28 2012 .bashrc
drwx------ 3 1000 1000 60 Jan 3 14:01 .cache
drwxr-xr-x 3 1000 1000 60 Nov 16 2013 .cddb
-rw-rw-r-- 1 1000 1000 740 Jan 10 2013 .cola
drwx------ 3 1000 1000 60 Dec 29 2012 .compiz
drwxrwxr-x 3 1000 1000 80 Oct 1 2013 .composer
drwx------ 46 1000 1000 1020 Dec 8 2013 .config
drwx------ 3 1000 1000 60 Dec 28 2012 .dbus
-rw-r--r-- 1 1000 1000 25 Jul 13 2013 .dmrc
drwx------ 3 1000 1000 380 Jan 6 10:31 .dropbox
drwxr-xr-x 6 1000 1000 1660 Dec 17 2013 .dropbox-dist
drwx------ 3 root root 60 Jun 30 19:13 .eclipse
-rw------- 1 1000 1000 50282 Jan 6 10:29 .ICEauthority
drwxrwxr-x 14 1000 1000 340 Dec 7 2013 .PlayOnLinux
-rw-r--r-- 1 root root 2077491 Nov 23 2013 .Soulseek.1385165090491
-rw-r--r-- 1 root root 2076644 Nov 23 2013 .Soulseek.1385166430938
-rw-r--r-- 1 1000 1000 9986 Dec 30 20:02 .Soulseek.1388433748295
drwxrwxr-x 2 1000 1000 60 Oct 13 2013 .SyncWall
-rw------- 1 1000 1000 109 Jan 6 10:29 .Xauthority
-rw-rw-r-- 1 1000 1000 0 Jul 29 2013 .Xauthority.25Y20W
-rw-rw-r-- 1 1000 1000 0 Jul 13 2013 .Xauthority.7K14ZW
-rw-rw-r-- 1 1000 1000 0 Jul 7 2013 .Xauthority.7K7SZW
-rw-rw-r-- 1 1000 1000 0 Jul 13 2013 .Xauthority.9X1E0W
-rw-rw-r-- 1 1000 1000 0 Sep 1 2013 .Xauthority.A3D52W
-rw-rw-r-- 1 1000 1000 0 Sep 1 2013 .Xauthority.CEUV2W
-rw-rw-r-- 1 1000 1000 0 Jul 27 2013 .Xauthority.CP7Q0W
-rw-rw-r-- 1 1000 1000 0 Sep 8 2013 .Xauthority.E1ET2W
-rw-rw-r-- 1 1000 1000 0 Aug 26 2013 .Xauthority.E32K2W
-rw-rw-r-- 1 1000 1000 0 Sep 14 2013 .Xauthority.EKK92W
-rw-rw-r-- 1 1000 1000 0 Jul 12 2013 .Xauthority.F4QRZW
-rw-rw-r-- 1 1000 1000 0 Jul 25 2013 .Xauthority.ISVZ0W
-rw-rw-r-- 1 1000 1000 0 Jul 11 2013 .Xauthority.JU3UZW
-rw-rw-r-- 1 1000 1000 0 Aug 31 2013 .Xauthority.M30S2W
-rw-rw-r-- 1 1000 1000 0 Aug 1 2013 .Xauthority.M3H20W
-rw-rw-r-- 1 1000 1000 0 Sep 9 2013 .Xauthority.MKIN2W
-rw-rw-r-- 1 1000 1000 0 Aug 28 2013 .Xauthority.RWHB2W
-rw-rw-r-- 1 1000 1000 0 Jul 15 2013 .Xauthority.SN85ZW
-rw-rw-r-- 1 1000 1000 0 Sep 15 2013 .Xauthority.T22C3W
-rw-rw-r-- 1 1000 1000 0 Jul 14 2013 .Xauthority.T6CB0W
-rw-rw-r-- 1 1000 1000 0 Jul 31 2013 .Xauthority.VF7Q0W
-rw-rw-r-- 1 1000 1000 0 Sep 9 2013 .Xauthority.WGEX2W
-rw-rw-r-- 1 1000 1000 0 Aug 31 2013 .Xauthority.WZR52W
-rw-rw-r-- 1 1000 1000 0 Jul 25 2013 .Xauthority.YQIR0W
Run Code Online (Sandbox Code Playgroud)
最奇怪的是,除了所有以点开头的文件之外,我无法使用 Nautilus 浏览 home/luis 目录,实际上我所有的备份数据都在那里。
use*_*.dz 16
使用duplicity
提取它:
duplicity restore file:///path_to_folder_contains_backups/ path_where_to_extract_it/
Run Code Online (Sandbox Code Playgroud)输入 GnuPG 密码,按 Enter
默认情况下,Duplicity 会在源文件夹中恢复上次备份(比较时间),即使它不是同一文件夹的备份。如果您有不同文件夹的多个备份,或者您想要同一文件夹的特定时间,请使用--time
选项示例:
duplicity restore --time 20140106T111233Z file:///path_to_folder_contains_backups/ path_where_to_extract_it/
Run Code Online (Sandbox Code Playgroud)
无法看到您要查找的文件,请尝试:
创建列出源文件夹中可用的所有完整/inc 备份中包含的所有文件的函数:
ldup () {
for f in $(ls $1/duplicity-*.manifest.gpg); do
echo "========================================================================";
echo $f;
n=$(basename $f .manifest.gpg);
prefix=$(echo $n | awk 'BEGIN { FS = "." } ;{ print $1 }');
if [[ "$prefix" == "duplicity-full" ]]; then
t=$(echo $n | awk 'BEGIN { FS = "." } ;{ print $2 }');
else
t=$(echo $n | awk 'BEGIN { FS = "." } ;{ print $4 }');
fi;
echo -e "Creation time:\t" $t;
echo "------------------------------------------------------------------------";
duplicity list-current-files --time $t file://$1/ | grep "$2";
done;
}
Run Code Online (Sandbox Code Playgroud)列出所有文件(注意没有 tail /
):
ldup /path_to_folder_contains_backups
Run Code Online (Sandbox Code Playgroud)在文件名中搜索模式:
ldup /path_to_folder_contains_backups pattern
Run Code Online (Sandbox Code Playgroud)参考: man duplicity
首先尝试用口是心非的方式恢复。
duplicity --gio file:///media/backup /tmp/restore
有一些比较详细的(并且大多是正确的)步骤在这里。
关键细节
关键是将所有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
.
来源:SF SE
在这里你可以找到一个java程序,可以轻松恢复复杂的备份。