ボーっと画像を眺めていて、ふと気付いた。 やけに読み込みに時間のかかるファイルがある。jpegなのに異様に。 見てみると、ファイルサイズが数メガバイトもある。jpegなのに。
こんなに大きいのは明らかに異常だ。 しかもよく見てみると、そういうファイルが1つや2つじゃない。 バイナリエディタで開いてみた。数百キロバイトの、正常らしいデータの後は、 全部ゼロで埋められていた。何が起きたのだろうか?
そういえば、起きていたじゃないか。第19話で、 余計なことしてディスクを壊してしまっていたじゃないか。 その後、fsckして、ファイルシステムの矛盾は解消していたけれど、 データが消失していないかどうかは検証していない。 たぶん、この異常に大きいjpegは、その時にできたものだろう。
しょうがないのでまたスクリプトを組んで、対象を洗い出す。 jpegファイル(JFIF)のファイルの末尾は、FF D9で終わるので、 そうでないファイルを一覧表示させてみた。 この方法だと、jpegファイルしか救えないけれど、 まずはjpegからいってみよう。
初めてperlでプログラム組んでみた。 FF D9で終わっていないjpegファイルを一覧表示させてみたところ、 確かに問題のファイルもリストアップされたが、 壊れていないjpegファイルにも、 結構たくさんFF D9で終わっていないものがあることがわかった。 特に、古いPhotoshopで書かれたファイルなんかは、 のきなみFF D9で終わっていないような印象だ。
まぁそれらはとりあえず無視して、 末尾に大量にゼロが付加されている部分を、 ひとつひとつ開いては削っていった。
続いてjpeg以外のファイルを救うことを試みてみよう。 どうやら、ファイルの末尾に大量のゼロがついているという 共通点があるようなので、次に、 ファイルの末尾に大量のゼロがついているファイルを一覧表示させてみた。 しかし、こちらはjpegと違って、末尾にゼロがあっても、それが間違って ついているものなのか、もともとゼロで正しかったのかの判断がつかず、 結局ほとんどのファイルはそのまま残しておくことになったのだった。