Tech Racho エンジニアの「?」を「!」に。
  • IT Tips

Hyper-V VMが「復元中(99%)」のまま固まった

開発PCの1台では、Hyper-V VMでLinuxを動作させています。Windows側から localhost でアクセスできない欠点はあるものの、それ以外は大きな不便もなく、クセが強いWSL2よりも使いやすいです。

発生した問題

ある日、PC再起動後にVMを復元しようとしたところ、「復元中(99%)」のまま5分待っても進まなくなってしまいました。

ああたまにあるやつね、別にメモリのデータ消えてもいいからたまにはVM再起動するか、位に考えていたのですが、

  • 「復元中の取り消し」をしても何も起きない
  • シャットダウンやリセット、「保存された状態を削除」のボタンが表示されない
  • ホストOSを再起動しても状態が変わらない

で困ってしまいました。

軽くググった感じでは、 vmwp.exe を停止すると直るというのがあったのでやってみましたが、アクセスが拒否されてしまいます。もちろん管理者権限のPowerShellです。

PS C:\WINDOWS\system32> tasklist /FI "IMAGENAME eq vm*"
(結果からvmwp.exeを探す)

PS C:\WINDOWS\system32> taskkill /f /t /pid 17144
エラー: PID 8648 のプロセス (PID 17144 の子プロセス) を終了できませんでした。
理由: アクセスが拒否されました。

どうやらこの場合は親プロセスの vmcompute.exe をkillすると良いらしい。が、それを消しても同じエラーや別のエラー(実行中のタスクのインスタンスが見つかりませんでした)が出続け、完全に止められません。

Hyper-Vマネージャー画面上では、「仮想マシン管理サービスは利用できません」になったり、読み込み中が終わらなかったり。
ホストOSを再起動しても毎回「復元中」になってしまうため、一度VMを削除して再インポートすることも、 .vmrs ファイルを削除することもできません。

また、Hyper-V Vritual Machine Managementサービスを停止しようとしても、停止中にエラーが出てしまい、ファイルハンドルを手放してくれません。

対処

セーフモードでゴニョゴニョするしかないのかな?と思ったのですが、結局、以下の手順で対応しました。

Hyper-V Vritual Machine Managementを自動起動しないようにする

services.msc で当該サービスの起動を「自動」ではなく「手動」にし、PCを再起動します。これで再起動時に勝手に起動しなくなります。

VMを作り直す

.vmrs ファイルだけを削除してみたところ、起動できそうに期待させて、やはりエラーになってしまいました。
「保存された状態を削除」が押せたので実行したところ「操作に失敗しました」とだけ表示され、よくわかりません。

ここから少し頑張ればきれいに復元できそうな気もしますが、それほど高度なVM設定があるわけでもないしVMの登録解除→再インポートで良いだろう、ということにしました。

ここで誤算 :マネジメントコンソールでVMを消すと、メタ情報ファイルが削除されて再インポートできないのですね。製品によって「削除」と「登録解除」が似たような用語で違う動作をするので間違えました。バックアップ取っておけばよかった。

VHDXは無事なので、気を取り直してVMの再作成です。CPUコアやメモリの割当、NICとVLANの設定なんて覚えていませんが、適当に再設定して、どうにか元の開発環境に近いものが取り戻せました。

めでたしめでたし。

関連記事

WSL環境から複数のホストにSSH接続して同じコマンドを対話実行する方法


関連記事

該当する記事がありません。

CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。