まさかのファイル消失時にファイル復元を試みるツール「Magic Rescue」

 Trashを空にしたりShift-Delのキーコンビネーションでファイル削除をした直後に、消してはならぬファイルを消したことに気づいて青ざめている場合、 Magic Rescue があなたを救ってくれるかもしれない。Magic Rescueはブロックデバイスにある特定のファイルタイプを検索して、指定ディレクトリ中に一括抽出してくれるツールだ。後はサルベージされた中から必要なファイルを探し出せばいいのである。

 当然ながら削除ファイルをどこまで遡れるかには限界があるし、フォーマットによっては目標とするファイルヘッダが識別困難なものもあるが、Magic Rescueそのものの使用法は決して難しいものではない。またMagic Rescueには、簡単なチュートリアルが付けられたmanページも整備されている。いずれにせよこのツールが有す潜在能力を完全に引き出すには、事前の下調べと入念な準備が不可欠である。

セットアップ

 Magic Rescueを使用するには、復元したファイル群を収容する専用ディレクトリおよび、復元対象のファイルタイプを特定するための“レシピ”を準備しておかなくてはならない。

 このうち収容用ディレクトリの作成先については、フィードバックループを誘発して復元すべき肝心のファイルを上書きさせる危険性があるため、検索対象のブロックデバイスとは異なるところに用意しておく必要がある。例えば単一パーティション構成のシステムの場合は、外部接続するフラッシュメモリや外付けハードドライブなどに収容用ディレクトリを用意することを検討すべきだろう。そうではなく複数のパーティションが設けてある場合でも、サルベージしたファイル群の回収用ディレクトリは空きスペースが充分にあるパーティション上に作成しておかなくてはならない。これはmanページにも解説されている注意点だが、特にグラフィックおよびオーディオ系ファイルなどの大型ファイルを何百個も回復する場合などは、それなりの容量を確保しておくべきである。私のシステムの場合は3GBも空いていればお釣りがくる位なのだが、こうしたものは各自の使用パターンや日頃どのようなデータをダウンロードしているかによって変わって来るので、状況によってはそれ以上の空きスペースが必要となる場合も出てくるはずだ。

 Magic Rescueにおけるレシピ(recipe)とは、各種ファイルフォーマットのヘッダ部を識別させるための小型スクリプトのことである。こうしたファイルフォーマットに関する知識を既に有しているユーザや、これを機に勉強したいというユーザであれば、manページの記述を参考にして独自のレシピを記述してみてもいいだろう。作成したレシピについては/usr/share/magicrescue/tools/checkrecipeに配置してテストができるようになっている。

 もっとも大部分のユーザは、Magic Rescueインストール時に/usr/share/magicrescue/recipesに用意される標準のレシピ群を使用するか、インターネット上で公開されている各種の専用レシピを探すことになるだろう。最新バージョンの同梱レシピ群では、avi、elf、gimp-xcf、gzip、jpeg、mp3、Microsoft Office、perl、png、zipファイルを識別できる他、OpenOffice.orgファイルおよびGNU General Public Licenseがヘッダに付けられているファイルにも対応している。これらの標準レシピは独自レシピを記述する際の参考にもなるはずだ。

Magic Rescueの実行手順

 Magic Rescueのmanページを見ると、その使用前には「hdparm -d1 -c -u1 /dev/device 」というコマンドを実行して、メモリへの直接アクセスを可能にしておくことが推奨されている。このコマンドは絶対に必須という訳ではないが、実行しておくと処理完了までの所用時間を大幅に短縮させることができる。ただしMagic Rescueのパフォーマンス調整としては、コマンドパラメータ形式(後述)で検索設定を変更する方が扱いやすいかもしれない。

 Magic Rescueを実行するには、最低でも回収用ディレクトリとレシピを指定しておく必要がある。コマンド指定の基本形は以下のとおり。

magicrescue -d directory -r recipe device

 具体的には「magicrescue -d /mnt/external -r /usr/share/magicrescue/recipes/zip /dev/sda1のような指定になる。複数のファイルフォーマットを一括で検索させたい場合は、該当するレシピ群を収めたディレクトリを指定すればいい。

 実行結果の記録を残したければ- M i0オプションを指定しておくことで、処理された入力および出力ファイルをすべて確認できるようになる。

 -b blocksize パラメータをを指定すると、指定ブロックサイズの整数倍から始まるファイルだけに検索対象を制限させることができる。manページの説明では、通常のケースではブロックサイズを512としておけばいいとされている。

 16進数の扱いに慣れているユーザであれば、パーティション上の検索位置を-O = position というパラメータで直接指定することもでき、同じく検索開始位置の-O + position による後方移動および-O - position による前方移動も行える。この-Oパラメータが役立つのは、長時間に及ぶ検索をCtrl-Cで中断させた場合で、中断地点を別途控えておけば、後からO =を使用することで検索中断位置から処理を再開できるのである。

検索終了後の処理に役立つユーティリティ

 Magic Rescueの検索結果については、これらを処理する2つのサポート用ユーティリティが/usr/share/magicrescue/toolsに用意されている。例えば「dupemap delete,report resultdirectory 」というコマンドを実行すると、回収用ディレクトリにある重複ファイルを自動で削除させることができる。また最初に複数のディレクトリに「dupemap report -dfile 」を実施してファイルをデータベース化しておいてから、-dfile という指定でこのコマンドを実行すると、システム上にあるファイルを一括で削除できる。

 また「magicsort resultdirectory 」を実行すると、ファイルコマンドを使用して、ディレクトリ中の重複していないファイルだけを別ディレクトリに移動させることができる。

その他の復元ツール

 Magic Rescueのmanページには、「Magic Rescueはファイルリカバリの汎用アプリケーションを意図したものではありません。アクセスできなくなったファイルシステムから特定タイプのファイルを一括で抽出する場合は役立ちますが、その他のケースに関してはより適したツールが存在しています」という内容の免責条項が記載されている。ここで推奨されているツールとは、正常なパーティションを処理する場合はgpart、ダメージを受けていないパーティションの場合はThe Sleuth Kit(サポートするパーティションの種類には制限がある)、Magic Rescue用のレシピが存在しない場合はForemostである。

 またmanページでは触れられていないが、GNOMEバージョンのMagic Rescueとして開発初期段階のGRescueも存在している。

 これらがいずれも有用なツールであることに間違いはないが、むしろmanページにある先の免責条項そのものがMagic Rescueの能力を不当に低く評価しすぎていると言うべきだろう。確かに他のプログラムには豊富なオプションやユーティリティが用意されているものの、正常なファイルシステムであろうが損傷したファイルシステムであろうが、ファイルリカバリという処理そのものは、必要なレシピさえ手元にあればMagic Rescueだけで満たせるはずなのである。

Bruce Byfieldは、コンピュータジャーナリストとして活躍しており、Linux.com、IT Manager’s Journalに定期的に寄稿している。

Linux.com 原文