Hyper-V VM や、VHD 環境を運用していると、VHD 内の空き領域は十分あるのに、VHD ファイルサイズが必要以上に肥大化してしまうことがあります。
肥大化した VHD は、VHD を最適化すればサイズを切り詰められるのですが、効率よく切り詰めるには以下の手順で最適化します。
VHD 内がフラグメンテーションを起こしていると、サイズ切りつめの効率が大幅に下がるので、まずはターゲットの VHD に含まれているボリュームをデフラグします。
VM / VHD boot マシンの GUI でデフラグしても良いのですが、On SSD
とかで、GUI でのデフラグがトリムしかできない場合は、デフラグ効果が出ないので思ったほどサイズ切りつめができません。
このような場合は、defrag.exe
を使ってデフラグします。
defrag.exe を使ってデフラグをする場合は、ファイルロックを極力少なくするために Hyper-V
ホストに VHD をマウントし、Hyper-V ホストでデフラグするのがお勧めです。
(Optimize-Volume だとトリムがかかるので敢えて
defrag.exe)
defrag [ドライブレター] /d /u /v |
各オプションの意味は以下のとおり
/d : 従来の最適化を実行します(トリムさせない)
/u : 操作の進行状況を画面に表示します。
/v : 断片化の統計情報を含む詳細を出力します。
/x オプション(指定したボリュームの空き領域の統合)もありますが、このオプションは /d に含まれるので指定する必要ありません(/d /x は排他関係)
(以前、空き領域をゼロパディングする手順を書いていましたが、再度実測したら誤差程度の差しか出なかったのでゼロパディングする手順カットしました)
デフラグが完了したら、最適化して完了です。
VHD をマウントしているのでしたら、ディスマウントしてから最適化します。
Mount-VHD -Path [VHDフルパス] -ReadOnly -Passthru | Optimize-VHD -Mode Full -Passthru | Dismount-VHD |
これで VHD が、実使用容量に近いサイズになったはずです。
一連の処理を関数にするとこんな感じですね
|
関数を PowerShell プロンプトで実行する
http://www.vwnet.jp/Windows/PowerShell/2016100401/UseFunctionInPsPrompt.htm
Copyright © MURA All rights reserved.