ext3ファイルシステムの復元の代表的なツールとしてextundeleteがあります。
しかし、extundeleteは「ext3ファイルシステムとファイルの削除・復元について」のエントリにおける正確なファイルの紐付けやその検知ができていません。extundeleteで復元してしまうと、「ext3ファイルシステムとファイルの削除・復元について」で述べた通り、復元対象ファイルのinodeが以前にも違うファイルで使われていて、そのinodeの以前の情報がディレクトリエントリから抽出できてしまった場合、先に見つかったファイル名でinodeの指し示すデータブロックを復元してしまいます。そのため、意図していないファイル名とデータブロックのファイルが復元される可能性があります。
そこで、そういった問題を解決した現状考えうる最良の復元ツールをextundeleteをベースに実装してみました。やっぱり理論だけでは面白くないなぁと思ったのです。コードはGitHubに置いているので自己責任で試してみて下さい。ext4もできるんじゃないかなぁと思っていますが試していません。機能としては、以下になります。
- ファイル復元
- 復元の際はディレクトリエントリ上でinodeの重複をチェック
- 重複していた場合は、inodeから得られる複数のファイル名でファイルを復元
- 重複していたファイルとinodeの組み合わせをリストで生成