kvm折腾日记:libvirtd无法启动
libvirtd无法启动的一些错误
目录
随着自己工作的进行,接触到的技术栈也越来越多。给我一个很直观的感受就是,某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了,只有经常会用到的东西才有可能真正记下来。存在很多在特殊情况下有一点用处的技巧,用的不多的技巧可能一个星期就忘了。
想了很久想通过一些手段把这些事情记录下来。也尝试过在书上记笔记,这也只是一时的,书不在手边的时候那些笔记就和没记一样,不是很方便。
很多时候我们遇到了问题,一般情况下都是选择在搜索引擎检索相关内容,这样来的也更快一点,除非真的找不到才会去选择翻书。后来就想到了写博客,博客作为自己的一个笔记平台倒是挺合适的。随时可以查阅,不用随身携带。
同时由于写博客是对外的,既然是对外的就不能随便写,任何人都可以看到。经验对于我来说那就只是经验而已,公布出来说不一定我的一些经验可以帮助到其他的人。遇到和我相同问题时可以少走一些弯路。
既然决定了要写博客,那就只能认真去写。不管写的好不好,尽力就行。千里之行始于足下,一步一个脚印,慢慢来
,写的多了慢慢也会变好的。权当是记录自己的成长的一个过程,等到以后再往回看时,就会发现自己以前原来这么菜😂。
本系列博客所述资料均来自互联网
,并不是本人原创(只有博客是自己写的)。出于热心,本人将自己的所学笔记整理并推出相对应的使用教程,方面其他人学习。为国内的物联网事业发展尽自己的一份绵薄之力,没有为自己谋取私利的想法
。若出现侵权现象,请告知本人,本人会立即停止更新,并删除相应的文章和代码。
libvirtd 无法启动
查看服务状态
libvirt 守护进程不会自动启动。手动启动 libvirt 守护进程也失败。查看日志也没有更多的信息。
cx@legionren7000p-26amr:~$ sudo service libvirtd restart
Job for libvirtd.service failed because the control process exited with error code.
See "systemctl status libvirtd.service" and "journalctl -xeu libvirtd.service" for details.
cx@legionren7000p-26amr:~$ systemctl status libvirtd.service
× libvirtd.service - Virtualization daemon
Loaded: loaded (/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sat 2024-01-13 23:32:33 CST; 3s ago
TriggeredBy: × libvirtd-ro.socket
× libvirtd-admin.socket
× libvirtd.socket
Docs: man:libvirtd(8)
https://libvirt.org
Process: 3440330 ExecStart=/usr/sbin/libvirtd $LIBVIRTD_ARGS (code=exited, status=6)
Main PID: 3440330 (code=exited, status=6)
Tasks: 2 (limit: 32768)
Memory: 48.5M
CPU: 16ms
CGroup: /system.slice/libvirtd.service
├─1555 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/lib/libvirt/libvirt_leaseshelper
└─1557 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/lib/libvirt/libvirt_leaseshelper
1月 13 23:32:33 legionren7000p-26amr systemd[1]: libvirtd.service: Scheduled restart job, restart counter is at 5.
1月 13 23:32:33 legionren7000p-26amr systemd[1]: Stopped Virtualization daemon.
1月 13 23:32:33 legionren7000p-26amr systemd[1]: libvirtd.service: Start request repeated too quickly.
1月 13 23:32:33 legionren7000p-26amr systemd[1]: libvirtd.service: Failed with result 'exit-code'.
1月 13 23:32:33 legionren7000p-26amr systemd[1]: libvirtd.service: Unit process 1555 (dnsmasq) remains running after unit stopped.
1月 13 23:32:33 legionren7000p-26amr systemd[1]: libvirtd.service: Unit process 1557 (dnsmasq) remains running after unit stopped.
1月 13 23:32:33 legionren7000p-26amr systemd[1]: Failed to start Virtualization daemon.
cx@legionren7000p-26amr:~$ journalctl -xeu libvirtd.service
Support: http://www.ubuntu.com/support
libvirtd.service 单元已失败。
结果为“failed”。
1月 13 23:22:19 legionren7000p-26amr systemd[1]: libvirtd.service: Scheduled restart job, restart counter is at 5.
Subject: Automatic restarting of a unit has been scheduled
Defined-By: systemd
Support: http://www.ubuntu.com/support
Automatic restarting of the unit libvirtd.service has been scheduled, as the result for the configured Restart= setting for the unit.
1月 13 23:22:19 legionren7000p-26amr systemd[1]: Stopped Virtualization daemon.
Subject: libvirtd.service 单元已结束停止操作
Defined-By: systemd
Support: http://www.ubuntu.com/support
libvirtd.service 单元已结束停止操作。
1月 13 23:22:19 legionren7000p-26amr systemd[1]: libvirtd.service: Start request repeated too quickly.
1月 13 23:22:19 legionren7000p-26amr systemd[1]: libvirtd.service: Failed with result 'exit-code'.
Subject: Unit failed
Defined-By: systemd
Support: http://www.ubuntu.com/support
The unit libvirtd.service has entered the 'failed' state with result 'exit-code'.
1月 13 23:22:19 legionren7000p-26amr systemd[1]: libvirtd.service: Unit process 1555 (dnsmasq) remains running after unit stopped.
1月 13 23:22:19 legionren7000p-26amr systemd[1]: libvirtd.service: Unit process 1557 (dnsmasq) remains running after unit stopped.
1月 13 23:22:19 legionren7000p-26amr systemd[1]: Failed to start Virtualization daemon.
Subject: libvirtd.service 单元已失败
Defined-By: systemd
Support: http://www.ubuntu.com/support
libvirtd.service 单元已失败。
结果为“failed”。
打开日志
更改 libvirt 的配置文件/etc/libvirt/libvirtd.conf
,将下面这一行的开头 #
删除,启用日志输出。
#log_outputs="3:syslog:libvirtd"
再次执行服务启动的动作,并查看日志。可以看到日志中已经打印出了具体的错误信息。
错误1
提示找不到/etc/pki/CA/cacert.pem
证书。
2024-01-13 18:25:13.604+0000: 807133: info : libvirt version: 8.0.0, package: 1ubuntu7.8 (Lena Voytek <lena.voytek@canonical.com> Wed, 29 Nov 2023 14:52:52 -0700)
2024-01-13 18:25:13.604+0000: 807133: info : hostname: legionren7000p-26amr
2024-01-13 18:25:13.604+0000: 807133: error : virNetTLSContextCheckCertFile:106 : Cannot read CA certificate '/etc/pki/CA/cacert.pem': 没有那个文件或目录
当 libvirt 在 TCP/IP(TLS)
模式下运行时,缺少 cacert.pem
文件就会出现此错误。使用以下方法之一配置 libvirt 守护进程的设置。
1、不要传递--listen
参数(不使用TCP/IP)
修改/etc/default/libvirtd
文件,将LIBVIRTD_ARGS
参数中的-l
或者--listen
去除。
root@legionren7000p-26amr:~# cat /etc/default/libvirtd
# Customizations for the libvirtd.service systemd unit
LIBVIRTD_ARGS=""
# LIBVIRTD_ARGS="--listen"
2、不使用 TLS
若非必须,或者自己都不明白TLS的作用,又或者只是本地使用对数据安全不明感。强烈建议去除TLS验证。
修改 /etc/libvirt/libvirtd.conf
文件。将下面这一行的开头 #
删除。
#listen_tls = 0
3、安装 CA 证书。
配置较为繁琐,这里不做解释,可自行寻找配置方法。或查看本专栏的中的libvirt启用tls连接章节。
错误2
错误信息中指出systemd激活套接字时不允许使用参数–listen。
1月 14 01:36:03 legionren7000p-26amr libvirtd[514519]: 514519: info : libvirt version: 8.0.0, package: 1ubuntu7.8 (Lena Voytek <lena.voytek@canonical.com> Wed, 29 Nov 2023 14:52:52 -0700)
1月 14 01:36:03 legionren7000p-26amr libvirtd[514519]: 514519: info : hostname: legionren7000p-26amr
1月 14 01:36:03 legionren7000p-26amr libvirtd[514519]: 514519: error : daemonSetupNetworking:241 : --listen parameter not permitted with systemd activation sockets, see 'man libvirtd' for further gu>
1月 14 01:36:03 legionren7000p-26amr systemd[1]: libvirtd.service: Main process exited, code=exited, status=6/NOTCONFIGURED
原因在于libvirtd,默认使用了systemd模式,要恢复到传统模式,所有和libvirtd相关的systemd必须被屏蔽。
执行下面的命令,恢复到传统的模式。并重启libvirtd服务。此时问题得到完美解决,tcp可正常连接到守护进程。
cx@legionren7000p-26amr:~$ systemctl mask libvirtd.socket libvirtd-ro.socket libvirtd-admin.socket libvirtd-tls.socket libvirtd-tcp.socket
cx@legionren7000p-26amr:~$ service libvirtd restart
cx@legionren7000p-26amr:~$ virsh -c qemu+tcp://localhost/system list
Id Name State
--------------------
那么本篇博客就到此结束了,这里只是记录了一些我个人的学习笔记,其中存在大量我自己的理解。文中所述不一定是完全正确的,可能有的地方我自己也理解错了。如果有些错的地方,欢迎大家批评指正。如有问题直接在对应的博客评论区指出即可,不需要私聊我。我们交流的内容留下来也有助于其他人查看,说不一定也有其他人遇到了同样的问题呢😂。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)