アロケーションユニットサイズとは?
アロケーションユニットサイズについて具体的にどのようなものかよくわかってない方もいらっしゃるでしょう。
アロケーションユニットサイズとは、1つのデータを保存する最小単位のことです。
この最小単位のことをクラスタサイズといい、1クラスタ・2クラスタのように数えるのが一般的です。
このようにある程度まとまったデータを1かたまりとして保存することで、効率よくファイルにアクセスできるようになっているのです。
アロケーションユニットサイズで何が変わる?
アロケーションユニットサイズを変更すると、パフォーマンスに直接影響します
ファイルの読み書き速度が変わる
アロケーションユニットサイズを大きくすると、ファイルの読み書き速度が上がります。
例えばWindows10だとデフォルトのアロケーションユニットサイズが4KBです。
もしこのファイルを読み出そうと思うと、8クラスタそれぞれにアクセスする手間が生まれます。荷物全部取り出すために8つのロッカーを順番に開けていく感じですね。
もちろん、単純に計算したとしても32KBのファイル1つ読み出すために8アクセスもかかるため、とても効率が良いとは言えません。
ですが、アロケーションユニットサイズが16KB担った場合どうなるでしょうか?
つまり、32KBのデータの読み出しにかかるアクセス数も2回で済むためファイルの読み込みを高速化できます。
このように、アロケーションユニットサイズが大きくなると、必然的に必要なクラスタ数も少なくなるためファイルの読み書きをする速度(アクセス速度)が高速化されるのです。
ストレージ使用効率が変わる
アロケーションユニットサイズが4KBの状態で1バイトのファイルを保存したときに使われるストレージ容量はいくらになると思いますか?
なぜ1バイトのファイルのために4KBも使ってしまうのかと思うでしょう。
これはロッカーをイメージするとわかりやすいです。荷物の量が少ないからといってロッカーの大きさが勝手に小さくなることはありませんよね?
アロケーションユニットサイズも勝手に変わることはないため、闇雲に大きくしすぎるとストレージの使用効率が落ちてしまうのです。
では先ほどと同じ条件(アロケーションユニットサイズ4KB)で、1バイトのファイルを3つ保存した場合どうなるでしょうか?
Windowsでは複数のファイルを1つのクラスタに格納することが出来ません。
たとえ複数ファイル容量合計がアロケーションユニットサイズを下回っていたとしても別々のクラスタに保存されるため、設定しているアロケーションユニットサイズによっては無駄がかなりが大きくなってしまうのです。
今回の場合だと、たった総容量3バイトの3ファイルだけで12KBも使っています。アロケーションユニットサイズを大きく下回る容量のファイルがたくさんあった場合は無駄に消費している容量も大きくなってしまいかねません。
そのため、ファイルのアクセス効率が上がるからといって無闇にアロケーションユニットサイズを大きくしていいわけではないのです。
応用編
もう少しアロケーションユニットサイズについて詳しくなりたいのであれば、以下の問題について考えてみてください。
では、アロケーションユニットサイズが4KBで、9KBのファイルを保存した場合どうなるでしょうか?
この答えをすぐに理解できたのであればアロケーションユニットサイズの計算についてはもう問題ないでしょう。
9KBのファイルを「4KB・4KB・1KB」の3つのデータに分割して格納されるため、合計3クラスタ必要になります。
もし、アロケーションユニットサイズが10KBだった場合は、1クラスタに収めることが可能です。
ちなみにですが、アロケーションユニットサイズは2の累乗であるため、10KB(2の累乗ではない)のアロケーションユニットサイズは実在しません。ちょっとした豆知識として抑えておくと良いでしょう。
アロケーションユニットサイズの調べ方
アロケーションユニットサイズの基礎知識について抑えたところで、実際にアロケーションユニットサイズを調べる方法を見ていきましょう。
正規の方法で調べる場合、コマンドプロンプトでコマンド入力の必要がありますが、もっと簡単に確認する方法があります。
アロケーションユニットサイズ以下の容量のファイルが必要であるため、大量に書き込まないようにしましょう。
ここに表示されている容量がアロケーションユニットサイズです。
たとえ1バイトのファイルでもディスク上のサイズはアロケーションユニットサイズ単位になるため、簡単に確認できてしまうのです。
ディスク上のサイズが0バイトになる
この場合、アロケーションユニットサイズはそのゲストマシンではなく、仮想マシンを動作させているホストマシンに依存しているので、ホストマシンの方で調べるようにしましょう。
最適・おすすめのアロケーションユニットサイズは?
- アロケーションユニットサイズを大きくするとファイルのアクセス速度が上がる
- アロケーションユニットサイズを大きくするとストレージ容量の胸が大きくなる
このような一長一短のせいでジレンマを引き起こすかもしれません。
そこで、ここでは最適なアロケーションユニットサイズを紹介します。アロケーションユニットサイズの変更を検討している方はこちらを参考にしてください。
フォーマットによりおすすめのサイズが異なる
まず、大前提としてHDDやSSD、SDカード・USBメモリーというのは、ストレージの種類によってフォーマットが異なります。
フォーマットごとに適切なアロケーションユニットサイズが異なるので、フォーマット別に紹介していきます。
NTFS
Windows OSで使用されるHDD・SSDなどが当てはまるフォーマットです。
Windows10ではデフォルトのアロケーションユニットサイズが4KBに設定されていますが、基本的に4KBのままで問題ありません。
HDD・SSDはファイルのアクセス速度が速いため、アロケーションユニットサイズを変更しても大きな変化が起きません。
そのため、アロケーションユニットサイズを大きくすることで発生するストレージ容量使用の非効率化のデメリットのほうが大きいため、あまりおすすめしません。
FAT16・FAT32・exFAT
SDカード・MicroSDカード・USBメモリで使われるフォーマットです。
FATフォーマットと言っても3種類あり、それぞれデフォルトのアロケーションユニットサイズが異なりますが、はじめから最適なアロケーションユニットサイズが設定されているとは限りません。
SDカードやUSBメモリというのはファイルアクセス速度が遅いため、アロケーションユニットサイズを大きくするメリットは大きいです。
ですが、SD カードなどの使用しているストレージデバイスによっては容量が小さくてあまりアロケーションユニットサイズを大きくできないということもあるでしょう。
その場合は以下の表に記載した容量別おすすめアロケーションユニットサイズを参考にしてください。
容量 | アロケーションユニットサイズ |
64MB未満 | 2KB |
64MB~256MB | 8KB |
256MB~512MB | 16KB |
512MB~1GB | 32KB |
1GB~4GB |
64KB |
4GB以上 |
128KB |
アクセス効率と容量使用効率両方を考慮したものですので、SDカードなどの読み込みが遅くてストレスが溜まるという方はこれらの参考値でフォーマットしてみましょう。
まとめ
今回は知らないとよくわからないアロケーションユニットサイズ(クラスタサイズ)について解説しました。
各ストレージデバイスは、容量ごとにアロケーションユニットサイズが自動的に設定されていますが、そこで設定されている標準のアロケーションサイズはあまりあてになりません。
あくまで標準値であり、最適値ではないことを覚えておきましょう。
また、アロケーションユニットサイズを変更する際は必ずフォーマットが必要になることも忘れないようにしましょう。