手动提取重复文件

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

  1. 使用duplicity提取它:

    duplicity restore file:///path_to_folder_contains_backups/ path_where_to_extract_it/
    
    Run Code Online (Sandbox Code Playgroud)
  2. 输入 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)

无法看到您要查找的文件,请尝试:

  1. 创建列出源文件夹中可用的所有完整/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)
  2. 列出所有文件(注意没有 tail /):

    ldup /path_to_folder_contains_backups
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在文件名中搜索模式:

    ldup /path_to_folder_contains_backups pattern
    
    Run Code Online (Sandbox Code Playgroud)

参考: man duplicity


tot*_*tti 6

首先尝试用口是心非的方式恢复。
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程序,可以轻松恢复复杂的备份。