Hyper-Vの仮想マシンを別のホストへ移行しようとしたのですが、サイズが問題となりました。
移行先は800GBほどしか空いてないのに、仮想マシンは1TBもあったので縮小することにしました。

TL;DR

Hyper-Vの仮想マシンを圧縮するには、

  • 仮想マシンをシャットダウンする
  • Mount-VHD "VHD/VHDXファイルのパス" -NoDriveLetter -Readonly
  • Optimize-VHD "VHD/VHDXファイルのパス" -Mode QuickまたはFull
  • Dismount-VHD "VHD/VHDXファイルのパス"

仮想マシンの圧縮

仮想マシン全体のサイズの大部分を占めるのが、仮想ディスク(VHD/VHDX)です。
これを圧縮するためには「最適化」を行えばOKです。

手順としては、まず、仮想マシンをシャットダウンします。(「停止」は電源を抜く行為に相当するためやめましょう)

次に、仮想ディスクに対してコマンドを実行して最適化を行います。
この際、ディスクのパスを指定するため、マシンを右クリックし、設定から確認しておきます。

そして、PowerShellを管理者権限で起動し、下記のコマンドを順に実行します。

1
2
3
4
5
6
// 仮想ディスクをマウント(読み取り専用)
Mount-VHD "VHD/VHDXファイルのパス" -NoDriveLetter -Readonly
// 最適化
Optimize-VHD "VHD/VHDXファイルのパス" -Mode QuickまたはFull
// アンマウント
Dismount-VHD "VHD/VHDXファイルのパス"

これで、1TBのディスクを800GB程度に圧縮できました。時間は30分もかからなかったと思います。

移行するときの順序

これは、仮想マシンを移行するときのみの話ですが、エクスポートと最適化の順番はどちらでも大丈夫です。

ちなみに今回は、エクスポートしてから最適化しました。(エクスポートに一晩かかってしまったので)

まとめ

仮想マシンの圧縮はやり方さえ分かれば簡単に効果が得られるので、試してみてください。

参考