だいぶ昔の記事になりますが、本連載第67回で仮想マシンの容量可変タイプのVHDまたはVHDXファイルを効果的に縮小する方法を解説しました。今回は、そのときの方法でも期待したほど縮小されない場合にやってみる価値のある追加手順を紹介します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Hyper-V仮想マシンの容量可変タイプのVHDおよびVHDXファイルは、ゲストOSがディスクに書き込むに従って、必要なサイズに拡張されます。別の言い方をすれば、仮想マシンの記憶域のシンプロビジョニングを可能にし、物理ディスク領域の効率的な使用を実現します。
ただし、VHD/VHDXファイルであるディスクからファイルが削除され、領域が解放されたとしても、自動的にサイズが縮小されることはありません。例えば、仮想マシンのゲストOSに対して「Windows 10」や「Windows 11」の機能更新プログラムによってインプレースアップグレードが行われると、VHD/VHDXファイルのサイズは逆に一気に増え、その後、前バージョンのWindowsへの回復用ファイルがクリーンアップされ、数十GBの空きができたとしてもサイズは肥大化したままとなります。手動でVHD/VHDXファイルの「最適化」を実行することで、使用されていない領域を解放し、ファイルサイズを縮小することができます。
本連載第67回では、「デフラグ」などの事前処理はあまり効果が期待できないばかりか、「Hyper-Vマネージャー」から利用できる「仮想ハードディスクの編集ウィザード」の「最適化」を実行してもほとんど最適化されない場合があることを指摘しました。後者の問題はWindows 11や「Windows Server 2022」に搭載された最新のHyper-Vでも改善されていません。
効果的にVHD/VHDXファイルのサイズを最適化するには、PowerShellウィンドウを管理者として開き、以下の3つのコマンドラインを実行するだけでよいと書きました。
Mount-VHD "VHD/VHDXファイルのパス" -NoDriveLetter -Readonly Optimize-VHD "VHD/VHDXファイルのパス" -Mode Quick(またはFull) Dismount-VHD "VHD/VHDXファイルのパス"
「チェックポイント」が存在する場合は、ファイルを削除して親VHD/VHDXファイルに結合してから親VHD/VHDXファイルに対して実行します。これらのコマンドラインは、“読み取り専用”でVHD/VHDXファイルをローカルマウントし、「Optimize-VHD」コマンドレットで最適化して、マウントを解除します。「読み取り専用でVHD/VHDXファイルをマウントした状態」で、Optimize-VHDを実行することがポイントです。
筆者は長年、繰り返しこの方法を使用して、VHD/VHDXファイルのサイズをメンテナンスしてきました。しかし、その後に登場したHyper-Vの新しいバージョンでは、この方法でも期待通りのサイズに縮小されない場合があることに前々から気付いています。
そのような場合は、だまされたと思って、2つ目のOptimize-VHDのコマンドラインを2回連続して実行してみてください。次のように全てのコマンドラインを1行で実行することもできます(画面1)。
Copyright © ITmedia, Inc. All Rights Reserved.