Hyper-Vなどの仮想環境を使っていると、仮想環境のディスクファイル(vhd/vhdx)が、 OSから見たディスクの使用容量は増えていないのに、vhd/vhdxファイルのサイズは日々大きくなってしまいます。
そのメカニズムは、Windowsのファイル管理にあります。Windowsはディスクの書き込みの際に、 ディスク容量に余裕がある場合は、書き込みや読み出しの効率化の為に、積極的に新しい連続した領域を使う性質があります。
そのことで、可変サイズのvhd/vhdxファイルは、新しい領域が使われるたびに、だんだんと容量が増えていくことになります。
Hyper-Vなどで長期に仮想環境を利用していると、vhd/vhdxファイルが太ってしまうのはこの為です。
vhd/vhdxファイルのサイズを小さく(ダイエット)するにはどうするか?
まずは、仮想環境を起動して仮想環境上でいらないファイルを極力削除します。ごみ箱を空にしたり、 ディスクのクリーンナップなども効果的です。できる限りいらないファイルを削除して、ディスクの使用容量を削減します。
次に、仮想環境にMicrosoftが提供しているSDeleteというツールをダウンロードして、管理者権限のコマンドプロンプトで以下のコマンドを実行します。 このツールはディスクの未使用の領域(セクタ)を0でクリアしてくれます。 実行すると未使用領域のクリアが始まり、進捗がパーセンテージで表示されます。100%になって終了するまでしばらく待ちます。 (100%になってからも結構時間がかかります..)
> sdelete.exe -z C: SDelete v2.0 - Secure file delete Copyright (C) 1999-2016 mark Russinovich Sysinternals - www.sysinternals.com SDelete is set for 1 pass. Zeroing free space on c:\: 10% 1 drive cleaned.
(C:はドライブレターです。64bitOSの場合は、sdelete64.exeを使用してください。)
ディスクの未使用領域のクリアが完了したら、仮想環境での作業は完了です。仮想環境のOSをシャットダウンします。
次は、仮想OSでは無くホスト側のOSでの作業です。今度は、コマンドプロンプトでは無くPowerShellを使います。
ホストOS側で、ディスク容量を削減したいvhd/vhdxファイルのあるフォルダまで移動します。
> cd C:\VHD-F\
容量の削減の前に、ファイルサイズを確認しておきます。
> dir Windows81pro.vhdx Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2016/07/31 20:25 61905829888 Windows81pro.vhdx
今度は、vhd/vhdxがあるホスト側のOSで、管理者権限でPowerShellを起動します。そして、 Optimize-VHDコマンドを実行します。Optimize-VHDコマンドは、vhd/vhdxファイルの未使用セクタを切り詰めてくれます。 Optimize-VHDコマンドを実行すると、テキストベースでプログレスが表示されるので完了するまでしばらく待ちます。
> Optimize-VHD -Path C:\VHD-F\Windows81pro.vhdx -Mode Full 仮想ディスクの圧縮 10% [oooooooooo ]
("C:¥VHD-F¥Windows81pro.vhdx"には、vhd/vhdxのファイルパスを指定します)
> dir Windows81pro.vhdx Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2016/07/31 20:25 32065454080 Windows81pro.vhdx
なんと、30GBぐらい小さくなりました。
長期間利用していたvhd/vhdxファイルの場合、半分以下になるようなこともありますよ。
vhd/vhdxファイルの縮小方法について説明しました。vhd/vhdxファイルをダイエットしてみてね。
vhd/vhdxファイルのサイズを縮小(ダイエット)する方法について勉強するね!!。