VirtManagerやvirshコマンドでゲストマシンが操作できなくなったときの対応

この記事は公開から2年以上経過しています。

Linuxホストをサスペンド運用してるときに、QEMU/KVMゲストマシンの操作ができなくなってしまう現象が発生したため、その対応についての備忘録。

2022.3.21追記:
プロセス終了のみではうまくいかなかったため、サービス再起動処理を追記しました。


問題

QEMU/KVMゲストマシンが起動した状態で長期間ホストマシンをサスペンドしてからレジュームすると、以下のようなエラーが発生してVirtManager(仮想マシンマネージャー)や、virshコマンドによるゲストマシンの操作できなくなる。

VirtManager(仮想マシンマネージャー)エラー

file

virshコマンドエラー

virsh shutdown XXX
エラー: Failed to shutdown domain 'XXX'
エラー: オペレーション中にタイムアウトが発生しました: cannot acquire state change lock (held by monitor=remoteDispatchDomainOpenGraphicsFd)


原因

libvirtdが応答してない?


対応

  1. 以下のコマンドで実行中のlibvirtdプロセスを強制終了する。

    sudo killall -9 libvirtd
  2. 以下のコマンドでlibvirtdサービスを停止する。

    sudo systemctl stop libvirtd

    上記コマンドを実行すると、以下のように依存サービスが表示される。

    Warning: Stopping libvirtd.service, but it can still be activated by:
      libvirtd.socket
      libvirtd-ro.socket
      libvirtd-admin.socket

    以下のコマンドで、上記依存サービスを含めてサービスを停止する。

    sudo systemctl stop libvirtd.socket libvirtd-ro.socket libvirtd-admin.socket libvirtd
  3. 以下のコマンドでlibvirtdサービスを開始する。

    sudo systemctl start libvirtd

上記コマンド実行後は、通常どおりvirshコマンドやVirtManagerによる仮想マシン操作ができるようになります。
(うまく行かない場合は、サービス再起動後に10〜15分程度時間をおいてから確認してみてください。)


以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする