『HDDの容量のお話』

はじめに

パソコンの動作が遅くなったらデフラグをやってみよ!という言葉を聞いたことはないでしょうか?デフラグとはdefragmentationの事で日本語でいうとで断片化を無くすという意味です(fragmentationが断片化するでdeが付くから無くす)。ファイルなどのプロパティを覗くとサイズとディスク上のサイズという項目があってディスク上のサイズの方が若干大きい値になっていると思います。これらはパソコンにおけるデータの管理方法によるものなのです。

ビット・バイト・セクタ・クラスタ

パソコンはデジタルの世界ですから0と1で全ての情報が表されます。この一コの0か1の情報を1ビットといいます。この1ビットを8コ集めて8ビットで1バイトと呼びます。なぜ8?中途半端だし10にしない?なんて考えるかもしれませんが、とりあえずこのバイトは英語や記号を一文字表すことができる単位です。

パソコンはデジタルなので2の何とか乗という数がもっとも扱いやすい(効率のよい)数字で、28は256なので1バイトで256通りのパターンを現すことをができます。基本的にPC/AT互換機はアメリカから生まれたものですから英語を扱うことを前提に考えられていますから英語と記号などを一文字表すのに必要な数をバイトとしたもので、英語や記号を一文字表示するにあたって24の16(8=23だからその前は4=22となる)ではすくな過ぎるから28を選んだのだと思われます。

次にHDDなどの記憶媒体ではデータを管理する際に1ビットや1バイトごとに管理していたら大変なので何バイトかをひとかたまりとして管理します。このカタマリをセクタと呼びます。このサイズは機器の管理上の理由で分けられているので機器によって異なりますが、ハードウェアの中での処理なのでソフトウェアやユーザーが意識する必用はありません。

ちなみにPC/AT互換機の3.5inchの1.44MBのFDは512バイトを1セクタとして扱っています。FDをフォーマットしてみると、傷などがあった場合不良セクタが発見されましたみたいな表示がでて使用可能な全容量が減っていたりすると思います。このような場合はセクタ単位で管理するので、たとえ傷は1ビット分だったとしてもその1ビットを含むセクタが使用不可になります。(よって空き容量は512バイト単位で減っていくと思います。)

クラスタとディスク上のサイズ

さらにファイルシステムがデータを管理する最小単位がクラスタ(アロケーションテーブルとも呼ばれる)です。クラスタはバイト(セクタ)をひとかたまりにしたものでこれはファイルを扱うときにバイトやセクタ単位だとやはり管理が大変になるのでクラスタ単位で管理します。クラスタは媒体の容量やパーティションなどによって大きさを変えたりして、あまりクラスタの数を増やしすぎないようにします。

クラスタの量が多くなるとファイルシステムが管理する量が増えてファイルのアクセスが遅くなります。逆にクラスタの数を少なくしすぎると、一つのクラスタあたりのサイズが大きくなりすぎるので、つまりが大雑把に管理するワケで無駄な領域が増えてしまいます(無駄にディスクを消費する)。

実際のファイルサイズとディスク上のサイズが異なることがあるのは先ほど書きました。では何故異なるのでしょうか?ファイルシステムはクラスタという単位でファイルを管理します。たとえば一つのクラスタを4KBとするとたとえ1バイトのファイルも4KBのクラスタを消費します。よって残りの3.999KBは無駄になるのです

。また、0.001~4.000KBのファイルまでは1クラスタを消費しますが、4.001KBのファイルは2クラスタ消費します。よってクラスタサイズが大きいとディスク上の無駄が増えるのです。だからクラスタサイズの倍数ぴったりのファイル以外は無駄が発生するのでサイズとディスク上のサイズが異なるのです。(通常PC/AT互換機では1KB=1024Byteで管理するので上の例とは厳密にはことなる。)

デフラグとクラスタ

DOSやWindowsなどで昔から使われているFAT(FAT32はそれを32bit版で仕組みはほとんど一緒)ではFAT=File AllocationTableとよばれる簡単に言えばデータベース部分を空き容量とは別の場所にもっていてファイルの管理を行っています。たとえば、『クラスタ1』はデータAに、『クラスタ2』はデータBに、『クラスタ3』もデータBに…のように記録されています。

さて、例えば次のような状況を考えてみましょう。『クラスタ1』から『クラスタ100』までデータが書き込まれていたとします。ここで『クラスタ50』から『クラスタ52』にあったデータCを削除したとしましょう。その後クラスタを5つ分消費するデータDを書き込んだりすると、『クラスタ50』から『クラスタ52』と『クラスタ101』と『クラスタ102』に記録されることになります。これがfragmentation(断片化)です。

もし、データDにアクセスした場合、まず『クラスタ50』にヘッド移動させ『クラスタ52』まで順によんだ後今度は『クラスタ101』にヘッドを移動させて…という風になります。もしこれが100コとかに分断されていたらかなり時間のロスになることがわかるでしょう。

長い間、ファイルを書き込んだり消したりを繰り返しているとこのようなこと進んでしまうのです。よって断片化したファイルを纏めて綺麗ならべてあげる機能がデフラグです。デフラグを行えば無駄なヘッドの移動がなくなってファイルアクセスが速くなるでしょう。またクラスタサイズを大きくするとで一つのファイルあたりのクラスタの数が減って断片化がしにくくなるようです。

これらはファイルシステムにも大きく関わっているのでたとえばWinNT系のファイルシステムであるNTFSはFATにくらべて断片化しにくいといわれています。

クラスタサイズを自分で設定しよう!

フォーマットするときにアロケーションユニットのサイズを選択する画面があるのですが、アロケーションユニットとクラスタは同じものです。これは自動設定にすればフォーマッタが自動的に決めてくれますけど自分で設定するといいこともあるのです。

難しい話は抜きにしてクラスタを考えて見ます。例えば、原稿用紙が1000枚あったと考えて見ましょう。原稿用紙に文字を書くのですが、この原稿用紙が1000枚もあるとどこに何を書いたのかわかんなくなってしまうでしょう。そこでこの原稿用紙を纏めてノートにします。このノートがクラスタです。

ノート一冊あたりの枚数を10枚とするとノートが100冊にもなってしまいます。これでは目的のノートを探すのも大変です。でもノート一冊あたりの枚数を100枚にすると10冊になって管理は楽になりますが、たった一行の文字を書くだけでも一冊つかうことになります。残ったページに別のことを書けば…ってやったらどこになにを書いてあるかわからなくなって意味がありません。また一冊に収まらなければ次のノートに移るのですが、もうあとチョッと…でも容赦なく次のノートに移行してしまいます。人間みたいに文字を小さくしたり枠外に書き込んだりという融通は利かないのです。

さて、これで自分で設定するといいことがあるのでしょうか?数KBのファイルを大量に扱うHDDなどは容量に関わらずクラスタサイズを小さくした方が無駄が少なくて済みます。逆にムービーなどを大容量のHDDに記録するなどの場合は標準以上にクラスタサイズを大きくするとアクセス速度が向上します。

また、容量が少ないHDDを効率よく使いたかったらクラスタサイズを小さめにすると無駄が減って効率的になりますし、容量はあまっているからパフォーマンスを上げたい場合などはクラスタサイズを大きめにすると多少アクセス速度が向上するようです。また、上の断片化のことも含めてパフォーマンス面では有利です。ただし、ファイルシステムや容量によってクラスタサイズの制限があります。また、アプリケーションなどによってはクラスタサイズを上げすぎると正常に動作できない場合があるようです。