Linux怎么平滑重启libvirtd守护进程而不影响正在运行的业务虚拟机

雨墨大大_6048

雨墨大大_6048

2026-10-22

812人浏览

原创

systemctl restart libvirtd 会强制终止所有 qemu 进程,导致虚拟机瞬间断电,因其向 libvirtd 发送 sigterm 并触发默认 killmode=control-group 的清理逻辑;而 systemctl reload libvirtd 仅重载配置,不中断 qemu 子进程,虚拟机持续运行。

linux怎么平滑重启libvirtd守护进程而不影响正在运行的业务虚拟机

可以平滑重启 libvirtd,但必须用 systemctl reload libvirtd,而不是 restart —— 后者会强制终止所有 QEMU 进程,导致虚拟机瞬间断电。

为什么 systemctl restart libvirtd 会杀掉虚拟机

libvirtd 是管理进程,不是虚拟机本身;QEMU 进程由 libvirtd 启动后即独立运行。但 restart 会向 libvirtd 发送 SIGTERM,触发其默认的“清理子进程”逻辑(尤其在未禁用 KillMode 的 systemd 配置下),最终调用 kill -9 强杀所有它 spawn 过的 QEMU 进程。

  • 现象:ps aux | grep qemu 突然清空,virsh list 显示全空,宿主机 dmesg 出现 qemu-kvm[PID]: segfault 或 Process 'qemu' killed
  • 根本原因:systemd 默认 KillMode=control-group,且 libvirtd 未显式设置 KillMode=process
  • 影响范围:所有通过 libvirt 启动的 KVM 虚拟机(包括 virsh start、virt-install、OpenStack nova 启动的实例)

systemctl reload libvirtd 的实际行为

reload 不重启主进程,只重新加载配置(如 /etc/libvirt/libvirtd.conf、/etc/libvirt/qemu.conf 中的监听地址、认证方式、日志级别等),QEMU 子进程完全不受影响,虚拟机继续运行,网络和磁盘 I/O 持续正常。

Obsidian (Linux)
Obsidian (Linux)

操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。

下载
  • 适用场景:修改了 listen_tls = 1、auth_unix_rw = "polkit"、log_filters = "1:remote 2:libvirt" 等运行时可重载项
  • 不生效的配置:涉及进程模型变更的(如 max_clients 调整需 restart)、存储池或网络定义变更(这些是 XML 对象,reload 不触碰)
  • 验证是否成功:sudo journalctl -u libvirtd --since "1 minute ago" | grep "Reloading config"

哪些操作看似安全实则危险

别被表象迷惑 —— 有些命令看起来只是“重载”,实际底层仍会中断连接或重建状态。

  • kill -SIGHUP $(pgrep libvirtd):旧版 libvirt(
  • systemctl force-reload libvirtd:等价于先 stop 再 start,和 restart 一样危险
  • 修改 /etc/libvirt/qemu.conf 后执行 virsh shutdown 再 start:虽然虚拟机没丢,但业务有停机窗口,不算“平滑”
  • 直接 systemctl restart libvirtd + 依赖 auto_start=1:恢复的是关机态,不是保存态;虚拟机不会自动 resume,而是 cold boot

真正需要重启时的最小中断方案

如果必须 restart(例如升级 libvirt 包、启用 TLS 证书、修复 auth 模块崩溃),可用 libvirt-guests 配合手动保存来压降影响。

  • 提前启用自动保存:echo "ON_SHUTDOWN=suspend" >> /etc/sysconfig/libvirt-guests(RHEL/CentOS)或对应发行版配置文件
  • 执行前手动触发一次保存:virsh list --state-running --name | xargs -r -n1 sh -c 'virsh managedsave "$1" --verbose' _
  • 确认保存完成:ls /var/lib/libvirt/qemu/save/ 有对应 .save 文件,且 virsh list 仍显示 running
  • 再执行 systemctl restart libvirtd,之后虚拟机会自动从保存状态 resume(前提是 auto_start=1 且 managedsave 文件未被清理)

注意:managedsave 不是快照,不保留磁盘状态;若虚拟机正在写入关键数据,仍可能因内存状态恢复滞后导致应用层不一致 —— 这类场景应协调业务侧做可控停机。

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4150

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3513

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2733

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6670

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

6322

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3653

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

3145

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3379

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习