web-dev-qa-db-ja.com

Hyper-VがVHDを圧縮できない理由は何ですか?

Hyper-V Server 2008 R2を実行しているホストで複数の仮想マシンをホストしています。ディスクは当初、約16か月前に別のサーバー(R2ではなく2008)でプロビジョニングされ、1年前にこのサーバーに移行されました。ほとんどのゲストはWindows 7を実行しています。

最近、VHDのサイズをゲストから報告された使用容量と比較してみましたが、いくつかのマシンには、実際に必要な容量より50〜100%大きいVHDファイルがあることがわかりました。そこで、VHDファイルを圧縮してホストのスペースを解放することを試みることにしました。大体次のようにして、インターネットで見つけた指示に従いました。

  1. ゲストマシンでCHKDSKを実行する
  2. ゲストマシンでデフラグを実行する(Windows組み込みのデフラグ)
  3. ゲストをシャットダウンします
  4. Hyper-Vマネージャーで「ディスクの編集...」ツールを開きます
  5. 目的の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サイズを自動的にチェックするソリューションを説明する人にとってのボーナスポイント。

8
Nic

ゲストからシャドウコピーを削除します。それでうまくいきます!

vssadmin delete shadows /all
7
tony roth

インターネット検索統合のために、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
3
Stan

シャドウコピーを削除するという提案とは別に、圧縮の前に空のスペースをゼロにするために SDelete を使用する必要があります。たとえば、Cの空スペースをゼロにするには、次のコマンドを実行する必要がありますfrom inside仮想マシン:

sdelete -z c:

私の場合、合計サイズが80 GBの仮想ディスクファイルがあり、最初の圧縮では78 GBにしか減らなかったため、シャドウコピーを削除して再度圧縮すると72 GBに減りましたが、sdeleteを実行すると次の圧縮では、ファイルサイズが56 GBに減少しました。

0