跳转到内容

配置备份任务与保留策略 ​

PVE 的备份叫 vzdump,它把一台客户机打包成一个文件。这篇把备份任务配起来,并解释那几个容易选错的选项。

第一步:确定备份存到哪 ​

不要备份到 local

默认的 local 存储在系统盘上。把备份放在那里,系统盘坏了备份和配置一起没,等于白做。

备份的第一要求是和源数据不在同一个故障域。

按推荐程度排序:

目标优点代价
Proxmox Backup Server增量、去重、校验,空间效率最高要额外一台机器(或虚拟机 + 独立存储)
另一台机器的 NFS 共享简单,PVE 原生支持全量备份,占空间
本机的独立数据盘最省事同一台机器,只防盘坏不防机器坏
外接 USB 硬盘便宜,可离线保存要手动插拔,容易忘

挂载 NFS 存储:数据中心 → 存储 → 添加 → NFS,填服务器地址和导出路径,内容类型勾 VZDump backup file。

至少做到「不在同一块盘」,目标是「不在同一台机器」

条件有限时,先做到备份在另一块物理盘上——这已经能挡住最常见的单盘故障。但要清楚这只是过渡方案,真正的目标是异机甚至异地。

第二步:理解三种备份模式 ​

这是最需要想清楚的选项。

模式客户机状态数据一致性停机时间
Snapshot一直运行取决于有没有 guest agent几乎没有
Suspend暂停 → 备份 → 恢复较好备份全程暂停
Stop关机 → 备份 → 开机最好备份全程关机

Snapshot 模式的一致性取决于 guest agent

没装 QEMU Guest Agent 时,snapshot 模式相当于在运行中直接拍一张磁盘照片——等同于客户机突然断电。恢复出来的系统会像经历了一次非正常关机,文件系统可能需要修复,正在写入的数据库可能损坏。

装了 agent 时,PVE 会先让客户机把缓存刷盘并冻结文件系统,拍完再解冻。这才是 snapshot 模式该有的样子。

结论:用 snapshot 模式的前提是客户机装了 guest agent。 见 VirtIO 驱动与 QEMU Guest Agent。

实践建议:

  • 绝大多数客户机:Snapshot + guest agent。
  • 跑数据库且要求严格一致:Stop 模式,或者在客户机内部做应用级备份(mysqldump 之类)再做 vzdump。
  • 不重要、可以随时停的:Stop 模式最省心。

第三步:创建备份任务 ​

数据中心 → 备份 → 添加:

字段建议
Node单机选你的节点
Storage第一步准备的备份存储
Schedule见下文
Selection modeAll(全选)或手动勾选
Send email to填你的邮箱
Email notification见下文
CompressionZSTD(快且压缩率好)
Mode见上一节

Schedule 怎么填 ​

用的是类似 systemd timer 的语法:

text
02:30                    每天 02:30
mon..fri 02:30           工作日 02:30
sat 03:00                每周六 03:00
*/6:00                   每 6 小时

别让所有备份挤在同一时刻

多个备份任务同时跑会让 IO 打满,客户机卡顿。错开时间,或者用一个任务备份多台。

Selection mode 选 All 的好处 ​

选 All 表示「备份所有客户机」。以后新建的客户机会自动被纳入备份。

手动勾选的问题是:三个月后你建了一台新的重要虚拟机,忘了加进备份任务,直到出事才发现。

想排除某几台,用 All 配合 Exclude 列表,而不是用手动勾选。

Email notification ​

  • Always:每次备份都发邮件。开始时建议用这个,能确认备份真的在跑。
  • On failure only:只在失败时发。前提是你确认邮件真的能发出去,见第一次登录。

「没收到失败邮件」不等于「备份成功」

如果邮件根本发不出去,你会永远收不到失败通知,然后以为一切正常。先验证邮件通道可用,再改成 On failure only。

第四步:配置保留策略 ​

在备份任务的 Retention 标签页,或者在存储的配置里。

PVE 用的是分级保留:

选项含义
Keep Last保留最近 N 份,不管时间
Keep Daily保留最近 N 天,每天一份
Keep Weekly保留最近 N 周,每周一份
Keep Monthly保留最近 N 月,每月一份
Keep Yearly保留最近 N 年,每年一份

一个适合家庭/小团队的起点:

text
Keep Daily:   7
Keep Weekly:  4
Keep Monthly: 3

这样你有:最近一周每天一份、最近一个月每周一份、最近三个月每月一份。总共约 14 份。

为什么要保留这么久

因为不是所有问题都能立刻发现。数据被误删、配置被改坏、文件被静默损坏,可能几周后才察觉。只保留最近 3 天的话,那时候已经来不及了。

勒索软件尤其如此——它可能潜伏一段时间再发作。

先算空间够不够

全量备份的存储占用 = 单份大小 × 保留份数。四台各 20 GB 的虚拟机、保留 14 份,就是 1 TB 出头(ZSTD 压缩后会少一些,但要按最坏情况算)。

空间不够时的正确做法是用 PBS 做增量去重,或者减少保留份数,不是把备份关掉。

第五步:跑一次并确认 ​

不要等定时任务。选中任务点 Run now。

看任务日志(数据中心 → 任务 或点任务的 Logs):

text
INFO: Starting Backup of VM 100 (qemu)
INFO: creating vzdump archive '/mnt/backup/dump/vzdump-qemu-100-....vma.zst'
INFO: Backup job finished successfully

关键是最后那行 finished successfully。

日志里出现 "guest-fsfreeze" 是好事

snapshot 模式下,日志里能看到类似 issuing guest-agent 'fs-freeze' command 的行,说明 agent 在工作、备份拿到了一致性冻结。看不到这行,回头检查 agent。

命令行 ​

sh
# 手动备份一台
vzdump <vmid> --storage <存储名> --mode snapshot --compress zstd

# 备份所有
vzdump --all --storage <存储名> --mode snapshot

# 看备份列表
pvesm list <存储名> --content backup

备份任务的定义在 /etc/pve/jobs.cfg。

别忘了宿主机自己 ​

vzdump 备份的是客户机。宿主机的配置(存储定义、网络、用户、防火墙规则、客户机配置文件)在 /etc/pve 里,不在任何客户机备份中。

宿主机重装后,如果 /etc/pve 没备份,所有客户机定义都要重建(虽然磁盘还在)。

一个简单的做法是定期归档它:

sh
tar czf /mnt/backup/pve-etc-$(date +%F).tar.gz /etc/pve /etc/network/interfaces /etc/hosts

这个归档里有敏感信息

/etc/pve 包含集群证书、用户配置和 API Token 的相关数据。这个文件要和你的其他敏感备份同等对待,不要随手扔在共享目录里。

完整的宿主机备份方案会在本章后续文章展开。

检查结果 ​

  1. 数据中心 → 备份 里有任务,且 Schedule 正确。
  2. 手动 Run now 一次,任务日志 finished successfully。
  3. pvesm list <备份存储> --content backup 能看到备份文件。
  4. 备份存储所在的物理位置,不是客户机磁盘所在的那块盘。
  5. 收到了备份完成的邮件(或者你已经知道邮件发不出去,并打算解决)。

五项都过之后,立刻去做恢复演练。在恢复成功之前,你还不能说备份做好了。

延伸阅读 ​

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