Windowsで仮想ディスクを作る手順は以下の通り
- サーバーマネージャー→ファイルサービスと記憶域サービス→ボリューム→記憶域プールを開く
- 右上のタスクから記憶域プールの新規作成
- 仮想ディスクの作成
- ファイルシステム:ReFSのアロケーションユニットサイズ:4096でフォーマット
- ドライブ文字やパスの割当
まず、物理ディスクを2つ使った記憶域プールを作った。
物理ディスク 2台 容量 9.10TB 9.10TB
続いて仮想ディスクを作成した。
仮想ディスク レイアウト: Mirror プロビジョニング 固定 容量 9.10TB 割り当て済み 9.10TB
その後、ファイルシステム:NTFSでフォーマットしてしまった。記憶域プールに、新しく物理ディスク2台を投入した。
容量 10.9TB 10.9TB
これで、20TBのディスクを作れるだろうと思って、ディスクの管理からボリュームの拡張を行ったが、以下のようなエラーが出た
仮想ディスクマジェージャーから 「ファイルシステムでサポートされているクラスターの最大数を超過するため、ボリュームを拡張できません。」とエラーメッセージが出て、ボリュームの拡張ができなかった。
NT File System - Wikipediaに以下の記述があった
2010年時点でのNTFSの実装では、クラスタ数は232-1までとなっている。このため、16 TiBを超えるボリュームは、4 KiBを超えるアロケーション ユニット サイズを指定しなければならない。
アロケーションユニットサイズを取得するには fsutil fsinfo ntfsinfo h:
で。
C:\Users\Administrator>fsutil fsinfo ntfsinfo h: NTFS バージョン : 3.1 LFS バージョン : 2.0 セクターあたりのバイト数 : 512 物理セクターあたりのバイト数 : 4096 クラスターあたりのバイト数 : 4096
今回作ろうとした、9TB+11TB=20TBのボリュームは、NTFSのデフォルトのアロケーションユニットサイズ(=クラスターあたりのバイト数)である4096バイト×(232-1)の上限である約16TBを超えてしまったというわけだ。
なので、一旦中のファイルを退避させて、仮想ディスクを新しい弾力性のあるファイルシステム (ReFS) へ再フォーマットした。 ReFSのファイルサイズの上限は256 TiBであり、最大ディスクサイズは4PBである。 ReFSにすることで、16TBを超える仮想ボリュームでも、後からディスクを追加した時に、容量を増やすことが可能になった。 ReFSについては以下の記事を参考にして欲しい。
Building the next generation file system for Windows: ReFS – Building Windows 8
Resilient File System (ReFS) の概要 | Microsoft Docs
ちなみに、初めから16TBを超える仮想ディスクをNTFSでフォーマットする際は、アロケーションユニットサイズは64KBになる。このときのディスクの上限は256TBになる。
C:\Users\Administrator>fsutil fsinfo ntfsinfo h: NTFS バージョン : 3.1 LFS バージョン : 2.0 セクターあたりのバイト数 : 512 物理セクターあたりのバイト数 : 4096 クラスターあたりのバイト数 : 65536
ReFSでフォーマットしたときのアロケーションユニットサイズの確認は fsutil fsinfo refsinfo h:
で行う。
C:\Windows\system32>fsutil fsinfo refsinfo h: REFS バージョン : 3.4 セクターあたりのバイト数 : 512 物理セクターあたりのバイト数 : 4096 クラスターあたりのバイト数 : 4096
NTFSINFOのLFS(ログファイルシステム)バージョンを気になった人はこれを読んで理解した気になるとよいだろう。要はWindows 7 は1.1でWindows 10やServer 2019等は2.0で完全な互換性がないという話。