(第1回)耳よりIT~ファイルのサイズはどちらが本物なのか~

(第1回)耳よりIT~ファイルのサイズはどちらが本物なのか~

目次

はじめに
サイズとディスク上のサイズ?
「ディスク上のサイズ」はクラスタサイズに依存する
クラスタサイズとは
最後に

はじめに

もうすぐWindows7のライフサイクルが切れます。
このサポート終了に伴い発生するのがOSの移行ですがOSを移行した後にデータの移行も待っています。
このデータ移行を行うときに、移行前と移行後のファイルの容量を見てデータが移行完了しているか確認することがありますが、
このデータ移行時に起こりえるサイズの違いについて簡単に記載します。

サイズとディスク上のサイズ?

Windows上でファイルやフォルダを右クリックして「プロパティ」を開くと以下のようなダイアログが表示されます。

ここのダイアログに出てくる「サイズ」と「ディスク上のサイズ」は、どちらがファイルのサイズなのでしょうか?

結論からいうと「サイズ」がファイルの本当のサイズになるのですが、この2つは何を表しているのでしょう。

「ディスク上のサイズ」はクラスタサイズに依存する

例えばクラスタが「4バイト」であったとします。

ここに「3バイト」のファイルを保存するとクラスタが4バイトなので、こんな感じで保存されます。

(あくまでもイメージです)


3バイトのファイルを保存(青色)

さらに「2バイト」のファイルを保存するとどうなるのでしょうか?

追加で2バイトのファイルを保存(緑色)

実はこうはならないのです。
クラスタのサイズは最小の記録単位なのでファイルの容量がそれよりも少ない場合は使用されません。

では、この空いている領域はどうなるかというと「何にも使われない無駄スペース」になってしまいます。
(黒丸は無駄スペースを表しています)

3バイト分の無駄なスペースができる(黒色)

これが「サイズ」と「ディスク上のサイズ」です。

というわけでファイルの移行を行うときは「サイズ」が合っていればよいというわけでした。
「ディスク上のサイズ」はクラスタサイズによって増減するためデータ移行時には気にしなくてよいのです。
 (ただし、実際に消費されているHDDのサイズは「ディスク上のサイズ」です)

クラスタサイズとは

ここまでで度々出ているクラスタサイズですが、これはWindowsでいう「アロケーションユニットサイズ」のことです。
これはHDDをフォーマットするときに目にすることができるのですが
上記までの話だと、このクラスタサイズは小さい方が容量が無駄にならない気がします。

HDDをフォーマットしようとすると表示される
ダイアログ

しかし、待ってください。
このクラスタサイズですが大きい場合と小さい場合でメリットとデメリットがあります。

クラスターサイズメリットデメリット
大きい
ファイルへのアクセスが速い無駄なスペースが発生しやすい
小さい無駄なスペースの発生を抑制ファイルへのアクセスが遅い

クラスタサイズは小さくすることで、無駄なスペースの発生を抑制することが出来ます。しかし、もちろん弊害もあり、
クラスタサイズが大きいものと比べ、ファイルへのアクセスが遅くなってしまいます。
HDDは円形の板にデータが記憶されていくのですが、PCでデータの追加や削除が行われていくうちにデータが分割保存(断片化)されることがあります。

例えばクラスタサイズが1バイトずつにフォーマットされたHDDがあったとします。
ここに3バイトファイル(青色)を保存して、次に4バイトファイル(緑色)を保存して最後に2バイトファイル(赤色)を保存します。

クラスタサイズが1バイトでフォーマットされたHDD

次に4バイトファイル(緑色)が不要になったので削除して、新たに2バイトファイル(黄色)を保存します。

削除されたファイル(緑色)の場所には新たなファイル(黄色)が保存される

次に4バイトファイル(紫色)を保存します。

どうでしょうか?
最後に保存した紫色のファイルは1つのファイルであるにも関わらず分割して保存されています。
このようにPCは、使っていくうちにデータが断片化していきます。

この断片化によってファイルにアクセスする速度がどんどんと遅くなっていきます。
(一つのファイルのデータを読み込むためにいろいろなところにアクセスする必要があるので遅くなる)

PCを使っていくうちにデータ(紫のファイル)が分割されていく

では、クラスタサイズが4バイトでフォーマットされた場合はどうでしょうか。
同じように3バイトファイル(青色)を保存し、次に4バイトファイル(緑色)、2バイトファイル(赤色)を保存します。

無駄スペースが3バイト分できる

このように保存されます。

では次に不要になった4バイトファイル(緑色)を削除して、2バイトファイル(黄色)を保存します。

無駄スペースが5バイト分できる

このように2バイトファイル(黄色)を保存した時点で、サイズ(7バイト)、ディスク上のサイズ(12バイト)と、無駄なスペースが5バイト分できてしまいました。

では最後に4バイトファイル(紫色)を追加します。

さっきは断片化していた4バイトファイル(紫色)が順番に保存されている

一目瞭然ですが、クラスタサイズが少ない時よりも保存に必要な容量が増えています。

しかし、4バイトファイル(紫色)は並んで保存されているので、読み込みにかかる時間は短縮されるというわけです。

最後に

昨今ではHDDの容量が肥大化したことによってファイルを多く保存することができるようになりました。
それにともないアクセス速度も遅くなってしまうため無駄なスペースができることを容認する形になっているのではないかと思います。

如何でしょうか。「ディスク上のサイズ」編は以上になります。