web-dev-qa-db-ja.com

重複ファイルを手動で抽出する

ドライブを失い、Ubuntu OSをインストールしました。そこから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 /はすべての重複ファイルがある場所であり、/ 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

最も奇妙なのは、ドットで始まるすべてのファイルに加えて、Nautilusを使用してhome/luisディレクトリを参照できないことです。これは、実際にはすべてのバックアップデータが存在する場所でした。

6
Luis Martin
  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. ソースフォルダーで使用可能なすべてのフル/ 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;
    }
    
  2. すべてのファイルをリストするには(末尾に/がないことに注意してください):

    ldup /path_to_folder_contains_backups
    
  3. ファイル名のパターンを検索します。

    ldup /path_to_folder_contains_backups pattern
    

参照:man duplicity

14
user.dz

最初に複製を作成してみてください。
duplicity --gio file:///media/backup /tmp/restore

ある程度詳細な(およびmostly正しい)ステップ ここ があります。

主な詳細

重要な点は、すべてのduplicity-full.*.difftar.gzファイルを同じ場所にアンパックすることです。これにより、2つのsnapshot/およびmultivol_snapshot/ディレクトリだけが残ります。

ファイルがsnapshot/にあれば、完了です。それ以外の場合は、multivol_snapshot/でファイルが使用されていたパスでディレクトリを見つけます。元のファイルを再作成するには、このディレクトリ内のすべてのファイルを結合する必要があります。ファイルには番号が付けられ、catコマンドを使用して結合できます。オリジナルの大きさに応じて、多くのパーツがある場合があります。

元の指示に関する問題

上記のリンクの指示は、cat * > rescued-fileの使用を提案しています。残念ながら、9個以上のパーツがある場合、この単純なアプローチは失敗します。 *は辞書順ではなく、数字順で展開するため、102の前にリストされ、ファイルは間違った順序で再構築されます。

回避策

1つの簡単なアプローチは、辞書の順序doesが同じ長さの場合に機能し、?が単一の文字に一致することを覚えておくことです。したがって、最大のファイルにthree桁がある場合、手動で入力できます。

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を参照してください。

ソース: SF SE
ここ 複雑なバックアップを簡単に復元するためのJavaプログラムを見つけることができます。

6
totti

DéjàDup は、バックアップ場所に保存されているファイルに不透明な形式を使用します。ファイルを復元するには、DéjàDupまたは別の複製ベースのツールを使用する必要があります( この復元ガイド を参照)。

0
totti