Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする
Hyper-V の容量可変の仮想ディスク (VHD/VHDXファイル) のファイルサイズを小さくする手順を紹介します。
概要
Hyper-Vで仮想ディスク(VHD/VHDXファイル)を容量可変で作成すると、作成直後のファイルサイズは小さく、ディスクを使用するとファイルサイズが増えます。しかし、不要なファイルを削除してディスクの空き容量を増やしても、VHD/VHDXファイルのファイルサイズは自動では縮小されません。この記事では、容量可変のVHD/VHDXファイルで空き容量が増えた際に、VHD/VHDXファイルのサイズを小さくする手順を紹介します。
手順1:Optimize-VHDのみを利用する方法
Hyper-VやOSのバージョンアップにより、SDeleteを利用しなくてもVHDの容量縮小ができるようになっているようです。
Hyper-VホストのOSにログインします。今回はこちらのVHDXファイルを圧縮します。
PowerShellまたは、コマンドプロンプトを開き、次のコマンドを実行します。
Mount-VHD -Path (圧縮するVHD, VHDXファイル名) -ReadOnly
今回の場合は以下のコマンドになります。
Mount-VHD -Path 'F:\VHD\Windows 10 Pro Operation.vhdx' -ReadOnly
コマンドを実行すると仮想ディスクのマウントが実行されます。下図の進捗ゲージが表示されます。
マウントが完了すると、コマンドプロンプトに戻ります。メッセージなどは表示されません。
続いて、下記の最適化のコマンドを実行します。
Optimize-VHD -Path (圧縮するVHD, VHDXファイル名) -Mode Full
今回の場合は以下のコマンドになります。
Optimize-VHD -Path 'F:\VHD\Windows 10 Pro Operation.vhdx' -Mode Full
コマンドを実行するとディスクの圧縮が始まります。
一度のコマンド実行では圧縮がされない場合がありますので、複数回実行したほうが良いです。
VHDファイルをアンマウントします。下記のコマンドを実行します。
Dismount-VHD -Path (圧縮するVHD, VHDXファイル名)
今回の場合は以下のコマンドになります。
Dismount-VHD -Path 'F:\VHD\Windows 10 Pro Operation.vhdx'
VHDディスクがアンマウントできました。正常終了した場合でもメッセージなどは表示されません。
VHDXディスクのファイルサイズを確認します。処理前よりサイズが減少しており、圧縮ができていることが確認できます。
手順2:SDeleteを利用する方法
SDeleteによるゼロフィル
ゲストの仮想PCにログインします。ログイン後、"SDelete"と呼ばれるツールをダウンロードします。
ダウンロードのURLは下記となります。
https://technet.microsoft.com/ja-jp/sysinternals/bb897443.aspx
ファイルを展開します。今回は "C:\Tools\SDelete" ディレクトリに展開しました。
展開後下記のコマンドを実行します。
容量を縮小するVHDファイルのドライブがCドライブである場合は、下記のコードとなります。
sdelete.exe -Z C:
コマンドを実行すると下図の[License Agreement]のダイアログボックスが表示されます。[Agree] ボタンをクリックして実行を開始します。
SDelete コマンドのZeroフィルの処理が始まります。
%の数値が増えてゆきます。
Zeroフィルが完了すると下図の画面となります。
未使用領域の最適化
SDeleteが完了したのちゲストPCをシャットダウンします。
ゲストPCのディスクを確認します。今回処理をするディスクは、下図の"ed.vhdx"ファイルです。VHDファイルのファイルサイズが 280GB あることが確認できます。
管理者として、PowerShellのコンソールを起動します。PowerShellのコンソールで下記のコマンドを実行します。
Optimize-VHD -Path (VHD/VHDXファイルのパス) -Mode Full
今回のVHDXファイルの場合は以下のコマンドとなります。
Optimize-VHD -Path C:\VHD-F\ed.vhdx -Mode Full
実行すると下図のプログレスバーの画面が表示されます。仮想ディスクの圧縮の進行状況が表示されます。
圧縮が完了すると下図の状態となります。
"sd.vhdx"ファイルのファイルサイズを確認します。280GBのサイズであったファイルが36GBになっています。未使用領域を切り捨てることができました。
補足
Optimize-VHD(VHD最適化)コマンドでは、以下のオプションも利用できます。
Full
Fullオプションを指定すると、ゼロのブロックをスキャンし、未使用のブロックを再利用します。
Optimize-VHD -Path (VHDファイルのパス) -Mode Full
Quick
Quickオプションでは、未使用のブロックを再利用しますが、ゼロブロックのスキャンはしません。
Optimize-VHD -Path (VHDファイルのパス) -Mode Quick
Retrim
Retrimオプションではブロックの整理のみを実行します。
Optimize-VHD -Path (VHDファイルのパス) -Mode Retrim
Pretrimmed
Pretrimmed オプションは、Quick モードとして動作しますが読み取り専用でのマウントが不要です。その分効率や速度は落ちます。VHDXファイルが、Retrimオプションでブロックの整理された状態になっていると効率が良いです。
Optimize-VHD -Path (VHDファイルのパス) -Mode Pretrimmed
Prezeroed
Prezeroed オプションは、Quick モードとして動作しますが読み取り専用でのマウントが不要です。事前にツールを実行して仮想ディスク上のすべての空き領域をゼロにしてある場合に利用します。
Optimize-VHD -Path (VHDファイルのパス) -Mode Prezeroed
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。