2012年7月17日火曜日
TestDisk など
近所の人が「フォーマットしろ、と言われる USB メモリがあるんだけど」と持ってきた。友人からもらったやつでちゃんとデータが入っているはずだし... というのだが、linux に繋いでみても パーティションテーブルが見えない。またディスク全体をパーティションとして使っているわけでもない。FAT32 でない可能性も考えてみたが、友人は Windows 使いだとか。
とりあえず dd でいろいろ見てみると 64 セクタ目から FAT32 っぽい部分がある。そんなもんだっけ?と手持ちの USB メモリを見てみたが、8192 セクタ目だったり 8064 セクタ目だったりとバラバラのようだ。ディスクのジオメトリで変わるんだっけ?
じゃあ最初の 63 セクタを飛ばしてマウントすればいいんじゃね?と思って記憶を探るが、どんなオプション使えば良かったのか思いだせない。しょうがなく dd if=/dev/sdc of=usb.img bs=512 skip=63 で先頭を飛ばしてイメージを造った。これなら普通に loopback mount してやるだけで読めるはず。
[offset オプションか。でも loopback デバイスにしか使えないかんじなので、どっちにしても dd する必要があったようだ。]
でも試してみると mount: /dev/loop0: can't read superblock と言われる。結局、どっか壊れてるのかな?
ちなみに最初の 63 セクタは全部 0 だった。MBR に何も入ってないという時点でかなりおかしい。何やったら (もしくはどういう壊れかたをしたら) こんなことになるのだろうか?
"can't read superblock" には fsck.vfat ということで試してみたが、いまひとつ芳しくない。
[後で再度 fsck.vfat -a を試してみたら、長時間沈黙した後にエラーなく終了した。mount も出来た。でも中身の多くは FSCKxxxx.xxx になっていた。あまり意味なかったな]
修復ツールはないんかな?と見ていて TestDisk なるものを発見。試してみたが、全域をスキャンしてもパーティションを見付けられないようだ。この 64 セクタ目にあるのはパーティションの先頭じゃないってことかなあ?
ただ、その中のツールに photorec ってのがあって、これがファイルをリカバーするもののようだ。使ってみると順調に読みだしているかんじ。ただ、すごく時間がかかりそうだったので、近所の人の PC に仕込んでやってもらうことにした。
面倒だし、どこまでリカバー出来るか不明だが、何も戻ってこないよりは良いと思ってくれていると信じたい。