« Pythonの好きな点 | 新規サービスをOPENしました! »

2009.02.26

実はスゴイHDDの中身

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをnewsingに追加

最近は1Tのハードディスクも7,000円台で買える時代になりました。

世の中の多くのエンジニアは、ソースコードを眺める機会は多いでしょうが、きっとハードディスクの中身を眺めたことなんてほとんどないはず。
ということで、今回はハードディスクの基本的な内部構造を取り上げます。

ハードディスクはコンピュータの主要パーツの中で、唯一機械的な駆動部分のある箇所で、電気信号のやりとりをしている他のパーツと比較すると、結構レトロ(?)な印象があるわけですが、その中身はスゴイ技術が詰まってます。

■物理構造

ハードディスクの中身を見てみると、さながらレコードプレーヤーのような、円盤とアームが出てきます。
この円盤にアームを通して、データが書き込まれていきます。

このディスクは毎分5,400~7,200回転という車のエンジンと同じぐらいのスピードで回転しています。
3.5インチHDDの直径は約9cmなので、7200rpmだと、ディスクの端は時速120kmぐらいの速度になる計算です。
回転中に側面から触れようものなら、指が吹っ飛んじゃいますね。

また、ディスクにデータを書き込んでいるヘッダと、ディスクは接しているわけではなく、ディスク上にヘッダが浮いている形になっています。
その隙間がなんと10nm~20nm。
インフルエンザウィルスの大きさが100nm前後らしいので、インフルエンザウィルスですら潜り込むことが不可能なレベルの隙間です。

そんなレベルで動いているのに、HDDが動いているノートPCを持ち歩いてもHDDは壊れないんだからスゴイもんです。

■データ構造

ハードディスクの構造は、何段階かに分かれており、小さい方から、

  • セクター(WindowsXP以前だと512バイトが標準)
  • クラスタ(NTFSで2G以上のHDDだと標準で8セクター)
  • トラック(ディスク1周分)
  • プラッタ(ディスク1枚)

というふうにになっています。

データの書き込みはクラスタ単位で行われるため、1クラスタに満たないファイルでも1クラスタ分の容量をとってしまいますし、1クラスタを超えるサイズはクラスタのサイズに分割されて書き込まれることになります。

また、HDDのデータは外側から書き込まれていくので、一般的な操作で1つのHDDを2つのパーティションに分割した場合、Cドライブが外側に、Dドライブが内側に配置されます。
この際、外側の方が高速に読み書きが行われますので、Cドライブをシステム領域に、Dドライブをデータ領域に割り当てると、効率よくHDDを使うことができます。

■スペックの見方

以下に、HDDを見るときに重要になる項目を挙げておきます。

  • 回転速度:ディスクが回転する速度です。速ければ速いほど、データの読み書きの速度は上がりますが、故障率や騒音も増えます。
  • シークタイム:アームがデータ位置まで動いていく時間です。
  • 平均待ち時間:ヘッダが目的のトラックに到達してから、データを読み書きし始めるまでの平均時間です。回転速度に完全に依存しますが、ディスクの内側が外側かで時間が変わるので、「平均」という言葉を使っています。
  • バッファサイズ:名前の通りです。大きいほど良いです。
  • 平均故障間隔:だいたいのHDDは100万時間から200万時間の間ですが、これは決して、「100万時間の動作を保証しているわけではない」ので注意してくださいね。

平均故障間隔が100万時間の場合、100万台のHDDを1時間動かした場合、平均して1台のHDDが故障する、ってことです。

なんだかたくさん書いてしまいましたが、一度、いらなくなったHDDディスクを開いてみて、中を眺めてみるのもいいかもしれません。

それではみなさん、素敵なHDDライフをお過ごしください。

Trackback URL

Comment & Trackback

No comments.

Comment feed

Comment





XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>