事象
仮想マシンをシャットダウンしないままWindows 10 Anniversary Updateを適用後、Hyper-Vマネージャーから再度当該の仮想マシンを起動しようとしたところ、「オブジェクトが現在の状態である間はこの操作を実行できません」と表示され操作不能になりました。
イベントビューアー->Hyper-V-VMMSを覗くとイベントID19060で
「'当該仮想マシン名' は、'開始中' 操作を実行できませんでした。仮想マシンは現在次の操作を実行中です: '開始中'。(仮想マシン ID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)」とログがありました。
Event ID 19060 — Virtual Machine Save Operation
対応
検索しても情報がなかったので、「キャッシュ削除すればいいんじゃねえの?」くらいの軽い気持ちでc:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines Cache 下の仮想マシンIDに該当する設定情報を消そうとするも当然サービスが握っていて削除できないため、「じゃあサービス一回殺してから消して再起動だ」とこれまた軽い気持ちでHyper-Vマネージャーからサービスを停止しました。
すると「停止中」のまま応答しなくなったため慌ててPC自体を再起動したものの、今度はサービスが自動起動から即クラッシュ→停止中のまま無応答(サービス一覧から停止も開始もできない)という状態になり完全に詰みました。
※なおこの時のPC再起動が再起動中のまま小一時間全く応答がなかったため、やむをえず強制電源断しています
サービス一覧でHyper-V Virtual Machine Management->プロパティ->スタートアップの種類->無効 に変更し、もう一度PCを再起動後サービスが動いていないのを確認して上記キャッシュを削除、再度サービス一覧からスタートアップの種類->自動にした上で手動起動したところ無事復旧しました。
対応その後
(2016/8/10追記)
その後もPC再起動毎にこの状況(仮想機が「起動しています」から状態が変わらず、「開始中の取り消し」を行うと再現)が続き頭を抱えていましたが、ふとプロセス一覧を見てみました。
起動直後
C:\WINDOWS\system32>tasklist /FI "IMAGENAME eq vm*"
イメージ名 PID セッション名 セッション# メモリ使用量
========================= ======== ================ =========== ============
vmms.exe 2380 Services 0 41,388 K
vmcompute.exe 3400 Services 0 8,116 K
何らかの仮想機を起動したとき(ここで「起動しています」で固まってしまう)
C:\WINDOWS\system32>tasklist /FI "IMAGENAME eq vm*"
イメージ名 PID セッション名 セッション# メモリ使用量
========================= ======== ================ =========== ============
vmms.exe 2380 Services 0 42,328 K
vmcompute.exe 3400 Services 0 9,252 K
vmconnect.exe 6056 Console 1 57,836 K
vmwp.exe 1492 Services 0 5,356 K
「開始中の取り消し」を行ったとき(接続ウィンドウは閉じてます)
C:\WINDOWS\system32>tasklist /FI "IMAGENAME eq vm*"
イメージ名 PID セッション名 セッション# メモリ使用量
========================= ======== ================ =========== ============
vmms.exe 2380 Services 0 42,444 K
vmcompute.exe 3400 Services 0 9,328 K
vmwp.exe 1492 Services 0 5,304 K
ワーカープロセスが残ったまま(当然)になっていますのでtaskkillしてみます。
C:\WINDOWS\system32>taskkill /F /PID 1492
成功: PID 1492 のプロセスは強制終了されました。
Hyper-Vマネージャーのほうでも仮想機がシャットダウンできていることを確認できました。ここで再度仮想機を起動すると無事に起動して接続することができました。
起動成功時
C:\WINDOWS\system32>tasklist /FI "IMAGENAME eq vm*"
イメージ名 PID セッション名 セッション# メモリ使用量
========================= ======== ================ =========== ============
vmms.exe 2380 Services 0 34,488 K
vmcompute.exe 13216 Services 0 10,500 K
vmwp.exe 13284 Services 0 41,532 K
vmconnect.exe 13304 Console 1 121,020 K
仮想機シャットダウン後接続ウィンドウを閉じた後
C:\WINDOWS\system32>tasklist /FI "IMAGENAME eq vm*"
イメージ名 PID セッション名 セッション# メモリ使用量
========================= ======== ================ =========== ============
vmms.exe 2380 Services 0 34,648 K
vmcompute.exe 13216 Services 0 10,420 K
ちなみに1回操作すると別の仮想機もきちんと起動しました。
別の仮想機を起動したとき
C:\WINDOWS\system32>tasklist /FI "IMAGENAME eq vm*"
イメージ名 PID セッション名 セッション# メモリ使用量
========================= ======== ================ =========== ============
vmms.exe 2380 Services 0 35,264 K
vmcompute.exe 13216 Services 0 10,732 K
vmconnect.exe 4116 Console 1 123,704 K
vmwp.exe 12976 Services 0 43,976 K
前述の「対応」よりはスマートですが、やはりPC起動毎にやらないとダメなので何か根本的解決方法があれば…
(2016/8/10更に追記)
wmwp殺しただけだとダメな場合もあったため、手っ取り早く起動直後にvmcompute殺す→vmms殺すのが確実でした。
PC起動直後
C:\WINDOWS\system32>tasklist /FI "IMAGENAME eq vm*"
イメージ名 PID セッション名 セッション# メモリ使用量
========================= ======== ================ =========== ============
vmms.exe 2488 Services 0 41,228 K
vmcompute.exe 4316 Services 0 8,140 K
C:\WINDOWS\system32>taskkill /F /PID 4316
成功: PID 4316 のプロセスは強制終了されました。
C:\WINDOWS\system32>taskkill /F /PID 2488
成功: PID 2488 のプロセスは強制終了されました。
vmms再起動後
C:\WINDOWS\system32>tasklist /FI "IMAGENAME eq vm*"
イメージ名 PID セッション名 セッション# メモリ使用量
========================= ======== ================ =========== ============
vmms.exe 7872 Services 0 38,024 K
vmcompute.exe 8264 Services 0 7,856 K