付録B 一般的な libvirt エラーおよびトラブルシューティング

この付録では、libvirt 関連の一般的な問題とエラーおよびそれらの対処法について説明します。
以下の表でエラーを特定し、Solution (解決法) の対応するリンク先で詳細なトラブルシューティング情報を参照してください。

表B.1 一般的な libvirt エラー

エラー問題の概要解決法
libvirtd failed to startlibvirt デーモンがスタートに失敗するが、/var/log/messages にはこのエラーに関する情報がない。libvirtd がスタート失敗」
Cannot read CA certificateURI がハイパーバイザー接続に失敗する際に発生するエラーの 1 つです。「URI がハイパーバイザー接続に失敗する」
Failed to connect socket ... : Permission deniedURI がハイパーバイザー接続に失敗する際に発生するエラーの 1 つです。「URI がハイパーバイザー接続に失敗する」
他の接続エラーURI がハイパーバイザー接続に失敗する際に発生するその他のエラーです。「URI がハイパーバイザー接続に失敗する」
Internal error guest CPU is not compatible with host CPUホストとゲストのプロセッサーが異なるため、ゲスト仮想マシンがスタートできない。「ゲスト仮想マシンがスタートできずエラーが発生: internal error guest CPU is not compatible with host CPU
Failed to create domain from vm.xml error: monitor socket did not show up.: Connection refusedゲスト仮想マシン (またはドメイン) がスタートに失敗し、このエラーまたは同様のエラーを返す。「ゲストがスタートに失敗しエラーが発生: monitor socket did not show up
Internal error cannot find character device (null)このエラーは、ゲストのコンソールに接続しようとする際に発生します。ゲスト仮想マシン用に設定されたシリアルコンソールがない、とレポートされます。Internal error cannot find character device (null)
No boot device既存のディスクイメージからゲスト仮想マシンを構築した後、ゲストの起動がストールするが、QEMU コマンドを直接使うとゲストは正常にスタートできる。「ゲスト仮想マシンの起動がストールしエラーが発生: No boot device
The virtual network "default" has not been started
default ネットワーク (またはローカル作成された別のネットワーク) がスタートできないと、そのネットワークを接続に使用するように設定されたすべての仮想マシンもスタートに失敗する。
「Virtual network default has not been started」
ゲスト上の PXE ブート (または DHCP ) が失敗ゲスト仮想マシンは正常にスタートするが、DHCP から IP アドレスを取得できない、または PXE を使用したブートができない、もしくはその両方。この原因は多くの場合、ブリッジでの転送遅延時間が長く設定されているか、iptables パッケージとカーネルがチェックサム難号化ルールをサポートしないためです。「ゲスト上の PXE ブート (または DHCP ) が失敗」
ゲストは外部ネットワークにアクセスできるが、macvtap インターフェースの使用時にはホストにアクセスできない
ゲストは他のゲストと通信できるが、macvtap (または type='direct') ネットワークインターフェース使用の設定後にはホストに接続できない。
この状況は、実際にはエラーではなく macvtap の定義済み動作です。
「ゲストは外部ネットワークにアクセスできるが、macvtap 使用時にはホストにアクセスできない」
Could not add rule to fixup DHCP response checksums on network 'default'この警告メッセージはほとんどの場合、無害ですが、間違って問題の証拠と見なされることが多くあります。「Could not add rule to fixup DHCP response checksums on network 'default'
Unable to add bridge br0 port vnet0: No such deviceこのエラーメッセージと、同様の Failed to add tap interface to bridge 'br0': No such device というメッセージは、ゲストの (またはドメインの) <interface> 定義で指定されたブリッジデバイスが存在しないことを示しています。「Unable to add bridge br0 port vnet0: No such device」
Warning: could not open /dev/net/tun: no virtual network emulation qemu-kvm: -netdev tap,script=/etc/my-qemu-ifup,id=hostnet0: Device 'tap' could not be initializedホストシステムの type='ethernet' (別名、ジェネリックイーサネット) インターフェースの設定後にゲスト仮想マシンがスタートしない。このエラーまたは同様のエラーが libvirtd.log または /var/log/libvirt/qemu/name_of_guest.log のどちらか、または両方に表示される。「ゲストがスタートできずエラーが発生: warning: could not open /dev/net/tun
Unable to resolve address name_of_host service '49155': Name or service not knownQEMU ゲストマイグレーションが失敗し、このエラーメッセージが知らないホスト名とともに表示される。「マイグレーションに失敗しエラーが発生 Error: unable to resolve address
Unable to allow access for disk path /var/lib/libvirt/images/qemu.img: No such file or directorylibvirt がディスクイメージにアクセスできないため、ゲスト仮想マシンを移行できない。「マイグレーションに失敗しエラーが発生: Unable to allow access for disk path: No such file or directory
libvirtd のスタート時にゲスト仮想マシンがないlibvirt デーモンは正常にスタートしたが、virsh list --all を実行してもゲスト仮想マシンが見当たらないlibvirtd のスタート時にゲスト仮想マシンが見当たらない」
Unable to connect to server at 'host:16509': Connection refused ... error: failed to connect to the hypervisorlibvirtd が接続のために TCP ポートをリッスンしている間に、ハイパーバイザーへの接続が失敗する。「Unable to connect to server at 'host:16509': Connection refused ... error: failed to connect to the hypervisor」
一般的な XML エラーlibvirt は XML ドキュメントを使用して構造化データを保存します。XML ドキュメントのエラーのいくつかは、XML ドキュメントが API で libvirt に渡される際に発生します。このエントリーでは、ゲスト XML 定義の編集に関する指示と、XML 構文および設定における一般的なエラーの詳細を提供します。「一般的な XML エラー」

B.1. libvirtd がスタート失敗

現象
libvirt デーモンが自動的にスタートしない。手動での libvirt デーモンのスタートも失敗
# /etc/init.d/libvirtd start
* Caching service dependencies ...                                                                                             [ ok ]
* Starting libvirtd ...
/usr/sbin/libvirtd: error: Unable to initialize network sockets. Check /var/log/messages or run without --daemon for more info.
* start-stop-daemon: failed to start `/usr/sbin/libvirtd'                                                                      [ !! ]
* ERROR: libvirtd failed to start
さらには、/var/log/messages にこのエラーの 'more info' もない。
調査
以下の行でコメントを解除し、/etc/libvirt/libvirtd.conflibvirt のロギングを変更します。コメントを解除するには、テキストエディターで /etc/libvirt/libvirtd.conf ファイルを開き、以下の行の先頭からハッシュ (または #) 記号を削除して、変更を保存します。
log_outputs="3:syslog:libvirtd"

注記

この行は、libvirt が過剰なログメッセージを作成しないように、デフォルトではコメントアウトされています。問題の診断後には、/etc/libvirt/libvirtd.conf ファイルでこの行を再度コメント化することが推奨されます。
libvirt を再起動し、問題が解決されたか確認します。
libvirtd がまだ正常にスタートしない場合、/var/log/messages ファイルに以下と同様のエラーが表示されます。
Feb  6 17:22:09 bart libvirtd: 17576: info : libvirt version: 0.9.9
Feb  6 17:22:09 bart libvirtd: 17576: error : virNetTLSContextCheckCertFile:92: Cannot read CA certificate '/etc/pki/CA/cacert.pem': No such file or directory
Feb  6 17:22:09 bart /etc/init.d/libvirtd[17573]: start-stop-daemon: failed to start `/usr/sbin/libvirtd'
Feb  6 17:22:09 bart /etc/init.d/libvirtd[17565]: ERROR: libvirtd failed to start
libvirtd man ページには、libvirtListen for TCP/IP connections モードで実行された際に、見つからない cacert.pem ファイルが TLS 認証として使用されたことが示されています。つまり、--listen パラメーターが渡されています。
解決法
libvirt デーモンを以下のいずれかの方法で設定します。
  • CA 証明書をインストールする。

    注記

    CA 証明書およびシステム認証の設定に関する詳細は、『Red Hat Enterprise Linux 6 導入ガイド』 の認証の設定の章を参照して下さい。
  • TLS を使わずにベア TCP を使用する。/etc/libvirt/libvirtd.conflisten_tls = 0listen_tcp = 1 に設定する。デフォルト値は、listen_tls = 1listen_tcp = 0
  • --listen パラメーターを渡さない。/etc/sysconfig/libvirtd.confLIBVIRTD_ARGS 変数を変更する。