ファイルリカバリ
関連記事
この記事では 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 モードをサポートしてない場合はブロックデバイスとしてアクセスすることができないため、フラッシュメディアリーダーを使ってカメラから物理的に取り外したストレージメディアを利用するしかありません。
Foremost
Foremost はファイルのヘッダやフッタ、内部データ構造に基づいてファイルを復旧させるコンソールプログラムです。この手法は一般的にデータカービングと呼ばれます。Foremost は (dd, Safeback, Encase などで生成された) ディスクイメージのファイル上で動作させることも直接ドライブで動かすことも可能です。ヘッダやフッタを設定ファイルで指定したりコマンドラインのスイッチを使って固有のファイルタイプを指定できます。これらの固有タイプは指定されたファイルフォーマットのデータ構造を考察することで、より信頼性のある高速なリカバリを可能にします。
Foremost の記事を参照してください。
Scalpel
Scalpel は Foremost を元に作成されたコンソールのファイルカービングプログラムです。Foremost よりも効率的に動作します。Golden G. Richard III によって開発され、メディアの断片からファイルタイプを復元するヘッダーおよびフッターの数を指定できます。Apache ライセンスで配布されており、Golden G. Richard III と Lodovico Marziale によってメンテナンスされています [1]。
Scalpel は scalpel-gitAUR パッケージでインストールできます。
Extundelete
Extundelete は ext3 や ext4 パーティションから削除されてしまったファイルを戻すために作られた、ターミナルで動かすユーティリティです。最近パーティションから削除されたファイルや相対パスや inode 情報によって指定したファイルを全てリカバリすることができます。Extundelete はパーティションのマウントが解除されているときしか動作しないので注意してください。リカバリされたファイルは RECOVERED_FILES/
という名前のフォルダ下にある作業ディレクトリに保存されます。
インストール
extundelete[リンク切れ: パッケージが存在しません] パッケージでインストールできます。
使用方法
Linux Poison の記事から引用。
特定のパーティションからデータをリカバリするには、/dev/sdXN
という形で (X は文字で N は数字)、パーティションのデバイス名を知る必要があります。ここの例では /dev/sda4
を使いますが、あなたのシステムではファイルシステムやデバイスの設定によって違う名前になります (例えば、MMC カードリーダーは /dev/mmcblkNpN
という命名規則を使います)。よくわからない場合は、df
を実行してください。現在マウントされているパーティションが表示されます。
データをリカバリするパーティションを決めたら、次を実行してください:
# extundelete /dev/sda4 --restore-file directory/file
サブディレクトリを指定する必要があり、パーティションの一番上からコマンドが実行されます。/home/SomeUserName/
のファイルをリカバリするには、次を実行 (/home
がパーティション上にある場合):
# extundelete /dev/sda4 --restore-file SomeUserName/SomeFile
素早く複数のファイルをリカバリするために、extundelete には --restore-files
オプションもあります。
ディレクトリ全体をリカバリするには、次を実行:
# extundelete /dev/sda4 --restore-directory SomeUserName/SomeDirectory
上級者ならば、extundelete でブロックや inode を手動でリカバリするために、debugfs を使ってリカバリする inode を探して、それから次のコマンドを実行することができます:
# extundelete --restore-inode inode
inode は適当な inode に置き換えて下さい。空白を入れずに、カンマで区切ることでリカバリする inode を増やすことができます。
最後に、パーティション全体から削除されたファイル全てをリカバリするには、次を実行:
# extundelete /dev/sda4 --restore-all
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