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ファイルを圧縮します。
Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像1

PowerShellまたは、コマンドプロンプトを開き、次のコマンドを実行します。

Mount-VHD -Path (圧縮するVHD, VHDXファイル名) -ReadOnly

今回の場合は以下のコマンドになります。

Mount-VHD -Path 'F:\VHD\Windows 10 Pro Operation.vhdx' -ReadOnly


Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像2

コマンドを実行すると仮想ディスクのマウントが実行されます。下図の進捗ゲージが表示されます。
Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像3

マウントが完了すると、コマンドプロンプトに戻ります。メッセージなどは表示されません。
Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像4

続いて、下記の最適化のコマンドを実行します。

Optimize-VHD -Path (圧縮するVHD, VHDXファイル名) -Mode Full

今回の場合は以下のコマンドになります。

Optimize-VHD -Path 'F:\VHD\Windows 10 Pro Operation.vhdx' -Mode Full

Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像5

コマンドを実行するとディスクの圧縮が始まります。
Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像6
Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像7

一度のコマンド実行では圧縮がされない場合がありますので、複数回実行したほうが良いです。
Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像8

VHDファイルをアンマウントします。下記のコマンドを実行します。

Dismount-VHD -Path (圧縮するVHD, VHDXファイル名)

今回の場合は以下のコマンドになります。

Dismount-VHD -Path 'F:\VHD\Windows 10 Pro Operation.vhdx'


Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像9

VHDディスクがアンマウントできました。正常終了した場合でもメッセージなどは表示されません。
Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像10

VHDXディスクのファイルサイズを確認します。処理前よりサイズが減少しており、圧縮ができていることが確認できます。
Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像11

手順2:SDeleteを利用する方法

SDeleteによるゼロフィル

ゲストの仮想PCにログインします。ログイン後、"SDelete"と呼ばれるツールをダウンロードします。
ダウンロードのURLは下記となります。
https://technet.microsoft.com/ja-jp/sysinternals/bb897443.aspx

Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像12

ファイルを展開します。今回は "C:\Tools\SDelete" ディレクトリに展開しました。

展開後下記のコマンドを実行します。

sdelete.exe -Z (ドライブ名):

容量を縮小するVHDファイルのドライブがCドライブである場合は、下記のコードとなります。

  sdelete.exe -Z C:

Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像13

コマンドを実行すると下図の[License Agreement]のダイアログボックスが表示されます。[Agree] ボタンをクリックして実行を開始します。
Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像14

SDelete コマンドのZeroフィルの処理が始まります。
Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像15

%の数値が増えてゆきます。
Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像16

Zeroフィルが完了すると下図の画面となります。
Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像17

未使用領域の最適化

SDeleteが完了したのちゲストPCをシャットダウンします。
ゲストPCのディスクを確認します。今回処理をするディスクは、下図の"ed.vhdx"ファイルです。VHDファイルのファイルサイズが 280GB あることが確認できます。
Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像18

管理者として、PowerShellのコンソールを起動します。PowerShellのコンソールで下記のコマンドを実行します。

Optimize-VHD -Path (VHD/VHDXファイルのパス) -Mode Full

今回のVHDXファイルの場合は以下のコマンドとなります。

 Optimize-VHD -Path C:\VHD-F\ed.vhdx -Mode Full

Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像19

実行すると下図のプログレスバーの画面が表示されます。仮想ディスクの圧縮の進行状況が表示されます。
Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像20

圧縮が完了すると下図の状態となります。
Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像21

"sd.vhdx"ファイルのファイルサイズを確認します。280GBのサイズであったファイルが36GBになっています。未使用領域を切り捨てることができました。
Hyper-V の容量可変の仮想ディスク (VHD/VHDX) のファイルサイズを小さくする:画像22

補足

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 


AuthorPortraitAlt
著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
作成日: 2015-09-11
Copyright © 1995–2025 iPentec all rights reserverd.