virsh创建内部快照必须使用qcow2格式且不可加--disk-only参数,因其直接写入原镜像文件、不生成新文件,仅支持qcow2;加--disk-only会强制转为外置快照流程导致报错。

virsh 创建内部快照必须用 qcow2 且不能带 --disk-only
内部快照(internal snapshot)直接写入原始 qcow2 文件中,不生成新文件,所以操作快、占用空间少,但只支持 qcow2 格式,且无法用于 raw 或其他格式磁盘。常见错误是误加 --disk-only 参数——它会强制走外置流程,导致报错或创建出非预期的快照类型。
正确做法是明确指定磁盘为 internal,并加 --atomic 避免部分失败:
virsh snapshot-create-as --domain vm1 --name pre-upgrade --description "before kernel update" --diskspec vda,snapshot=internal --atomic- 执行后,
qemu-img info /var/lib/libvirt/images/vm1.qcow2的输出里会显示snapshots:列表,且无backing file字段 - 若虚拟机正在运行,内部快照会暂停 I/O 短暂时间(毫秒级),但不会关机;若需强一致性,建议先
virsh suspend vm1再创建
virsh 创建外置快照要显式指定 snapshot=external 和目标路径
外置快照(external snapshot)会生成一个新 qcow2 文件作为 overlay,原磁盘变为只读 backing file,适合多磁盘、需要保留原始镜像、或后续要合并的场景。关键点在于:必须指定 --disk-only,且每个磁盘都要用 --diskspec 明确声明路径和模式。
例如对单磁盘虚拟机 vm1 创建外置快照:
一款AI工具,主要用于Codex 通用编排:利用 `update_plan` 与后台 PTY 终端并行运行 `codex exec` 工作进程,适合需要提升相关任务效率的用户。
virsh snapshot-create-as --domain vm1 --name backup-20260928 --disk-only --diskspec vda,snapshot=external,file=/var/lib/libvirt/images/vm1-backup-20260928.qcow2 --atomic- 执行后,
virsh domblklist vm1显示vda的 Source 已指向新快照文件 -
qemu-img info /var/lib/libvirt/images/vm1-backup-20260928.qcow2会显示backing file: /var/lib/libvirt/images/vm1.qcow2 - 如果虚拟机有多个磁盘(如
vda,vdb),必须为每个都写--diskspec,否则--atomic会失败
区分快照类型:看 virsh snapshot-list 的 State 列
同一个虚拟机可混用内/外快照,但类型不可互换。判断当前快照是哪种,不能只看名字,得查 State 字段:
- State 显示
running或shutoff—— 大概率是内部快照(也可能是外置系统快照,需进一步确认) - State 显示
disk-snapshot—— 一定是外置磁盘快照 - 更可靠的方式是:
virsh snapshot-info vm1 snap-name | grep "Disk only",输出yes即为外置 - 或者直接
qemu-img info查目标磁盘文件是否存在backing file字段
还原时要注意:内部快照需先关机,外置快照可热还原但有风险
还原不是“一键回滚”,不同快照类型行为差异很大:
- 内部快照还原:
virsh snapshot-revert vm1 snap-name要求虚拟机处于shutoff状态,否则报错operation failed: cannot revert to internal snapshot while domain is running - 外置快照还原:
virsh snapshot-revert可在运行中执行,但实际是把当前 overlay 指针切回旧 backing file,原 overlay 文件仍存在,需手动清理或合并 - 外置快照还原后,若原 backing file 已被修改(比如你手动改过基础镜像),会导致数据不一致,所以外置快照更适合“临时分支”而非长期备份
- 真正安全的还原方式是:关机 →
virsh snapshot-revert→ 启动,尤其对生产环境
最易被忽略的是磁盘格式校验和快照链管理。哪怕你记住了命令,只要磁盘还是 raw,virsh snapshot-create-as 就永远报错;而外置快照一旦形成多层链(base → snap1 → snap2 → snap3),不及时 virsh blockcommit 合并,IO 性能会逐层衰减。这些不是“高级技巧”,而是日常操作的前置门槛。









