您将搭建什么
BackupZit 备份 Proxmox VE 的虚拟机(QEMU)和容器(LXC),无需在客户机内安装任何东西。每个 Proxmox 节点上运行一个小型代理,为每个客户机创建临时快照,读取其磁盘并保存到您选择的存储。Web 控制台负责调度作业、保存历史记录并执行还原。
Proxmox VE 也有自己的备份工具:vzdump 和 Proxmox Backup Server。如果您只使用 Proxmox,它们是很好的免费选择。当您希望用一个控制台同时管理 Proxmox 以及 Windows 和 Linux 服务器、VMware、Hyper-V、数据库和 Microsoft 365,或者需要经过启动测试的备份、跨集群副本等功能时,BackupZit 就值得一试。
准备条件
- 一个或多个运行 Proxmox VE 7、8 或 9 的节点(基于 Debian,因此适用代理的 Debian 软件包)。
- BackupZit 控制台的运行位置:一台 2 vCPU、2–4 GB 内存、16–20 GB 磁盘的小型 Linux 虚拟机。控制台本身不存储备份数据,因此可以作为虚拟机运行在同一集群中。
- Proxmox 节点之外的备份存储——例如通过 SFTP 访问的 Linux 服务器或 NAS、SMB 共享、S3 兼容存储桶,或 BackupZit 加固存储库(hardened repository)。代理直接写入其中。
- 网络:代理通过 TCP 8443 端口连接控制台。
第 1 步 — 安装控制台
在 Proxmox 上最快的方式是使用下载页面上现成的 appliance 镜像 backupzit-appliance.qcow2(Debian、PostgreSQL 和控制台均已配置好):
- 创建一台不带磁盘的虚拟机:2 vCPU、2–4 GB 内存、VirtIO 网络。
- 将
backupzit-appliance.qcow2复制到节点,并导入为虚拟机磁盘(替换<vmid>):qm importdisk <vmid> backupzit-appliance.qcow2 local-lvm - 将导入的磁盘以 SCSI 方式挂载,设为启动盘,并在虚拟机选项中启用 QEMU guest agent。
- 启动虚拟机。屏幕上会显示 Web 控制台地址和用户
admin的初始密码。打开https://<地址>:8443,登录并修改密码。
在虚拟机自身的屏幕上可以用 bzadmin 登录,设置静态地址、服务器名称和时区(appliance 以 UTC 启动,计划任务按控制台时区运行)。想用现有的 Debian、Ubuntu、AlmaLinux 或 Rocky Linux 服务器?下载页面上的一行安装脚本可以完成同样的工作。
第 2 步 — 添加存储目标
在控制台中打开存储并添加一个目标。Proxmox 备份的常见选择:
| 类型 | 适用场景 |
|---|---|
| SFTP | 任何带 SSH 的 Linux 服务器或 NAS;服务器的主机密钥会被固定。 |
| SMB 共享 | Windows 文件服务器、Synology 或 QNAP NAS(SMB 2/3)。 |
| S3 兼容 | 异地副本:AWS S3、Wasabi、Backblaze B2、MinIO、Ceph;配合 Object Lock 可不可变。 |
| 加固存储库 | 运行 backupzit-repo 的 Linux 服务器:在不可变期结束前备份无法删除。 |
保持加密备份(AES-256)开启(默认):所有数据在离开节点之前都会在节点上用 AES-256-GCM 加密。控制台随后会显示恢复密钥——打印恢复页,或将密钥保存在密码管理器中,与备份分开存放。有了密钥、存储位置及其凭据,即使控制台丢失也能还原;没有密钥,任何人都无法读取备份。
第 3 步 — 在每个节点上安装代理
- 在控制台中打开Agent,点击创建注册令牌。您会获得一个注册码(
BZ1-…),有效期 7 天,可用于任意数量的机器。 - 从 Agent 页面下载 Linux 代理 — Debian / Ubuntu 软件包到节点并运行:
apt install ./backupzit-agent_*.deb backupzit-agent enroll --code "BZ1-..." systemctl enable --now backupzit-agent - 一分钟内,节点会出现在 Agent 页面上,并带有 Proxmox VE · N guests 标记。
代理使用节点自身的工具(qm、pct、pvesm、LVM、ZFS、Ceph)。控制台中不保存任何 Proxmox API 令牌或 root 密码。在集群中,请在每个节点上安装代理。
第 4 步 — 创建备份作业
- 打开备份作业,创建作业并选择节点的代理。
- 选择虚拟机(Proxmox VE、Hyper-V、VMware),然后选择主机上的所有虚拟机(及容器)——之后创建的客户机会自动包含——或勾选单个客户机。
- 选择第 2 步中的存储目标。
- 设置计划,例如每个工作日 22:00。作业也可以每 15 分钟到 12 小时重复一次、每月运行一次,或在另一个作业之后启动。
- 设置保留策略。例如:3 个最新、7 个每日、4 个每周、6 个每月,约保留半年历史和约 20 个还原点。
每次运行时会发生什么:
- 创建一个临时 Proxmox 快照(
backupzit_…);客户机继续运行。 - 每个磁盘以 1 MiB 块从快照中读取。空块不存储,已在存储库中的块不会再次上传——首次备份之后,只有变化的数据通过网络传输。但每个备份仍是一个完整的还原点。
- 删除快照。客户机的配置(CPU、内存、网络、磁盘)随备份一起保存。
由于未变化的数据只存储一次,长期保留几乎不额外占用空间。
哪些磁盘可以在客户机运行时备份
| Proxmox 存储 | 运行中客户机的备份 |
|---|---|
LVM-thin(local-lvm) | 可以,基于快照 |
| ZFS(虚拟机磁盘 / zvol) | 可以,基于快照 |
| Ceph RBD | 可以,基于快照 |
| 目录、NFS、CIFS 上的 qcow2 | 可以,基于快照 |
| 目录、NFS、CIFS 上的 raw;厚置备 LVM | 不可以——请停止客户机或迁移磁盘 |
已停止的客户机在以上所有存储上都可以备份。标记为 Backup: no(backup=0)的磁盘、直通的物理磁盘和 bind mount 会被跳过并给出警告。
第 5 步 — 应用一致性备份
如果虚拟机内运行 QEMU guest agent 并在其选项中启用,Proxmox 会在快照时冻结虚拟机的文件系统,使数据库和其他应用处于干净状态。没有它,备份是崩溃一致性的——就像断电后一样。
在 Debian 或 Ubuntu 虚拟机中:
apt install qemu-guest-agent
systemctl enable --now qemu-guest-agent
在 Windows 虚拟机中安装 VirtIO guest tools。然后在节点上为该虚拟机启用代理(在虚拟机下次完全关闭并重新启动后生效):
qm set <vmid> --agent enabled=1
每次备份运行的页面会按客户机显示读取了哪些磁盘以及客户机是如何捕获的。
第 6 步 — 保留异地副本(3-2-1)
3-2-1 规则:数据保留三份,存放在两种不同介质上,其中一份在异地。添加第二个类型为备份副本的作业,以 Proxmox 作业为源,以异地目标为目的地,例如带 Object Lock 的 S3 存储桶或另一栋楼里的加固存储库。
- 代理复制现有备份;不会再次读取虚拟机。
- 只发送目标中尚不存在的数据,并使用目标的密钥加密。
- 默认在源作业每次备份后运行副本;也可以使用任意计划,例如线路较慢时每晚一次。
- 副本有自己的保留策略,例如 NAS 上保留 7 个每日、云端保留 12 个每月。
从副本还原虚拟机与从原始备份还原相同——整台虚拟机、单个文件和即时恢复。关于不可变副本的更多信息,请参阅勒索软件防护。
第 7 步 — 证明备份可以启动
块可读并不能证明虚拟机仍能启动。在设置 → 还原测试中开启 Proxmox 虚拟机备份的启动测试。还原测试会在作业所在节点上,依次直接从备份启动最新备份中的每台虚拟机,使用新 ID 并断开网卡,以免与原虚拟机冲突——随后将其删除。
- 虚拟机的 QEMU guest agent 及时响应,即操作系统已启动,则测试通过。没有 guest agent 的虚拟机如果持续运行一分钟即通过,并显示为“运行中”而非“已启动”。
- 测试期间节点需要有可再运行一台虚拟机的空闲内存。
- 此外,数据检查(默认每月一次)会读取所有已存储的数据并按校验和进行验证,以便在需要备份之前发现存储本身的损坏。
还原
打开一次备份运行(从作业页面或活动中),选择还原虚拟机或容器。
整台虚拟机或容器
- 可还原到任何装有代理的节点——包括另一个集群的节点。
- 作为新虚拟机,使用下一个可用 ID(默认),原虚拟机继续运行;副本获得新的 MAC 地址。或在删除客户机后使用原 ID,也可选择替换现有客户机。
- 选择磁盘的名称和存储,以及还原后是否启动客户机。
- 每次还原都会为虚拟机分配新的生成 ID(
vmgenid),使 Windows 域控制器能够安全地识别回滚。
即时恢复:虚拟机几秒钟内运行
普通还原所需时间与复制磁盘相同。使用即时从备份运行时,代理以只读方式从备份提供磁盘,并启动一台新虚拟机,其写入进入本地覆盖层。确认无误后,完成会在虚拟机继续运行的同时把磁盘迁移到所选存储(qm disk move);丢弃虚拟机会删除虚拟机及其更改。虚拟机的速度取决于备份存储,因此本地磁盘或快速网络共享上的存储库效果最佳。即时恢复适用于虚拟机,不适用于容器。
单个文件
在备份运行的客户机表中点击浏览文件。控制台直接从备份读取磁盘——无需先还原——可浏览 NTFS、ext2/3/4 和 XFS,包括 LVM 内部。下载文件(多个文件打包为 ZIP),或还原到任意代理上的文件夹。在控制台中浏览需要备份位于网络存储上(SFTP、S3、SMB、Azure 或加固存储库)。
为最重要的客户机保留副本
在作业的高级中,保留虚拟机副本会在每次备份后,在另一个节点或集群上保持每个客户机的一份已停止副本为最新。只写入变化的块——通常每次备份只需几秒钟。如果客户机丢失,启动副本会用最近一次备份的数据运行它,无需还原。
使用命令行
不使用控制台也能完成所有操作,例如在灾难后重建节点:
backupzit-agent pve list
backupzit-agent pve show --repo ... latest
backupzit-agent pve restore --repo ... --vmid 100 --new-vmid -1 --storage local-lvm --start latest
备份 Proxmox 主机本身
虚拟机和容器只是节点的一半:存储定义、网络、用户、防火墙、证书以及每台虚拟机和容器的设置都在节点的配置中。在节点的代理上用普通的文件和文件夹作业备份它,例如每天一次,路径为 /etc(包含 /etc/pve、网络和 /etc/hosts)和 /var/lib/pve-cluster(配置数据库 config.db)。要在节点运行时得到完全一致的数据库副本,请把下面的命令添加为备份前命令,并同时备份 /root/pve-config.db:
# one-time: apt install sqlite3
sqlite3 /var/lib/pve-cluster/config.db ".backup /root/pve-config.db"
重建故障节点:以相同的主机名和地址安装相同版本的 Proxmox VE,安装代理,还原 /etc/network/interfaces 和 /etc/hosts,停止集群服务(systemctl stop pve-cluster),把 config.db 还原到 /var/lib/pve-cluster,重新启动服务,然后还原虚拟机和容器。在集群中,请把重新安装的节点重新加入集群,而不是还原 config.db。
需要了解的限制
- 支持 Proxmox VE 7、8 和 9。不支持 XCP-ng。
- 暂不支持位于 ZFS 子卷上的容器磁盘。
- 目录、NFS 或 CIFS 存储上的 raw 磁盘以及厚置备 LVM 上的磁盘只能在客户机停止时备份。
- 在集群中,作业备份其所在节点上的客户机。迁移到其他节点的客户机会给出警告——请在每个节点上使用主机上的所有虚拟机(及容器),使迁移后的客户机仍受保护。
- cloud-init 驱动器不会被存储;还原时会根据配置重新创建。
下一步
BackupZit 免费且开源(AGPLv3),不限虚拟机和节点数量。下载,查看所有 Proxmox 功能,或阅读控制台内置指南中关于 Proxmox VE 的完整章节。欢迎在 GitHub Discussions 中提问。企业可以从 MaxZit 获得商业支持(仅提供英文服务)。