ファイルを復元できない時にするべきこと
Michael Terry

クリエイティブ・コモンズ 表示-継承 4.0 非移植 ライセンス

Akihiro Nishimura
https://launchpad.net/~nimu-zh3
Kenichi Ito
https://launchpad.net/~ken-i54k
Nobuto Murata
https://launchpad.net/~nobuto
Shinichirou Yamada
https://launchpad.net/~yamada-strong-yamada-nice-64bit
epii
https://launchpad.net/~epii
sicklylife
https://launchpad.net/~sicklylife

# 何をしても上手くいかない時

Déjà Dup が正常に動作しないかもしれません。場合によっては、復元時にクラッシュしたりエラーが表示されるでしょう。データの復元がどうしても必要な場合は、最終的にバグとして対処しなければなりません。課題として報告することを検討してください。その間に、ここでは Déjà Dup の不正な処理の回避策と、データを復旧するためのいくつかのアプローチを示します。

以下は技術的な内容です。よく分からない場合は質問してみてください。

Ctrl Alt T を押して 端末 を開きます。

復元したファイルを配置するディレクトリを作成します。この説明では /tmp/restore を使用します。

    mkdir -p /tmp/restore

# Duplicity で復元する

Déjà Dup があなたの環境で正常に動作していないと仮定して、コマンドラインツールの duplicity を使用します (Déjà Dup でファイルのバックアップと復元を行う際に背後で使用されているツールです)。

ここで提示したものよりも詳しい duplicity に関する情報が必要な場合は man duplicity を実行してください。

まず、すべてのデータの単純な復元を試みてみましょう。バックアップファイルが /media/backup にマウントされた外付けドライブにあり、バックアップ時に暗号化することを選択したと仮定した場合、次のようにコマンドを実行します。

    duplicity --gio file:///media/backup /tmp/restore

バックアップを暗号化していない場合は、コマンドに --no-encryption オプションを追加します。

## 他のバックアップの保存場所

リモートサーバーまたはクラウドサーバーにバックアップした場合は、duplicity で使用する構文が上述の外付けドライブの例とは異なるものになります。選択したバックアップ先へ接続する方法については、後述の例を参照してください。

バックアップを暗号化していない場合は、各コマンド例に --no-encryption オプションを追加することを忘れないでください。

duplicity でサーバーへ接続するのが困難だと思われる場合は、ローカルフォルダーに duplicity のすべてのファイルをダウンロードし、上述の例に従って復元してください。

### FTP

サーバーのアドレス、ポート、ユーザー名、パスワードを調べて、下記の例の SERVER、PORT、USERNAME、PASSWORD をそれぞれ置き換えてください。

バックアップファイルを置くフォルダーを指定していた場合は、下記の例の FOLDER をそのパスに置き換えてください。

ユーザー名でログインしない場合は、USERNAME に anonymous を使用してください。

    gvfs-mount ftp://USERNAME@SERVER:PORT/FOLDER
    duplicity --gio ftp://USERNAME@SERVER:PORT/FOLDER /tmp/restore

### SSH

サーバーのアドレス、ポート、ユーザー名、パスワードを調べて、下記の例の SERVER、PORT、USERNAME、PASSWORD をそれぞれ置き換えてください。

バックアップファイルを置くフォルダーを指定していた場合は、下記の例の FOLDER をそのパスに置き換えてください。

    gvfs-mount ssh://USERNAME@SERVER:PORT/FOLDER
    duplicity --gio ssh://USERNAME@SERVER:PORT/FOLDER /tmp/restore

### WebDAV

サーバーのアドレス、ポート、ユーザー名、パスワードを調べて、下記の例の SERVER、PORT、USERNAME、PASSWORD をそれぞれ置き換えてください。

バックアップファイルを置くフォルダーを指定していた場合は、下記の例の FOLDER をそのパスに置き換えてください。

バックアップを行う際にセキュアな接続 (HTTPS) を使用した場合は、下記の例の dav:// を davs:// に置き換えてください。

    gvfs-mount dav://USERNAME@SERVER:PORT/FOLDER
    duplicity --gio dav://USERNAME@SERVER:PORT/FOLDER /tmp/restore

### Windows 共有

サーバーのアドレス、ユーザー名、パスワードを調べて、下記の例の SERVER、USERNAME、PASSWORD をそれぞれ置き換えてください。

バックアップファイルを置くフォルダーを指定していた場合は、下記の例の FOLDER をそのパスに置き換えてください。

Windows サーバーのドメインを指定していた場合は、USERNAME の前にドメインとセミコロンを追加して、domain;username という形式で使用してください。

    gvfs-mount smb://USERNAME@SERVER/FOLDER
    duplicity --gio smb://USERNAME@SERVER/FOLDER /tmp/restore

# 手動で復元する

duplicity すら動作しないのでは、おそらく望みは薄いでしょう。バックアップファイルのフォーマットは複雑で、簡単に操作することはできません。しかし、どうしても復元したいのであれば、手動での復元に挑戦してみるといいかもしれません。

リモートサーバーまたはクラウドサーバーをバックアップ先として使用していた場合は、まずあなたのコンピューター上のフォルダーに、すべての duplicity ファイルをダウンロードします。次に端末でそのフォルダーに移動します。

Duplicity はボリュームと呼ばれる小さなチャンクにデータを保存します。ボリュームは定期的に実行される「完全バックアップ」と、それ以外の「増分バックアップ」に分類されます。完全バックアップセットの最初のボリュームから順に、ボリュームごとにファイルを復元する必要があります。

バックアップする際に暗号化した場合は、先にボリュームを gpg コマンドで復号しなければなりません。例えば duplicity-full.20110127T131352Z.vol1.difftar.gpg というファイルの場合は以下のように実行します。

    gpg --output duplicity-full.20110127T131352Z.vol1.difftar --decrypt duplicity-full.20110127T131352Z.vol1.difftar.gpg

一度に複数のファイルを復号するには以下のように実行します (ドライブに十分な空き領域があることを確認してください)。

    gpg --multifile --decrypt duplicity-full.20110127T131352Z.*.difftar.gpg

上述の例のように復号した場合は .difftar、暗号化していなかった場合は .difftar.gz というファイルが手元にあるはずです。tar コマンドを使用して、それらのファイルを展開します。

    tar xf duplicity-full.20110127T131352Z.vol1.difftar

一度に複数のファイルを展開するには以下のように実行します。

    for t in duplicity-full.20110127T131352Z.*.difftar; do tar xf $t; done

multivolume_snapshot フォルダーや snapshot フォルダーにデータが展開されるでしょう。複数のボリュームにまたがるファイルは multivolume_snapshot に展開されます。例えば /home/jane/essay.txt というファイルを結合するには、以下のように実行します。

    cd multivolume_snapshot/home/jane/essay.txt
    cat * > essay.txt

増分バックアップからデータを復元するには、rdiff コマンドを使ってファイルを結合します。使用方法は man rdiff で確認してください。