背景
Disk2VHDは物理ディスクを可変VHDXで作成してくれるので、バックアップ時には最低限の容量ですみ大変便利ですが、それを再利用する際に以下の問題がありました。
問題1:
作成時は最小限サイズだが、利用していくと肥大化していく。
(例)物理サイズ256GB・実利用量10GBのディスクを変換すると10GBのVHDXですむが、それをHyper-VでマウントしたりVHDブートで起動すると肥大化していき、最終的には256GBに到達してしまう。
理由として、VHDXファイルは物理ディスク時代のトータルサイズ(例では256GB)を保持しつづけることが原因です。数台のPCなら問題ありませんが、これが情シスの仕事として数十台以上となってくると、NASのサイズがいくらあっても足りません。
問題2:
VHDブートでは、ベースPCの容量を超えるサイズでブートができない。
(例)ベースOSが30GBほど消費するので、たとえば256GBのSSDはかならず226GB以下のVHDXファイルを作成する必要がある。
もしVHDXファイルがベースOSの物理ディスクサイズを超えると、ブルースクリーンになって起動できません。このためVHDXファイルが保持しているトータル物理サイズを縮小する必要(ややこしいですが)があります。サードパーティソフトやdiskpartコマンドが必要になるため、毎回となると結構大変という認識でした。
問題3:
可変VHDXでの運用はマイクロソフトも推奨していない。
https://learn.microsoft.com/ja-jp/windows-server/virtualization/hyper-v/best-practices-analyzer/vhd-format-dynamic-virtual-hard-disks-not-recommended-in-production
速度低下は10%程度であまり気にならないものの、Hyper-Vで動かすとたまにプチフリのような挙動になることがあります(Win7など古いOSで顕著)。固定サイズVHDXではこの問題は起きません。
結論
今回、Hyper-V(Windows Server版)の「仮想ハードディスクの新規作成ウィザード」のGUIで比較的簡単に変更する方法がわかりましたので共有いたします。
VHDX内の物理領域を縮小する
まず、Disk2VHDで作成した可変VHDXファイルから、未使用の部分をカットします。
Cドライブのサイズは30GBですが、内部では物理ディスクトータルの256GBを保持しているので、226GBをカットすることになります。
VHDXをダブルクリックでマウントし、Cドライブより後方のパーティションを削除します。
回復パーティションの削除はdiskpartで以下のコマンドを使います。
diskpart
list disk #確認
select disk 1 #VHDXディスクを選択
list partition #確認
select partition 4 #回復パーティションを選択
delete partition override #削除
Disk2VHDで作成したVHDXファイルを選択し、「縮小」を選択します。
上記でちゃんと後方データをカットできていれば、Cドライブのみの最小サイズが選択できるようになります。(この場合は30GB)
再度VHDXファイルをダブルクリックでマウントし、30GBの物理領域になっていれば成功です。
固定VHDXへの変換
VMの編集画面から仮想ハードディスクの「新規」を選択します。
「変換した仮想ハードディスクの内容をコピーします」を選択します。ここが今回、発見した箇所となります。
完了後、以下のコマンドで正常に固定VHDXとして作成できたかを確認します。
Get-VHD -Path <VHDXのパス> | ft vhdtype,size
まとめ
・Hyper-Vのディスクの編集ウィザードの一番下にあったのですが、長年気づきませんでした。。。
・Disk2VHDを業務用PCのバックアップやP2Vで利用している企業もあると思いますが、Hyper-VやVHDブートで再利用する場合は、この方法で固定サイズにすることをおすすめいたします。
・以前のエントリで書いたProxmoxでの"qemu-img convert"コマンドの利用時にもメリットがあるかもしれません。また確認してみたいと思います。