だまされたと思ってお試しあれ! VHD/VHDXファイルのサイズ縮小を“もう一押し”する魔法の手順その知識、ホントに正しい? Windowsにまつわる都市伝説(214)

だいぶ昔の記事になりますが、本連載第67回で仮想マシンの容量可変タイプのVHDまたはVHDXファイルを効果的に縮小する方法を解説しました。今回は、そのときの方法でも期待したほど縮小されない場合にやってみる価値のある追加手順を紹介します。

» 2022年07月13日 05時00分 公開
[山市良テクニカルライター]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Windowsにまつわる都市伝説」のインデックス

Windowsにまつわる都市伝説

期待したほど縮小されない場合は「Optimize-VHD」を2回実行してみて!

 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)。

$targetvhd = "VHD/VHDXファイルのパス"; Mount-VHD $targetvhd -NoDriveLetter -Readonly; Optimize-VHD $targetvhd -Mode Quick; Optimize-VHD $targetvhd -Mode Quick; Dismount-VHD $targetvhd
画面1 画面1 VHD/VHDXファイルを確実に最適化してくれる魔法のコマンドライン。この例の場合、37GBのVHDXファイルが24GBに縮小された

ディスククリーンアップ後の仮想マシンで実験

 Windows 10 バージョン2004から「イネーブルメントパッケージ」(機能更新プログラムではなく)を使用してバージョン21H2まで更新してきた仮想マシンを例に実証してみましょう。

 ゲストOS側でのディスクの使用領域をできるだけ減らすため、管理者として「ディスククリーンアップ(Cleanmgr.exe)」の「Windows Updateのクリーンアップ」を実行したり、「DISM」コマンドでコンポーネントストアの最適化(DISM /Online /Cleanup-Image /StartComponentCleanup /ResetBase)を実行したりします。クリーンアップと最適化の実行後、ゲストOSから見たC:ドライブの使用領域は約43GBとなりました(画面2)。

画面2 画面2 現在のVHDXファイルのサイズは約52GB。ゲストOSでディスククリーンアップを管理者として実行して、可能な限り空き領域を増やす

 この仮想マシンに存在するチェックポイントを全て削除し、親VHDXファイルに完全に結合されたことを確認します(「状況」列の「結合処理を実行中−成功」で確認できます)。試しに、このVHDXファイルを「Hyper-Vマネージャー」の「仮想ハードディスクの編集ウィザード」の「最適化」を実行してみたところ、サイズはほとんど変化しませんでした(画面3)。

画面3 画面3 「仮想ハードディスクの編集ウィザード」の「最適化」を実行しても、VHDXファイルのサイズはほとんど変化がない

 次に、VHDXファイルを読み取り専用でマウントし、Optimize-VHDを2回実行してから、マウントを解除するという操作を、管理者として開いたPowerShellウィンドウで実行します(画面4)。

画面4 画面4 VHDXファイルを読み取り専用でマウントした後、Optimize-VHDを2回実行し、マウントを解除する。1回目のOptimize-VHDではサイズに変化がなく、2回目に約45GBに縮小されていることに注目

 1回目のOptimize-VHDではサイズは変化しませんでしたが、2回目のOptimize-VHDで約45GBまで縮小されました。これは、ゲストOS側から見える使用領域(約43GB)と矛盾しないサイズです。

 筆者はサポートが終了し、更新プログラムが提供されなくなったWindows 10や古いバージョンのWindows Serverの仮想マシンも幾つか維持しています。それらの仮想マシンでは、この方法でVHDXファイルのサイズを縮小して、ディスク使用量をできるだけ少なく抑えるのに役立っています。

筆者紹介

山市 良(やまいち りょう)

岩手県花巻市在住。Microsoft MVP 2008 to 2023(Cloud and Datacenter Management)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows版Docker&Windowsコンテナーテクノロジ入門』(日経BP社)、『ITプロフェッショナル向けWindowsトラブル解決 コマンド&テクニック集』(日経BP社)。


Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。