保存QEMU虚拟机并不像点击“保存”按钮那样简单,核心思路是:保存虚拟机镜像文件与配置文件,并掌握快照(Snapshot)与导出(Export)两种主流方案,前者用于日常备份,后者用于迁移或分发。
QEMU虚拟机保存的核心逻辑
QEMU虚拟机由两个核心部分构成:磁盘镜像文件(如qcow2格式)和虚拟机配置(内存、CPU、启动参数等),保存虚拟机,本质上就是完整保留这两部分,但QEMU本身没有图形界面,许多用户是在命令行或通过 virt-manager 等工具操作,因此保存方式也因使用场景而异。
如果你只是临时关机,那么直接使用 virsh shutdown 或正常关机即可,配置文件与磁盘数据已经落盘,不需要额外操作,但如果你需要“保存当前运行状态”或者“备份整个虚拟机”,则必须掌握以下专业方法。
如何保存正在运行的QEMU虚拟机状态
使用 QEMU Monitor 保存内存状态
当虚拟机运行到关键节点,你想暂停并保存完整状态(包括内存中的数据和CPU寄存器),可以使用 QEMU 的 savevm 功能,操作步骤如下:
- 进入QEMU监视器:在运行虚拟机的终端按下
Ctrl + Alt + 2,或通过-monitor stdio参数打开。 - 输入命令
savevm <快照名称>,savevm before-update。 - 系统会创建一个包含磁盘状态和内存状态的完整快照文件,默认与磁盘镜像同目录。
加载该状态时,在启动QEMU时添加参数 -loadvm <快照名称>,虚拟机即可恢复到保存时刻,这种方式的优点在于不需要关闭虚拟机,适合测试场景或暂停长时间任务。
结合 libvirt 管理虚拟机快照
如果你使用 libvirt 工具集管理QEMU虚拟机,保存状态更简单。virsh snapshot-create-as 命令可以同时保存内存与磁盘状态:
virsh snapshot-create-as <虚拟机名称> --description "升级前备份" --atomic

该命令会自动创建磁盘快照与内存快照,恢复使用:
virsh snapshot-revert <虚拟机名称> <快照名称>
行业共识认为,快照并不能替代完整备份,因为快照依赖原始磁盘文件,一旦原始文件损坏,快照也会连带失效,所以日常保存虚拟机,仍需要做镜像文件级别的备份。
如何完整保存QEMU虚拟机镜像与配置文件
查找并备份磁盘镜像文件
QEMU默认使用 qcow2格式,镜像文件通常存储在:
- 自定义路径:启动命令中的
-drive file=/path/to/disk.qcow2 - 默认路径:当前工作目录或 libvirt 的
/var/lib/libvirt/images/
备份命令直接使用 cp即可:
cp /var/lib/libvirt/images/ubuntu.qcow2 /backup/ubuntu.qcow2
但在线复制一个正在运行的qcow2镜像可能产生不一致状态,推荐先关闭虚拟机,再做文件级备份,如果无法停机,可以使用 qemu-img 自带的快照合并功能:
qemu-img create -f qcow2 -b ubuntu.qcow2 ubuntu_snapshot.qcow2
然后对 ubuntu_snapshot.qcow2 进行备份,这个命令不会锁定原镜像,适合在线备份场景。
导出虚拟机配置文件
如果你通过命令行手动启动QEMU,配置信息就是那条复杂的启动命令。建议将启动命令保存为shell脚本,并注释每一项参数,
#!/bin/bash qemu-system-x86_64 -name ubuntu-server -m 2048 -smp 2 -drive file=/backup/ubuntu.qcow2,format=qcow2 -netdev user,id=net0 -device e1000,netdev=net0
如果你的QEMU虚拟机由 virt-manager 创建,配置保存在:
/etc/libvirt/qemu/<虚拟机名称>.xml
导出该XML文件:
virsh dumpxml ubuntu-server > ubuntu-server.xml
以后恢复时,用 virsh define ubuntu-server.xml 即可重新注册虚拟机,再配合镜像文件,这相当于一次完整的虚拟机移植。

保存QEMU虚拟机的三种场景化方案对比
针对不同需求,推荐的保存方式差异较大,下表整理了三种典型场景:
| 场景 | 保存方案 | 优点 | 缺点 | 适用人群 |
|---|---|---|---|---|
| 日常快速关机 | 正常关机 | 无需额外操作 | 未保存运行时内存数据 | 绝大多数开发测试用户 |
| 备份到另一台电脑 | qemu-img convert -O qcow2 导出 |
镜像独立、可跨平台 | 需要停机或使用在线快照 | 需要迁移虚拟机的用户 |
| 保留精确运行状态 | savevm + 内存快照 |
可恢复至毫秒级状态 | 快照文件体积大 | 数据库升级、软件测试等场景 |
如何使用 qemu-img convert 制作可迁移的保存副本
很多人误以为 cp 复制qcow2就可以迁移虚拟机,但遇到未知大小差异或压缩需求时,直接用 qemu-img convert 更稳妥:
qemu-img convert -f qcow2 -O qcow2 ubuntu.qcow2 ubuntu-backup.qcow2
这条命令会生成一个优化过的副本,如果没有备份好的网络环境,相比在百度谷歌搜索“qemu虚拟机怎么保存”后才临时找命令,提前掌握这个通用命令能避免数据丢失。
保存QEMU虚拟机时的常见错误与避坑
错误快照导致磁盘空间暴涨
假设你反复执行 savevm 而不清理旧快照,qcow2文件会迅速膨胀。必须定期用 virsh snapshot-list 检查并删除无用快照,删除命令:
virsh snapshot-delete <虚拟机名称> <快照名称>
配置文件与镜像文件分离
如果你只备份了配置文件,却忘了备份磁盘镜像,那么恢复时虚拟机无法启动,反过来,只备份镜像,配置文件丢失,那么内存分配、网络设置、设备参数全部丢失。行业专家指出:完整的保存必须包含镜像文件、配置XML(或启动脚本)、以及网络/存储策略描述三部分

。
关于保存QEMU虚拟机的几个高频疑问
QEMU虚拟机的快照和保存有什么区别?
快照是保存某一时刻的磁盘与内存状态,通常依赖于原始镜像文件,创建和恢复速度较快,适合短时间回滚,而“保存”在这里更偏向于完整的备份与导出一份独立的镜像副本,两者不能混为一谈,如果你需要将虚拟机迁移到物理位置不同的另一台服务器,就应该用 qemu-img convert 导出完整副本,而不是只复制快照。
不关闭虚拟机的情况下能保存吗?
可以,较为稳妥的办法是先创建qcow2外部快照,再备份外部快照文件,操作如下:
virsh blockcopy <虚拟机名称> vda /backup/ubuntu-online.qcow2 --wait --pivot
blockcopy 是libvirt提供的在线块复制功能,它能把运行中虚拟机的磁盘实时复制到目标文件,复制完成后自动切换回原设备,此方法适合无法停机的生产环境,但要求宿主机的IO能力足够强。
保存后如何验证备份文件可用?
运行虚拟机的备份环境验证是最直接的方法,在另一台电脑上,用你保存的配置XML和镜像文件启动虚拟机,然后执行 fsck 或 smartctl 检查磁盘一致性,具体命令:
virsh define ubuntu-server.xml virsh start ubuntu-server
如果启动成功并进入系统,说明保存过程可靠,多数情况下,只要镜像文件与配置匹配,恢复过程不会出现大问题。
保存QEMU虚拟机的核心并不在于某个单一命令,而在于理解镜像文件、配置文件和运行状态三者之间的关系,日常开发用正常关机即可保证数据安全,需要精确回滚时用 savevm,跨机器迁移则必须使用 qemu-img convert 或 virsh dumpxml 组合完成,只要形成一套“先导出配置,再备份镜像,最后验证恢复”的流程,你的QEMU虚拟机无论遇到物理故障还是版本升级,都能从容应对。