B.4. ゲストがスタートに失敗しエラーが発生: monitor socket did not show up

現象
ゲスト仮想マシン (またはドメイン) がスタートに失敗し、以下のエラーメッセージが表示される。
# virsh -c qemu:///system create name_of_guest.xml error: Failed to create domain from name_of_guest.xml error: monitor socket did not show up.: Connection refused
調査
このエラーメッセージが示しているのは、以下の点です。
  1. libvirt は動作している
  2. QEMU プロセスはスタートに失敗した
  3. libvirtQEMU または QEMU エージェントモニターソケットに接続しようとした際に終了した
エラーの詳細を理解するために、ゲストログを検証します。
# cat /var/log/libvirt/qemu/name_of_guest.log
LC_ALL=C PATH=/sbin:/usr/sbin:/bin:/usr/bin QEMU_AUDIO_DRV=none /usr/bin/qemu-kvm -S -M pc -enable-kvm -m 768 -smp 1,sockets=1,cores=1,threads=1 -name name_of_guest -uuid ebfaadbe-e908-ba92-fdb8-3fa2db557a42 -nodefaults -chardev socket,id=monitor,path=/var/lib/libvirt/qemu/name_of_guest.monitor,server,nowait -mon chardev=monitor,mode=readline -no-reboot -boot c -kernel /var/lib/libvirt/boot/vmlinuz -initrd /var/lib/libvirt/boot/initrd.img -append method=http://www.example.com/pub/product/release/version/x86_64/os/ -drive file=/var/lib/libvirt/images/name_of_guest.img,if=none,id=drive-ide0-0-0,boot=on -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 -device virtio-net-pci,vlan=0,id=net0,mac=52:40:00:f4:f1:0a,bus=pci.0,addr=0x4 -net tap,fd=42,vlan=0,name=hostnet0 -chardev pty,id=serial0 -device isa-serial,chardev=serial0 -usb -vnc 127.0.0.1:0 -k en-gb -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,
addr=0x3 
char device redirected to /dev/pts/1
qemu: could not load kernel '/var/lib/libvirt/boot/vmlinuz':
Permission denied
解決法
ゲストログには、エラーの修正に必要な詳細が含まれています。
ゲストが libvirt の 0.9.5 以前のバージョンを実行中にホストがシャットダウンした場合、libvirt ゲストの init スクリプトはゲストの管理保存を実行しようとします。管理保存が不完全な場合 (たとえば、管理保存イメージがディスクにフラッシュされる前に電源を喪失するなど)、保存イメージは破損し、QEMU はロードしません。古いバージョンの libvirt は破損を認識せず、問題は永続化します。このケースでは、ゲストログには -incoming の使用を試みたことが引数の 1 つとして表示されます。これは、libvirt が保存状態のファイル内で移行することで QEMU のスタートを試みていることを意味します。
この問題は、virsh managedsave-remove name_of_guest を実行して破損した管理保存イメージを削除することで修正できます。新しいバージョンの libvirt は、最初の段階で破損を回避するステップを取り、virsh start --force-boot name_of_guest を追加して管理保存イメージも迂回します。