未来のいつか/hyoshiokの日記

hyoshiokの日々思うことをあれやこれや

夏休みの宿題続き

昨日までのあらすじ:自分のホームディレクトリをひょんなことからすっぱり消してしまったhyoshiokが一度消えたはづのファイル(とディレクトリ)に出会うために旅に出た。

失った物は大きい。6GB(ギガバイト、1バイトの約10億倍)がすっぱりなくなる。さっぱりしてしまった。とりあえづ、現状を確保するために、

# dd if=/dev/hda6 of=/root/hda6.img bs=1024

で当該パーティションをコピーしておく。上記のコマンドで/dev/hda6パーティションの物理的コピーを/root/hda6.imgというファイルにまるまるコピーする。いろいろな調査はコピーしたファイルに対して行う。/dev/hda6は問題が解決するまで一切手をふれないようにしておく。変な事をして取り返しが付かない事になったら大変である。

調査の定石でgoogleext2 undeleteなどしてインターネットに頼ってみる。Linux Ext2fs Undeletion mini-HOWTO http://www.linux.or.jp/JF/JFdocs/Ext2fs-Undeletion/ 一見古そうなドキュメントであるが藁にもすがる気持で読む。

次のような状況を想像してほしい。ここ 3 日間、飲まず食わすでシャワーも浴びずに作業を続け、ようやくその抑えきれないハッキングの衝動が実を結んだ。ついに、プログラムが完成したのだ。世界的な賞賛と名声をもたらすだろうほどの。あとは tar でかためて、Metalab にあげるだけだ。おっと、Emacs のバックアップファイルの削除を忘れていた。ここであなたは、rm * ~ とコマンドを打つ。そして、嗚呼、コマンドに余計なスペースを入れてしまったことに気付くのである。世紀の逸品 を削除してしまった! しかし、万策尽きたわけではない。この文書は、Ext2 ファイルシステム上で削除してしまったファイルを復旧する方法について解説している。おそらく、最後にあなたはそのプログラムをリリースできるはず....

熟読する。debugfsというそれらしきツールでいろいろできるらしい。コマンドはlsdelで削除したi-node を探すらしい。

# debugfs hda6.img
debugfs 1.32 (09-Nov-2002)
debugfs:  lsdel
ls_deleted_inodes: Ext2 file too big while calling ext2fs_block_iterate
ls_deleted_inodes: Ext2 file too big while calling ext2fs_block_iterate
以下略

いきなりエラーメッセージらしきものがでてくる。i-nodeというのはファイルそのものの情報をもつ特別なデータである。i-nodeの番号でファイルは一意に識別されているので非常に重要である。ls -i などとするとi-node番号を表示してくれるが通常はi-node なんぞは意識しない。このi-node番号が分かるとそのファイルの論理データブロックが分かるので、論理データブロックをから物理ブロックを捜し出してファイルを復旧するという道のりになる。残念ながらlsdelコマンドでは復旧すべきファイルはみつからなかった。

ここで立ち止まる。闇雲にツールでごりごりやるのはいかがな物かと思う。問題を正しく理解しない前にダンプだなんだというのは問題をより複雑にする。ありがちな行動であるが、ここは一歩立ち止まって基本に戻る事にする。ext2ファイルシステムとは何物か?正しく理解するために「詳解LINUXカーネル」第二版 ISBN:4873111331 を紐解く。第17章Ext2Ext3ファイルシステムを読む。一見回り道のようだがじっくり行ってみよう。