3TBのボリュームを作ったら・・・

なぜか半年前に下書きとして保存したまま、投稿していなかった記事を発見しました。干からびてました。

「セクタサイズが512バイト以外のディスクにVHDを置くと、Hyper-Vはそれをオープンできない」 という話です。

この制限も、Hyper-V 3.0ではなくなる予定ですが、Hyper-V 2.0にはいまだに有効な内容なので、公開します。

以下、発掘された2011年3月の記事です。

-----------------------------

ProLiant MicroServer 3 台で、2 ノード Hyper-V クラスタを作った(1 台は iSCSI ストレージ用)のですが、ストレージマシンにディスクを追加して、3 TB (1 TB のディスクを 3 本) の RAID ボリュームを作ったところ、そこに配置した仮想マシンが起動できなくなるという問題に遭遇しました。こんなエラーが出るんです。

Cannot open attachment 'C:\ClusterStorage\Volume1\HAVM-01\Virtual Hard Disks\WS08R2-Ent-x64-SP1-ja.vhd'. Error: 'The sector size of the physical disk on which the virtual disk resides is not supported.'

調べてみると、確かにディスク 3 本束ねた新しいボリュームは、クラスタサイズが 1024 バイトあるんです。

C:\>ntfsinfo.exe s:

<中略>

Allocation Size
----------------
Bytes per sector : 1024
Bytes per cluster : 65536
Bytes per MFT record : 1024
Clusters per MFT record: 0

※ ntfsinfoはSysinternalsのツールです。https://technet.microsoft.com/ja-jp/sysinternals/bb897424

KB2515143に以下のようにあるとおり、VHD はそれが置かれているハードディスクの物理セクタサイズが 512 バイトであることを前提としています。

The VHD driver today assumes that the physical sector size of the disk to be 512 bytes and issues 512 bytes IOs which makes it incompatible with these disks. The VHD stack fails to open the VHD files on physical 4kB sector disks for this reason.

※ ここには 4kB とありますが、必ずしも 4kB セクタに限った話では無く、512 バイトより大きければこれに該当します。

というわけで、セクタサイズが 1024 バイトのディスクができてしまうと、そこに VHD を置いても Hyper-V で開けないわけです。

で何でセクタサイズが大きくなってしまったか、ですが、

  • セクタの番号を 32 ビットの整数で管理している → 最大値は 2^32 = 4294967296
  • ということは、セクタサイズ 512 バイトだと 2TB のボリュームまでは管理できる → (2^32) * 512 = 2,199,023,255,552
  • 1 TB のディスクを 3 本、RAID 0 で束ねると 3TB 。これじゃ 512 バイトセクタでカバーできない → セクタサイズを 1024 バイトにしよう。

普通に考えればすぐ気づきそうな物ですが、最初よくわからなくて「GPT ディスクにしたらセクタが 1024 バイトになるんだけど何で?」とか何千人も登録された社内(not 日本だけ)のメーリングリストに聞いちゃいました。恥ずかしい。

というわけで、とっとと RAID を再構成して 2TB のボリュームにすると、セクタサイズは 512 バイトに戻り、ちゃんと VM を起動することができました。

 

関連情報

__END__