記憶域のNTFSはアロケーションユニットサイズ大きめで作成する

Windowsの記憶域プール上にNTFSの仮想ボリュームを作る時は、そのアロケーションユニットサイズ a.k.a. クラスタサイズをよーく考える事。思わぬところでNTFSの最大容量制限に引っかかることになる。

というのも、NTFSのボリュームサイズは(容量)=(アロケーションユニットサイズ)×(クラスタ数)の関係になっていて、1ボリュームあたりのクラスタ数は2^64-1個が上限となっている。すなわち、ボリュームの最大容量はアロケーションユニットサイズで決定され、ボリュームの最大容量との関係は下表となる。

クラスタサイズ 最大ボリュームサイズ
4KB 16TB
8KB 32TB
16KB 64TB
32KB 128TB
64KB 256TB

(2020/12/01 追記)

家のWindows 10マシンで確認したところ、いつの間にかアロケーションユニットサイズとして128KB~2MBが追加されていた。Windows Serverでは2019で対応したっぽい。追加分は下表のとおり。

クラスタサイズ 最大ボリュームサイズ
128KB 512TB
256KB 1PB
512KB 2PB
1MB 4PB
2MB 8PB

これだけ拡張されればNTFSもまだまだ行けるね!

2020-02-18現在、デフォルトクラスタサイズは昔から変わらず4KBのため、NTFSの1ボリューム≒1パーティションの最大サイズは16TBとなる。言うまでもないが、クラスタサイズを後から変更するのは無理。

一般的な使い方なら4KBでも十分だろうけど、容量拡張が容易な記憶域プールの場合、いとも簡単にこの最大ボリュームサイズ制限に引っかかってしまう。仮想ディスク上のNTFSボリュームを拡張すべく記憶域プールの容量を増やし、仮想ディスクを拡張し、いよいよNTFSパーティションを拡張だぜ!って段階で16TB制限に遭遇することとなり、マジ真顔状態となる。ありえねーよほんと……

16TBのHDDが現実的な値段で変えてしまう昨今、やろうと思えば一般のご家庭で一般的なM/Bでもって、16TB×8本で128TBの記憶域プールが作れてしまう。そう考えると、記憶域プール上のNTFSのクラスタサイズは64KB(ボリューム上限256TB)と、脳死対応をしてしまっていいのかも。あるいはNTFSを捨ててReFSに行ってしまうか。

アロケーションユニットサイズは、ボリュームにおけるデータの最小管理単位なので、無暗に大きくすると無駄が多く発生する可能性もあって悩ましいところ。

あー、10TBのデータをバックアップから復元するのめんどくせー。