libvirt服务出现g_hash_table_unref断言失败报错,如何解决?
解决libvirtd服务报错
g_hash_table_unref: assertion 'hash_table != NULL' failed的方法 查看libvirtd服务状态时,系统始终报出如下错误:
g_hash_table_unref: assertion 'hash_table != NULL' failed
完整的libvirt服务状态信息如下:
libvirtd.service - Virtualization daemon Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2024-01-07 09:40:14 +0330; 22min ago TriggeredBy: ● libvirtd-admin.socket ● libvirtd.socket ● libvirtd-ro.socket Docs: man:libvirtd(8) https://libvirt.org Main PID: 5659 (libvirtd) Tasks: 21 (limit: 32768) CGroup: /system.slice/libvirtd.service └─ 5659 /usr/sbin/libvirtd --timeout 120 Jan 07 09:40:14 mailNew systemd[1]: Starting Virtualization daemon... Jan 07 09:40:14 mailNew systemd[1]: Started Virtualization daemon. Jan 07 09:42:22 mailNew libvirtd[5659]: g_hash_table_unref: assertion 'hash_table != NULL' failed
解决步骤:
检查并更新libvirt版本
该断言错误多由特定版本的libvirt存在bug导致,先查看当前版本:virsh --version再通过系统包管理器更新到最新稳定版:
- CentOS/RHEL系:
yum update libvirt - Debian/Ubuntu系:
apt update && apt upgrade libvirt-daemon
- CentOS/RHEL系:
排查无效配置项
错误可能由损坏的存储池、网络或虚拟机配置触发:- 检查存储池状态:
若存在异常状态的存储池,尝试修复或删除无效配置:virsh pool-list --allvirsh pool-destroy 异常池名称 virsh pool-undefine 异常池名称 - 检查虚拟网络状态:
同理处理异常网络配置。virsh net-list --all - 检查虚拟机XML配置是否存在语法错误,可通过
virsh define 虚拟机XML文件验证配置合法性。
- 检查存储池状态:
重启libvirtd服务
更新或修复配置后,重启服务生效:systemctl stop libvirtd systemctl start libvirtd再次查看状态确认错误是否消失:
systemctl status libvirtd查看详细日志定位问题
若上述方法无效,通过实时日志获取更多上下文:journalctl -u libvirtd -f根据日志中触发错误的具体操作,针对性排查对应模块的配置或依赖问题。
内容的提问来源于stack exchange,提问作者ay san
相关产品推荐
相关产品推荐

