手动提取 duplicity 文件

手动提取 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)

我需要恢复一些重要数据。我能做什么?使用 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

/media/ubuntu/Toshiba\ HDD/BACKUPS/Documents/是所有 duplicity 文件所在的位置,并且/媒体/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

最奇怪的是,除了所有以点开头的文件之外,我无法使用 Nautilus 浏览 home/luis 目录,而事实上我的所有备份数据都位于该目录下。

答案1

CLI 提取 duplicity 档案

  1. 用于duplicity提取它:

     duplicity restore file:///path_to_folder_contains_backups/ path_where_to_extract_it/
    
  2. 输入 GnuPG 密码,按Enter

默认情况下,Duplicity 会恢复源文件夹中的最后一个备份(比较时间),即使它不是同一文件夹的备份。如果您有不同文件夹的多个备份,或者您想要同一文件夹的特定时间,请使用--time选项示例:

duplicity restore --time 20140106T111233Z file:///path_to_folder_contains_backups/ path_where_to_extract_it/

在所有档案中搜索特定的文件名模式

无法看到您正在寻找的文件,请尝试:

  1. 创建列出源文件夹中所有完整/增加备份中包含的所有文件的函数:

     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;
     }
    
  2. 要么吼叫

  • 列出所有文件(注意没有 tail /):

    ldup /path_to_folder_contains_backups
    
  • 在文件名中搜索模式:

    ldup /path_to_folder_contains_backups pattern
    

脚本函数不支持文件夹或档案名称中的空格。

参考:man duplicity

答案2

首先尝试使用 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,并且文件将以错误的顺序重建。

解决方法

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

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

来源 :旧金山证券交易所
这里您可以找到一个 Java 程序,轻松恢复复杂的备份。

答案3

重复使用不透明格式来存储备份位置中的文件。您必须使用 Déjà Dup 或其他基于 duplicity 的工具来恢复文件(请参阅此恢复指南)。

相关内容