KVM宿主机内核升级注意事项,升级需要重启虚拟机风险
KVM 宿主机升级内核后,通常需要重启宿主机才能生效。
这一重启过程会让宿主机上所有运行中的虚拟机经历类似强制断电再开机的过程,如果没有提前迁移或备份,轻则业务中断,重则数据不一致。
本文按升级前检查、虚拟机迁移、内核升级操作、重启后验证和回滚这几个环节,讲清楚 KVM 宿主机内核升级注意事项,以及如何把重启虚拟机风险降到最低。
升级前先明确重启影响范围
执行升级前,先记录当前内核版本和所有虚拟机的运行状态。
登录宿主机后运行:
uname -r
virsh list --all
第一条命令显示当前内核版本,第二条列出所有虚拟机及状态。
需要重点关注设置了开机自启的虚拟机:
virsh list --autostart
如果宿主机重启,这些虚拟机会自动启动,但依然存在短暂离线窗口。
对于未开启自启的虚拟机,重启后需要手动执行 virsh start <虚拟机名称> 拉起。
另外,升级前要检查宿主机剩余磁盘空间。
内核包通常不大,但安装多个新内核后 /boot 分区可能告急,建议保留至少 1-2 GB 余量。
降低业务中断风险的两种方案
方案一:条件允许时做虚拟机热迁移。
如果 KVM 环境有多台宿主机且共用存储(如 NFS、CEPH),可以使用 virsh migrate --live <虚拟机名称> qemu+ssh://目标宿主机IP/system 将虚拟机在线迁移到其他宿主机,然后再升级当前宿主机内核并重启。
迁移成功后,业务几乎不受影响。
方案二:没有第二台宿主机时,先完整备份再关机。
备份方法:
# 导出虚拟机 XML 配置
virsh dumpxml <虚拟机名称> > /data/vm-backup/<虚拟机名称>.xml
# 对虚拟机磁盘做快照或复制(需先暂停虚拟机,若可接受短暂停机)
virsh snapshot-create-as <虚拟机名称> backup-$(date +%F)
如果虚拟机磁盘是 qcow2 格式,还可以使用 qemu-img create -f qcow2 -b 做差量备份链,但新手建议直接复制磁盘文件,更稳妥。
确认备份完整后,再关闭虚拟机或保持其运行状态进行后续内核升级。
宿主机内核升级操作步骤
不同发行版升级内核命令不同,以下为常见系统示例。
CentOS/RHEL 系列(以 RHEL 8 为例):
# 更新内核相关包
yum update kernel -y
# 查看新内核在本机启动项中的顺序
awk -F\' '/menuentry / {print $2}' /etc/grub2.cfg | head -n 5
# 将最新内核设为默认启动项
sudo grubby --set-default="$(grubby --default-kernel)"
Ubuntu/Debian 系列:
sudo apt update
sudo apt upgrade linux-image-generic -y
Ubuntu 系统升级后通常会自动更新 grub 的默认启动项,但重启前最好执行一次 sudo update-grub 确认新内核已加入启动列表。
确认默认启动项后,再执行 reboot。
不要在有多台关键虚拟机还在运行时直接重启,最好先完成迁移或备份检查。
重启后验证与回滚方法
宿主机重启完成后,先确认内核和 KVM 服务状态:
uname -r
systemctl status libvirtd
如果当前内核与预期不一致,可能是 grub 默认项没有设置好,可用 grubby --info=ALL 或 /boot/grub2/grubenv 检查实际引导内核。
接着检查虚拟机是否恢复。
对于设置了 autostart 的虚拟机:
virsh list --all
确认虚拟机状态为 running,并检查关键业务端口是否可达。
如果某些虚拟机启动失败,优先查看错误信息:
virsh start <虚拟机名称>
journalctl -u libvirtd -n 50
如果升级后出现内核崩溃、驱动不兼容等问题,可以在重启时进入 grub 菜单选择旧内核启动。
只要没有手动删除旧内核,系统会保留旧内核入口。
回滚默认启动项:
sudo grubby --set-default="旧内核完整名称"
Ubuntu 系则在 /boot/grub/grub.cfg 中确认旧内核 menuentry 名称,使用 sudo grub-set-default 指定。
新手最容易踩的三个坑
第一,忽略自动启动虚拟机依赖顺序。 虚拟机 autostart 后默认同时启动,如果业务依赖数据库先启动,前端虚拟机可能因数据库未就绪而启动失败。
建议设置 virsh autostart --disable <虚拟机名称> 关闭部分依赖服务的自启,或使用 systemd 服务管理启动顺序。
第二,升级内核同时删除旧内核。 用 yum install kernel-<新版本> 安装新内核后,不要立即 yum remove 旧内核。
保留至少一个旧内核作为回退点,待新内核稳定运行一周以上再清理。
第三,只备份了系统盘没备份虚拟机磁盘。 内核升级本身不触碰数据盘,但重启导致虚拟机异常关机可能引发文件系统损坏。
升级前最好对每个虚拟机磁盘执行 qemu-img check,并确保备份文件完整可读。
如果你正在处理 KVM 宿主机内核升级相关事项,建议先在测试环境完整演练一遍迁移、升级、重启和回滚流程,再应用到生产环境。
对于无法停机的业务,优先考虑热迁移或多节点负载均衡方案,尽量把重启虚拟机风险控制在可接受范围内。