ファイルリカバリ
関連記事
この記事では Linux でデータをリカバリ・復活させる方法をまとめています。
目次
特記事項
緒言
このページは基本的に教育目的で使われることを想定しています。かけがえのない貴重な データを偶発的に削除または破損してしまって以前にデータの復元をしたことがない場合、すぐにコンピュータの電源を切って (電源オフボタンを押し続けるかコンセントを抜いて下さい、システムのシャットダウン機能を使ってはいけません) プロの助けを求めましょう。下で説明している手順の意味を完全に理解しないまま中途半端に従うと、状況がますます悪化する可能性があります。
故障したドライブ
データリカバリの方面では、物理ディスクをそのまま使うのではなくディスクのイメージを使って作業するのがベストです。一般的に、故障しているディスクは時間の経過と共に状態が悪化します。ディスクが故障したらまず出来る限り早く出来る限り多くのデータを救出して、それからディスクを破棄するのが目標となるのが当然です。ddrescue や dd_rescue ユーティリティは、dd
と違って、エラーからのリカバリを繰り返し試行してドライブを前から後ろに、そして後ろから前に読み取って、データのサルベージを試みます。これらのユーティリティはログファイルを残すため途中経過を見失うことなくリカバリを停止したり再開することができます。
ディスクのクローンを参照してください。
ddrescue などのユーティリティを使って作成したイメージファイルは物理デバイスと同じようにマウントすることができ安全に作業することが可能です。常にオリジナルイメージのコピーを作成して問題が生じた時にイメージを元に戻せるようにしておくと良いでしょう。
故障しているドライブの読み込みを良くさせる実証済みの方法としてドライブを低温下に置く方法があります。少しの間だけ冷凍庫につっこむことも効果がありますが、あまりにも急速にドライブを冷たいところから温かいところへ移動しないようにくれぐれも注意してください、結露が起こってしまうからです。復旧を行う PC にケーブルを接続したままドライブを冷凍庫に入れるのがよく効きます。
故障中のディスクでファイルシステムのチェックを行ってはいけません、大抵は問題を深刻化させることになるでしょう。読み取り専用でマウントしてください。
フラッシュメディアや小さなパーティションのバックアップ
(マウントされているかどうかを問わず) 'ライブ'パーティションで作業をするのに代わる方法として、問題のファイルシステムがあまり大きすぎず、イメージファイルを作るのに十分な HDD の空き容量があるなら、イメージを使って作業を行うというのがたびたび推奨されます。例えば、USB メモリや携帯音楽プレーヤー、携帯電話などのフラッシュメモリデバイスは大抵の場合そんなにサイズが大きくないためイメージにすることが可能です。
下に記載されているユーティリティの man ページを読んでイメージファイルを扱えるか確認してください。
イメージを作成するには、以下のように dd
を使います:
# dd if=/dev/target_partition of=/home/user/partition.image
デジタルカメラでの作業
下のセクションで説明しているユーティリティをフラッシュメディアで使うには、問題のデバイスがブロックデバイスとして (/dev
以下に) マウントされている必要があります。その際 PTP (Picture Transfer Protocol) モードを使っているデジタルカメラは利用できません。PTP カメラは libgphoto や libptp によって透過的に扱われます。この、"透過的"は PTP デバイスをブロックデバイスにできないことを意味します。PTP モードに取って代わるモードとして、USB Mass Storage (UMS) モードがありますが、カメラによってはサポートされていないことがあります。カメラによってはメニューアイテムから2つのモードを切り替えることが可能です。カメラのユーザーマニュアルを参照してください。カメラが UMS モードをサポートしてない場合はブロックデバイスとしてアクセスすることができないため、フラッシュメディアリーダーを使ってカメラから物理的に取り外したストレージメディアを利用するしかありません。
ユーティリティ一覧
参照 Wikipedia:List of data recovery software#File Recovery
- dvdisaster — CD/DVD メディアの追加のエラー保護。
- ext4magic — ext3 および ext4 ファイルシステムで削除または上書きされたファイルを回復します。
- Foremost — ヘッダー、フッター、および内部データ構造に基づいてファイルを回復するためのコンソール プログラム。このプロセスは、一般にデータカービングと呼ばれます。ヘッダーとフッターは構成ファイルで指定するか、コマンド ライン スイッチを使用して組み込みのファイル タイプを指定できます。
- PhotoRec — ハードディスク、CD-ROM からのビデオ、ドキュメント、アーカイブ、およびデジタル カメラのメモリからの失われた写真を含む失われたファイルを回復するように設計されたファイルデータ回復ソフトウェア。
- Scalpel — Foremost に基づいたファイル カービングおよびインデックス作成アプリケーションですが、はるかに効率的です。これにより、メディアからファイルタイプを復元するために、多数のヘッダーとフッターを指定できます。
- TestDisk — 特定の種類のウイルスや人為的エラー (誤ってパーティションテーブルを削除するなど) などの障害のあるソフトウェアが原因でこれらの症状が発生した場合に、失われたパーティションを回復したり、非起動ディスクを再度起動できるようにすることを主な目的として設計されたデータ回復ソフトウェア。
Ext4Magic
ext4magic は、ext3 および ext4 ファイル システムのリカバリ ツールです。
一部のファイル/フォルダを誤って削除した場合は、コンピュータの電源を 切らないでください 最良の結果を得るには (実際、まともな結果を得るには)、ext4 ジャーナルをどこかに保存する必要があります。
すぐにターミナルを開き、ファイルシステム ジャーナルのコピーをダンプします。
# sudo debugfs -R "dump <8> /some/safe/path/sdXY.journal" /dev/sdXY
削除されたファイルがルート パーティションにあるかどうかに応じて、ジャーナルを別の場所に保存する必要があります。ルートパーティションの場合は、外部ドライブをマウントし、そこにジャーナルをダンプします。非ルートパーティションの場合は、他のパーティションでも構いません。データがクリーンアップされる可能性があるため、/tmp
への保存は避けてください。
削除されたファイルがルート パーティションにある場合は、ジャーナルを保存した後、コンピューターの電源をオフにする必要があります。これを行うには、電源がオフになるまで電源ボタンを押し続けます。これにより、ディスクへの追加の書き込みが防止されます。 Arch ブータブル メディアからプロセスを続行します。それ以外の場合は、影響を受けるパーティションをアンマウントした後、起動したシステムを続行できます (sudo umount /dev/sdXY
または sudo umount /home
など。)
回復可能なファイルを一覧表示するには:
# ext4magic /dev/sdXY -a "$(date -d "-2hours" +%s)" -f deleted/folders/root -j /some/safe/path/sdXY.journal -l
-a
特定の Unix エポック以降に削除されたファイルのみが表示されるようにフィルターを適用します。この例では、過去2時間に設定されています。 Arch のブータブル メディアから実行している場合、絶対時間を使用する前にタイムゾーン (export TZ='Europe/Berlin'
) を変更することをお勧めします。指定しない場合、デフォルトは過去24時間です。-f
はext4magic
が特定のサブフォルダー内のファイルのみを一覧表示する必要があることを示します。このパスは、パーティション ルートに対する相対パスです。-j
は、ext4magic
がジャーナルの特定のバックアップを使用する必要があることを示します。それ以外の場合は、コンピューターを再起動した場合に削除の記録が含まれていない通常のシステム ジャーナルが使用されます。-l
は、削除されたファイルを一覧表示します
ファイルは、最初の列に回復可能なパーセンテージとともに一覧表示されます。
すべてのファイルを 100% の回復可能性で実際に回復するには、次のコマンドを実行します。
# ext4magic /dev/sdXY -a "$(date -d "-2hours" +%s)" -f deleted/folders/root -j /some/safe/path/sdXY.journal -d /recovery/path -r
-d
は、復元されたファイルが保存されるターゲットを示します。-r
は、回復可能性が100%のファイルのみを回復する必要があることを示します。-m
はより多くのファイルを復元しようとしますが、時間がかかります。
ジャーナル バックアップが見つからない場合でも、ファイルの回復を試みることができますが、結果は良くないことが予想されます。
過去24時間以内に削除されたすべてのファイルを復元するには:
# ext4magic /dev/sdXY -r
ディレクトリまたはファイルをリカバリするには:
# ext4magic /dev/sdXY -f path/to/lost/file -r
小文字の r フラグ -r
は、上書きされていない完全なファイルのみを復元します。
部分的に上書きされた壊れたファイルも回復するには、大文字の R フラグ -R
を使用します。
これにより、削除されていないファイルと空のディレクトリも復元されます。
デフォルトの宛先は ./RECOVERDIR
です
オプション -d path/to/dest/dir
を追加することで変更できます。
宛先ディレクトリにファイルが存在する場合、
新しいファイルの名前は、末尾にハッシュ記号 #
を付けて変更されます。
5日前 以降に削除されたファイルを復元するには:
# ext4magic /dev/sdXY -f path/to/lost/file -a $(date -d -5days +%s) -r
ファイル リストを使用するには:
# ext4magic /dev/sdXY -f path/to/lost/file -Lx | grep -a ^--- >recovery-files-big.txt # ext4magic /dev/sdXY -i recovery-files-big.txt -R # ext4magic /dev/sdXY -f path/to/lost/file -lx | grep -a '^ 100%' >recovery-files-small.txt # ext4magic /dev/sdXY -i recovery-files-small.txt -r
大文字の Lフラグ -L
と 小文字の l フラグ -l
の違いは、
2つの R フラグ -R
と -r
(上記参照) の間と同じです。
バイナリファイル名を保持するには、grep -a
を使用します。
ファイルリストを使用すると、たとえばファイル拡張子でファイルをフィルタリングできます。
# cat recovery-files-big.txt | grep -a '\.jpg"$' >recovery-files-big-jpg.txt
... またはファイルリストを分割するには:
# cat recovery-files-big.txt | split -l 100 - recovery-files-big-100-each-
Testdisk と PhotoRec
TestDisk と Photorec はどちらも GNU Public License (GPL) でライセンスされているオープンソースのデータリカバリユーティリティです。
TestDisk は主として、欠陥ソフトウェアや特定のタイプのウイルス、もしくはパーティションテーブルの偶発的な削除といったヒューマンエラーによって引き起こされた、パーティションの喪失を回復したり起動しなくなったディスクをもう一度起動できるようにするために作られました。
PhotoRec は写真・動画・文章などの消失してしまったファイルをハードディスクや CD-ROM からリカバリするために作られたファイル復元ソフトウェアです (ヒント: PhotographRecovery)。PhotoRec はファイルシステムは無視して素のデータを探し当てるので、再フォーマットされたり完全に破壊されたファイルシステムやパーティションテーブルでも動作します。
インストール
testdisk パッケージで TestDisk と PhotoRec が両方インストールできます。
使用方法
ddrescue などを実行して image.img
を作成した後、photorec image.img
でターミナル UI が開くので検索したいファイルタイプと復元したファイルの保存場所を指定してください。
photorec によってリカバリされたファイル
photorec ユーティリティはリカバリしたファイルを番号付きのディレクトリに (ほとんどのファイルにおいて) ランダムな名前で保存します。例: ./recup_dir.1/f872690288.jpg
, ./recup_dir.1/f864563104_wmclockmon-0.1.0.tar.gz
。
参照
- 元のファイル名を取得する方法: PhotoRec FAQ
- Wiki (TestDisk): http://www.cgsecurity.org/wiki/TestDisk
- Wiki (Photorec): http://www.cgsecurity.org/wiki/PhotoRec
- ホームページ: http://www.cgsecurity.org/
e2fsck
e2fsck は Arch のベースインストールに含まれている ext2/ext3 ファイルシステムのチェッカーです。e2fsck は正しいスーパーブロックを頼りにします。スーパーブロックにはファイルシステム全体のパラメータが記述されています。このデータはとても重要なため、パーティションの至るところに複数のスーパーブロックのコピーが分散して置かれます。-b
オプションを使うことで、e2fsck は別のスーパーブロックを使うことが可能です。メインであり、最初のスーパーブロックが破損したときにこれは有用です。
スーパーブロックがどこにあるのか確認するには、対象の、マウントされていないパーティションで dumpe2fs -h
を実行してください。ファイルシステムが作成されたときに設定された、ファイルシステムのブロックサイズによってスーパーブロックには異なる間隔があけられています。
スーパーブロックの場所を求める別の方法として mke2fs の -n オプションを使う方法もあります。絶対に -n
フラグを使うようにして下さい、mke2fs(8) によると、"実際にはファイルシステムを作らないが、あたかもファイルシステムを作成しているかのように表示を出す。このオプションは、ある特定のファイルシステムのバックアップスーパーブロックの位置を知るのに利用できる。ただしこの際 mke2fs にはそのファイルシステムを作ったときと同じパラメータを渡す必要がある (もちろん -n は加えてよい!)"。
詳しくは e2fsck(8) と dumpe2fs(8) を参照してください。
インストール
e2fsck
と dumpe2fs
はどちらも e2fsprogs として Arch のベースインストールに含まれています。
raw ディスクイメージを使う
ddrescue や dd を使ってドライブをバックアップした後、物理ドライブとしてイメージをマウントする必要がある場合、このセクションを見て下さい。
ディスク全体をマウント
ディスクイメージをループデバイスにマウントするには、losetup
コマンドを使います:
# losetup -f -P /path/to/image
QEMU#loop モジュールでパーティションを自動検出するも参照。
パーティションをマウント
ディスクイメージ全体のパーティションをマウントできるようにしたい場合、上の手順に従って下さい。
ディスクイメージ全体をマウントしたら、通常の mount
コマンドをループデバイスで使用します:
# mount /dev/loop0p1 /mnt/example
このコマンドは loop0 のイメージの最初のパーティションをマウントポイント /mnt/example
のフォルダにマウントします。マウントポイントのディレクトリは必ず存在している必要があります。
ディスクのジオメトリ情報を取得
ディスクイメージ全体をループバックデバイスとしてマウントしたら、デバイスのレイアウトを検査することができます。
QEMU を使って NTFS を修復する
一つ以上 NTFS パーティションを含んでいるディスクイメージでは Linux 用の良い NTFS ファイルシステムチェッカーが存在しないため Windows で chkdsk
をする必要があります。QEMU は raw ディスクイメージを仮想マシンの中で本当のハードディスクのように使うことができます:
# qemu -hda /path/to/primary.img -hdb /path/to/DamagedDisk.img
Windows が primary.img
にインストールされている場合、それを使って /path/to/DamagedDisk.img
のパーティションをチェックできるでしょう。
テキストファイルのリカバリ
ブロックデバイスを直接検索して、ハードドライブから削除してしまったテキストファイルを探すことができます。ファイルをリカバリするときはなるべく一意な文字列がファイルに必要です。
grep
を使って直接パーティションから固定文字列 (-F
) を検索:
$ grep -a -C 200 -F 'Unique string in text file' /dev/sdXN > OutputFile
運が良ければ、削除されたファイルの中身が OutputFile に出力されます。手動で文字列の周囲からファイルを抽出できます。
参照
- Data Recovery on the Ubuntu wiki