Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

A.19. 常见 libvirt 错误和故障排除

本附录记录了常见的 libvirt- 相关问题和错误,以及处理它们的说明。
在下面的表格中找到错误,并按照答案中的相应链接以获取详细故障排除信息。

表 A.1. 常见 libvirt 错误

Error 问题描述 解决方案
libvirtd 无法启动 libvirt 守护进程无法启动。但是,/var/log/messages 中没有有关此错误的信息。 第 A.19.1 节 “libvirtd 无法启动”
无法读取 CA 证书 这是 URI 无法连接到管理程序时出现的几个错误之一。 第 A.19.2 节 “到虚拟机监控程序的 URI 失败”
其他连接错误 这些是 URI 无法连接管理程序时出现的其他错误。 第 A.19.2 节 “到虚拟机监控程序的 URI 失败”
客户端中的 PXE 引导(或 DHCP)失败 客户机虚拟机可以成功启动,但无法从 DHCP 获取 IP 地址,或使用 PXE 协议引导。这通常是由于为网桥设置的较长的转发延迟时间,或者当 iptables 软件包和内核不支持 checksum mangling 规则时。 第 A.19.3 节 “客户机失败的 PXE 引导(或 DHCP)”
客户机可以访问外部网络,但在使用 macvtap 接口时无法访问主机
客户机可以与其他虚拟客户机通信,但在配置为使用 macvtap(或 type='direct')网络接口后无法连接到主机。
这实际上不是错误 - 它是 macvtap 的定义的行为。
第 A.19.4 节 “Guest Can Reach Outside Network,但在使用 macvtap 界面时可能会重新访问主机”
无法添加规则来修复网络 "默认"上的 DHCP 响应校验和 此警告消息几乎总是没有损害,但通常被误认为是问题证。 第 A.19.5 节 “无法添加规则来修复网络 "默认"上的 DHCP 响应校验和”
无法添加网桥 br0 端口 vnet0:没有这样的设备 此错误消息或类似的 Failed 将 tap 接口添加到网桥 'br0' :没有这样的设备 显示客户机(或域) <interface> 定义中指定的网桥设备不存在。 第 A.19.6 节 “无法添加网桥 br0 端口 vnet0:没有这样的设备”
无法解析地址 name_of_host 服务 '49155':未知的名称或服务 QEMU 虚拟客户机迁移失败,且显示此错误消息并显示不熟悉的主机名。 第 A.19.7 节 “migration Fails with error: unables to address
无法允许访问磁盘路径 /var/lib/libvirt/images/qemu.img:没有这些文件或目录 无法迁移客户机虚拟机,因为 libvirt 无法访问磁盘映像。 第 A.19.8 节 “带有 Unables 的 migration Fails 以允许访问磁盘路径:没有这些文件或目录
libvirtd 启动时没有客户机虚拟机 libvirt 守护进程成功启动,但在运行 virsh list --all 时不会显示客户机虚拟机。 第 A.19.9 节 “当 libvirtd 已启动时,没有演示客户机虚拟机”
常见 XML 错误 libvirt 使用 XML 文档来存储结构化的数据。当 XML 文档通过 API 传递至 libvirt 时,会会出现几个常见错误。这个条目提供了编辑客户机 XML 定义的说明,以及 XML 语法和配置中的常见错误。 第 A.19.10 节 “常见 XML 错误”

A.19.1. libvirtd 无法启动

症状
libvirt 守护进程不会自动启动。手动启动 libvirt 守护进程也失败:
# systemctl start libvirtd.service
* 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 中没有有关此错误的更多信息。
正在调查
通过启用下面的行 ,更改 libvirt/etc/libvirt/libvirtd.conf 中的登录。要启用设置行,请在文本编辑器中打开 /etc/libvirt/libvirtd.conf 文件,从以下行的开头删除 hash(或 #)符号,并保存更改:
log_outputs="3:syslog:libvirtd"
注意
默认情况下,该行会被注释掉,以防止 libvirt 生成过量日志消息。诊断问题后,建议在 /etc/libvirt/libvirtd.conf 文件中再次为该行添加注释。
重新启动 libvirt 以确定是否解决了该问题。
如果 libvirtd 仍然没有成功启动,则会输出类似以下内容的错误:
# systemctl restart libvirtd
Job for libvirtd.service failed because the control process exited with error code. See "systemctl status libvirtd.service" and "journalctl -xe" for details.

Sep 19 16:06:02 jsrh libvirtd[30708]: 2017-09-19 14:06:02.097+0000: 30708: info : libvirt version: 3.7.0, package: 1.el7 (Unknown, 2017-09-06-09:01:55, js
Sep 19 16:06:02 jsrh libvirtd[30708]: 2017-09-19 14:06:02.097+0000: 30708: info : hostname: jsrh
Sep 19 16:06:02 jsrh libvirtd[30708]: 2017-09-19 14:06:02.097+0000: 30708: error : daemonSetupNetworking:502 : unsupported configuration: No server certif
Sep 19 16:06:02 jsrh systemd[1]: libvirtd.service: main process exited, code=exited, status=6/NOTCONFIGURED
Sep 19 16:06:02 jsrh systemd[1]: Failed to start Virtualization daemon.

-- Subject: Unit libvirtd.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit libvirtd.service has failed.
--
-- The result is failed.
libvirtd man page 显示,当 libvirtTCP/IP 连接 模式下运行时,缺少的 cacert.pem 文件将用作 TLS 颁发机构。这表示将传递 --listen 参数。
解决方案
使用以下方法之一配置 libvirt 守护进程的设置:
  • 安装 CA 证书。
    注意
    有关 CA 证书和配置系统身份验证的更多信息,请参阅 Red Hat Enterprise Linux 7 域身份、身份验证和策略指南中的 管理证书和证书颁发机构章节。
  • 不要使用 TLS;改为使用裸机 TCP。在 /etc/libvirt/libvirtd.conf 中设置 listen_tls = 0listen_tcp = 1。默认值为 listen_tls = 1listen_tcp = 0。
  • 不要传递 --listen 参数。在 /etc/sysconfig/libvirtd.conf 中,更改 LIBVIRTD_ARGS 变量。