跳转到内容

备份模式:snapshot、suspend 与 stop ​

配置备份任务与保留策略 里已经给过一张对比表,讲了 snapshot 模式依赖 guest agent 才能保证一致性。这篇往下挖一层:同一个模式名字,在虚拟机和容器上是完全不同的两套实现,不知道这一点,选错了容易在关键时刻踩坑。

开始之前 ​

先读完 配置备份任务与保留策略,了解 vzdump 的基本概念和三种模式的表面差异。这篇假设你已经知道那张表。

虚拟机(QEMU)的三种模式 ​

模式怎么做的代价
Stop先正常关机,再由后台 QEMU 进程读盘打包,打包开始后虚拟机就恢复运行一致性最高,代价是有一小段停机
Suspend暂停虚拟机,然后走 snapshot 模式的流程官方文档原话是"为兼容性保留"——停机比 snapshot 更长,一致性也不必然更好
Snapshot(默认)虚拟机不停运行,直接复制磁盘数据块停机最短,代价是有轻微的不一致风险

Suspend 模式基本没有存在的理由

它停机比 snapshot 长,一致性却不见得更好。除非你在维护某个依赖旧行为的老流程,否则直接用 snapshot。

虚拟机的 snapshot 模式不要求底层存储支持快照——它是 QEMU 在运行时直接完成的,跟磁盘是 raw 还是 qcow2、存储是不是 LVM-Thin 都没关系。装了 QEMU Guest Agent 且开着(agent: 1)的话,PVE 会在拍快照前后调用客户机的 guest-fsfreeze-freeze / guest-fsfreeze-thaw,这是 snapshot 模式一致性的真正来源,详见 backup-jobs.md 的警示块。

容器(LXC)的三种模式——原理完全不同 ​

容器没有 QEMU 这层,三个同名模式换了完全不同的实现方式。

模式怎么做的代价
Stop容器整段时间保持停止状态,备份完再启动停机时间可能很长,取决于数据量
Suspend用 rsync 先把容器数据拷到临时目录,再暂停容器、rsync 一次增量、恢复容器停机很短,但需要额外磁盘空间存这份临时拷贝
Snapshot暂停容器 → 依赖底层存储自身的快照能力打一个临时快照 → 把快照内容归档成 tar → 删除临时快照依赖存储支持快照,否则直接失败

容器的 snapshot 模式对存储有硬性要求

和虚拟机不同,容器的 snapshot 模式必须建立在支持快照的存储上(ZFS、LVM-Thin 等)。如果某个挂载点落在不支持快照的存储上(比如普通目录存储、bind mount),备份这台容器时要么整个失败,要么该挂载点在挂载点选项里勾了 backup=no 被直接跳过。检查报错信息里点名的具体挂载点,再决定换存储还是排除它。

Suspend 模式的临时拷贝放哪里,速度差很多

如果容器本身在本地存储,但备份目标是 NFS/CIFS 这类网络存储,把 rsync 的临时目录(--tmpdir)指到本地盘,官方文档说这能带来"成倍"的性能提升——因为第一次全量 rsync 不用经过网络。

两个容易被忽略的选项 ​

Backup fleecing(仅虚拟机,默认关闭) ​

不开 fleecing 时,snapshot 模式靠一个"写前拷贝"过滤器工作:客户机的写操作必须等旧数据先发到备份目标之后才能完成,也就是说客户机的写入速度被备份目标的速度限制住了——目标是网络存储或速度较慢的 PBS 时,客户机可能明显变卡,极端情况下还会卡死。

开了 fleecing 之后,旧数据改成写到一块本地的临时镜像里,不用等备份目标。代价是需要额外的本地存储空间。

sh
# 宿主机 shell:给单次备份临时开启 fleecing
vzdump 123 --fleecing enabled=1,storage=local-lvm

也可以在任务的 Advanced 标签页按客户机配置,或在 vzdump.conf 里全节点开启。fleecing 存储建议选精简置备、支持 discard 的本地存储,因为已经发送完的部分会被主动丢弃(discard)来省空间;如果存储不是精简置备,会一次性预留原始磁盘的全部容量。

受保护备份(Protected backup) ​

某份备份打上"受保护"标记后,在 PVE 的 Web UI、CLI、API 里都删不掉,prune 也会跳过它、不计入保留份数。

受保护不是文件系统层面的锁

官方文档写明"这是 Proxmox VE 强制的,不是文件系统强制的"——有存储直接写权限的人,依然能在文件系统层面手动删掉它。它防的是"点错按钮",不是防蓄意破坏。

设置方式:vzdump 的 protected: <boolean> 选项(必须同时指定 storage)。文件型存储用一个 <备份名>.protected 哨兵文件实现;Proxmox Backup Server 从 2.1 起在服务端直接处理。存储选项 max-protected-backups 能限制每台客户机最多能有几份受保护备份(-1 为不限,默认拥有 Datastore.Allocate 权限的用户不限,其他用户上限 5 份)。

检查结果 ​

  1. 容器备份任务的日志里,snapshot 模式应该能看到创建临时快照、归档、删除快照的过程;suspend 模式能看到两次 rsync 的记录。
  2. 开了 fleecing 的任务,日志或 Advanced 配置里能看到 fleecing 相关的存储分配记录。
  3. 打了受保护标记的备份,在 Web UI 的删除按钮应该是灰的,Run now 触发的 prune 不会把它算进保留份数。

常见问题 ​

容器备份很慢、占用空间也大。 大概率在用 suspend 模式,rsync 需要额外空间存临时拷贝。如果底层存储支持快照,换成 snapshot 模式通常更快也更省空间。

容器备份报错,提示某个挂载点无法创建快照。 检查报错里点名的挂载点用的是哪种存储;不支持快照就换存储,或者在这个挂载点的选项里勾 backup=no 排除它——但要清楚这意味着这部分数据不会被备份到。

虚拟机用了 snapshot 模式,但客户机变得很卡。 检查备份目标的写入速度是不是瓶颈,考虑开启 fleecing。

参考资料 ​

Proxmox VE 非官方中文使用指南,与 Proxmox Server Solutions GmbH 无隶属关系。