020 どうしましょうか
●020 どうしましょうか
ときは平成Y+1年、年明け早々、誰もいない研究室で、外付けHDDを前に途方に暮れていた。年明け早々だけど、暮れていた。
すでに昨年のうちに春季の学会発表のエントリーを済ませていて、あとは締切日までに論文(...いや正確には論文ではなくて「予稿」というのだけど)の執筆をして、当日までにプレゼンの準備をすればよいのだけれども、外付けHDDに保存していた実験データが消えてしまった。
ちなみに外付けHDDには解析スクリプトや解析データも保存されていて、これらは無事である。論文やプレゼンで使うグラフなどは解析データから生成するので学会発表の準備を進めることは可能だ。
でも、学会発表の根拠となる実験データを無くしてしまっていてよいのだろうか。発表後に、例えば何年も過ぎた後に実験データが行方不明となっていた、というのは許されて良い気がする。必要なら再現試験をすればよい。でも発表前にデータが無いというのは駄目な気がする。自分基準でも駄目だと思うし、多分、研究室としてもそんな発表は許可しないのではないか。きっとそうだ。発表キャンセルか。
予定表をみるとボスに相談できるのは1週間後だ。昨年末に何もしなかったのが後悔される。
私「嗚呼っ」(...ナルホドではなくて、ため息です)
もう一度、同じパラメータで実験を行えば同じ実験データが得られるはず。もちろん測定誤差は発生し、全く同じ実験データにはならないが主たる主張には影響しない。何度も実験を繰り返してきた私には再現性に自信がある。でも1週間では必要な実験を再度行うには時間が少なすぎる。1ヶ月くらいは必要だろう。
では、削除されてしまったファイルは復活できないのだろうか(...いや自分が削除したんだけれども)。
試しに外付けHDDをパソコンに接続すると「/dev/sdb」というデバイスファイルができる(...OSは L1n です、M0c は怖いトラウマ発症中)。「/dev/sdb1」や「/dev/sdb2」というデバイスファイルもできるけどね。
このファイルをリードすればHDDの全領域のデータを読み出せる。全領域とは使用中/未使用を問わずに全部の領域という意味だ。あ、これらのデバイスファイルの所有者は root なので、アクセスするには sudo するか、chmod o+r でファイルパーミッションを立てる。
ddコマンドで適当に読み出して、stringsコマンドで処理すると、解析スクリプトや実験時のメモ書きらしき文字列が見つかる。
ファイルを削除しても、データ自体がHDDに残っているのであれば復活できるかも。
この1週間はHDDの仕組みを調査してファイルの復活にチャレンジすることにしよう。
***
HDDの最小のアクセス単位をセクタと呼び、以前は 1 セクタは 512 バイトでした。現在のHDDでは、物理的なアクセスの最小単位は 4096 バイトなどと大きくなった。このようなHDDでも、旧式のOSに対応するため、論理的な処理によって 512 バイト単位でのアクセスを可能とする製品もあるそうだ。なので、セクタとの最小アクセス単位が一致しないこともある。歴史的って重たいから。
そして、OS側でもHDDへのアクセス単位を 4096 バイトなどで処理するようになり、この処理単位をクラスタあるいはアロケーションユニットと言うらしい。昔のHDDで 1 セクタが 512 バイトだと、8 セクタで 1 アロケーションユニットとなる。ああ、面倒だ。
手元にあるOSはアロケーションユニットが 4096 バイトで、HDDのセクタも 4096 バイトなので、今は良いけどね。...、今って、平成Y+1年なのでよろしく!
昔は C,H,S の 3 つを指定してHDDにアクセスにしていたそうだ。C はシリンダ、H は ヘッド、S はセクタのことだ。今は LBA(Logical Block Addressing)と言って、全てのセクタに通し番号を付って、その番地でアクセスする。便利になった。
LBA のセクタ番号は、最初は 28 ビットだったが 32 ビットに拡張されて、Large LBA では 48 ビットになった。1 セクタ 4096 バイトのHDDなら、32 ビットで 4096 * 2^32 = 16TB まで扱うことができて、48 ビットならその 65536 倍で、...もう十分です。
このHDDは 1 セクタが 4096 バイトで2TBなので、488,378,646 セクタある。488378646 は 16 進表記で 1D1C1116 です。
***