Linux虚拟机快照与还原核心取决于虚拟化平台:KVM仅支持qcow2格式,需用virsh创建并关机还原;VirtualBox原生支持无需格式转换;VMware完全兼容VMDK。

Linux 环境下实现虚拟机快照与还原,核心取决于所用的虚拟化平台。主流方案是 KVM(通过 libvirt/virsh)、VirtualBox 和 VMware,三者机制不同但目标一致:在任意时间点保存状态,并可精准回退。关键不是“能不能”,而是“怎么选对方式、避开常见坑”。
确认虚拟化平台与存储格式
快照功能高度依赖底层存储格式和管理工具:
-
KVM:仅支持
qcow2格式磁盘的快照(raw不支持)。可用qemu-img info /path/to/disk.qcow2验证;若为raw,需先转换:qemu-img convert -f raw -O qcow2 old.img new.qcow2,再更新虚拟机 XML 配置指向新镜像。 - VirtualBox:原生支持快照,无需转换格式,但建议使用 VDI 或 VHD 格式以获得最佳兼容性。
- VMware Workstation/Player:对 VMDK 格式完全支持,图形界面或命令行均可操作,无需额外准备。
创建快照:兼顾一致性与可用性
快照本身很快,但数据一致性才是重点。不同场景推荐不同做法:
-
关机状态下创建:最安全,适用于系统升级、配置变更前。执行
virsh shutdown vmname后再virsh snapshot-create-as --domain vmname --name pre-update --description "before kernel 6.12"。 -
运行中创建(在线快照):KVM 支持,但需注意:
virsh snapshot-create-as --domain vmname --disk-only --name live-snap仅保存磁盘状态;如需同时保存内存(热还原),必须加--memspec参数并指定内存文件路径。 -
VirtualBox 命令行示例:
VBoxManage snapshot "Ubuntu-Dev" take "pre-docker-install",全程无需停机,但避免大写入操作。
还原快照:看清状态限制与依赖关系
还原失败多数因忽略两个硬性条件:
-
状态匹配:普通磁盘快照(非
--memspec)只能在虚拟机关机后还原:virsh snapshot-revert vmname snap-name。若报错domain is running,先virsh shutdown再执行。 -
快照树结构:若目标快照下方有子快照(即“有孩子”),直接还原会失败。可先删子快照:
virsh snapshot-delete vmname child-snap,或强制删除整棵分支:virsh snapshot-delete vmname target-snap --children。 -
VirtualBox 还原:
VBoxManage snapshot "CentOS7" restore "pre-patch",执行后虚拟机会自动关机并恢复,完成后需手动启动。
清理与维护:避免性能衰减和空间浪费
快照不是“设了就忘”,长期积累会拖慢 I/O 并占用空间:
-
查链深:运行
qemu-img info --backing-chain disk.qcow2,若显示超过 3 层嵌套(backing file 嵌套过深),读写延迟明显上升。 -
删快照:
virsh snapshot-delete vmname snap-name仅移除该节点及其增量层;virsh snapshot-delete-all vmname清空全部(慎用)。 -
扁平化合并:如需彻底释放空间并简化结构,关机后执行
qemu-img commit disk.qcow2,将所有增量写回基镜像,再删掉旧快照元数据。
不复杂但容易忽略——快照本质是 COW 增量层,不是完整副本。选对格式、看清状态、定期清理,才能真正把“一键回滚”变成可靠的安全网。


















