A.19. 常见 libvirt 错误和故障排除
本附录记录了常见的 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 显示,当 libvirt 在TCP/IP 连接
模式下运行时,缺少的cacert.pem
文件将用作 TLS 颁发机构。这表示将传递--listen
参数。 - 解决方案
- 使用以下方法之一配置 libvirt 守护进程的设置:
- 安装 CA 证书。注意有关 CA 证书和配置系统身份验证的更多信息,请参阅 Red Hat Enterprise Linux 7 域身份、身份验证和策略指南中的 管理证书和证书颁发机构章节。
- 不要使用 TLS;改为使用裸机 TCP。在
/etc/libvirt/libvirtd.conf
中设置listen_tls = 0
和listen_tcp = 1
。默认值为listen_tls = 1
,listen_tcp = 0。
- 不要传递
--listen
参数。在/etc/sysconfig/libvirtd.conf
中,更改LIBVIRTD_ARGS
变量。