Hyper-V仮想マシンの削除に2時間。なんで!
以前、Hyper-Vでスナップショットを削除したときに「結合処理を実行中(XX%)」という状況が発生することがあることを説明しました。→「101回目のスナップショット(Hyper-V 3.0に見つけた改善点)」 結合処理は、仮想マシンがオフラインの間に行われるため、結合処理が100%完了するだけのオフラインの時間が取れないと、差分タイプの VHD (.avhd)が長期間残ってしまうことになります。そして、Windows Server 8 の Hyper-V 3.0 (Developer Previewの場合) では、仮想マシンのオンライン中にも結合処理をしてくれるようになっていることをお伝えしました。
先日、Windows Server 2008 R2 SP1 の Hyper-V 2.0 環境
で、結合処理が完了していない VHD を持つ、複数の仮想マシンを、何も考えずに(結合処理が未処理の VHD があることを知らずに) 削除してしまいました。どうなるのかというと、仮想マシンはすぐには削除されずに、状況が「破棄中(XX%)」のまま、一向に削除されないという状態になりました。
ご存じの方もいると思いますが、Hyper-Vの「Hyper-Vマネージャー」で仮想マシンを削除した場合、仮想マシンの構成ファイル (.xml) は削除されますが、仮想ハードディスク (.vhd) は削除されずに残ります。これは、誤って仮想マシンを削除したときの影響範囲を少なくするためなのでしょう。誤って削除してしまった場合、別の仮想マシンを作成して、仮想ハードディスク (.vhd) を割り当てれば、仮想マシンを復元できます (仮想マシンID=ハードウェアが変わるので、完全に同じというわけにはいきませんが)。
結合処理が完了していない仮想ハードディスク (.vhd) を持つ仮想マシンを削除した場合、元々の仮想ハードディスク (.vhd)を適切な状態で残すために、結合処理 (.avhd を .vhd にマージ) を完了してから仮想マシンを削除するようになっています。状況が「破棄中(XX%)」で、なかなかリストから仮想マシンが消えないのはこの理由からです。
複数のスナップショットを持つ仮想マシンを削除した場合も、同じように状況が「破棄中(XX%)」となり、スナップショットを親にすべて結合してから仮想マシンを削除するようです。すばやく仮想マシンを削除したければ、仮想マシンを削除する1つ手前の操作として、最も古い(最上位の)スナップショットを適用してから、仮想マシンを削除します。この点については、Virtual PC Guyさんが以前に指摘しているとおりです。
存在するスナップショットではなく、既に削除されたスナップショットの結合待ちの .avhd ファイルの存在は、仮想マシンのプロパティを開いて VHD のファイル名を見てみないとわからないので、「破棄中(XX%)」の状態が長く続くことで気が付いたりします。これが同じストレージ上の複数の仮想マシンの仮想ハードディスクだったり、低速なストレージだったりすると、数時間かかったりするのでこの状況に出会ってしまうと厄介です (サーバーの電源を落とせない、頬同じディスク上の稼働中の仮想マシンのパフォーマンス低下など)。
比較するのもなんですが、VMware Playerには仮想マシンを削除するオプションとして、「ライブラリから削除」と「ディスクから削除」の2つのオプションがあり、「ディスクから削除」を選択すれば、すぐに完全に消去できます。
Oracle VM VirtualBoxにも同じような削除オプションが用意されています。古いバージョンだと、このオプションは機能しませんでしたが、最近のは大丈夫です。
このような削除オプションを、Hyper-Vにも用意してくれないものでしょうか。Hyper-V 3.0だと、オンライン中にも結合処理をしてくれるので、仮想マシンを削除したときに「破棄中(XX%)」の状態が長く続くことは無いと思いますが。