Hyper-V Server 2008 R2を実行しているホストで複数の仮想マシンをホストしています。ディスクは当初、約16か月前に別のサーバー(R2ではなく2008)でプロビジョニングされ、1年前にこのサーバーに移行されました。ほとんどのゲストはWindows 7を実行しています。
最近、VHDのサイズをゲストから報告された使用容量と比較してみましたが、いくつかのマシンには、実際に必要な容量より50〜100%大きいVHDファイルがあることがわかりました。そこで、VHDファイルを圧縮してホストのスペースを解放することを試みることにしました。大体次のようにして、インターネットで見つけた指示に従いました。
私が初めてこれを試したとき、それは完璧に機能し、私のVHDのサイズを約50%削減しました。しかし、他のすべてのゲストのディスクについては、次のエラーメッセージが表示されます。
The server encountered an error trying to edit the virtual disk.
'The system failed to compact 'C:\example.vhd'. Error Code: The requested
operation could not be completed due to a file system limitation
NTFS圧縮が有効になっているゲストはありません。これらのディスクのスナップショットはありません。このエラーの原因は他に何ですか?
編集:動的VHDサイズを自動的にチェックするソリューションを説明する人にとってのボーナスポイント。
ゲストからシャドウコピーを削除します。それでうまくいきます!
vssadmin delete shadows /all
インターネット検索統合のために、HyperVコンパクトが機能しなかったときに機能していたアプローチであるこのリンクが最終的に見つかりました: https://fiddley.wordpress.com/2014/01/27/dynamically-expanding-vhd- not-compacting-in-hyper-v /
管理コマンドプロンプトで、DISKPART
を実行します。
DISKPARTコマンドプロンプトで
select vdisk File=”I:\path\to\your.vhd”
attach vdisk readonly
compact vdisk
detach vdisk
シャドウコピーを削除するという提案とは別に、圧縮の前に空のスペースをゼロにするために SDelete
を使用する必要があります。たとえば、Cの空スペースをゼロにするには、次のコマンドを実行する必要がありますfrom inside仮想マシン:
sdelete -z c:
私の場合、合計サイズが80 GBの仮想ディスクファイルがあり、最初の圧縮では78 GBにしか減らなかったため、シャドウコピーを削除して再度圧縮すると72 GBに減りましたが、sdelete
を実行すると次の圧縮では、ファイルサイズが56 GBに減少しました。