PBS 裸机部署 + PVE 完整增量备份教程
🛡️ PBS 裸机部署与 PVE 完整增量备份实战指南
本教程旨在指导您完成 Proxmox Backup Server (PBS) 的独立裸机配置 PVE 备份过程,包括:ZFS 存储池配置、权限管理以及与 Proxmox VE (PVE) 的无缝对接,实现高效、安全的增量备份。
📋 一、 前置准备与环境要求
在开始配置前,请确保满足以下基础环境要求:
- 系统安装:PBS 已独立裸机安装,配置了静态 IP,且能通过
https://PBS_IP:8007正常访问 Web 管理页面。 - 磁盘规划:严禁混用磁盘。系统盘仅用于安装 PBS 系统,必须使用独立硬盘专门存放备份数据。
- 网络互通:PVE 节点与 PBS 必须在内网互通,防火墙需放行 TCP 8007 端口。
- 时间同步:两台设备的时区需统一(如上海),并确保 NTP 时间同步正常,避免备份校验失败。
💾 二、 PBS 存储池配置(ZFS 标准流程)
操作路径:PBS WebUI → Administration → Disks
磁盘擦除
选中所有用于备份的专用硬盘,点击Wipe Disk。- 擦除模式:选择
secure,彻底清空磁盘原有分区表。
- 擦除模式:选择
创建 ZFS 存储池
顶部切换至ZFS标签页,点击Create ZFS,参考以下参数配置:
| 参数项 | 推荐配置值 | 说明与建议 |
|---|---|---|
| Name | backup_pool |
自定义 ZFS 存储池名称 |
| RAID Level | 2盘: Mirror 4盘+: RAIDZ2 |
Mirror 允许坏 1 块盘;RAIDZ2 允许同时坏 2 块盘 |
| Compression | zstd |
开启底层压缩,显著降低存储空间占用 |
| ashift | 12 |
兼容 4K 扇区机械硬盘及固态硬盘 |
| Add Storage | ✅ 勾选 | 关键:自动生成合规 Datastore,防止数据误写入系统盘 |
注意:创建完成后,系统会自动生成同名备份仓库,无需手动新建 Datastore。
🕒 三、 仓库维护策略(Prune & GC)
操作路径:Storage → Datastore → backup_pool → Edit → Prune & GC
⚠️ 重要提示:PBS 定时调度不支持
daily或weekly关键字,仅支持标准 systemd 时间格式(如00:30或sun 03:00)。
- 定时任务与保留策略配置
| 参数项 | 填写内容 | 功能释义 |
|---|---|---|
| Prune Schedule | 00:30 |
每日 00:30 执行快照精简,标记过期索引(不释放空间) |
| GC Schedule | sun 03:00 |
每周日 03:00 执行垃圾回收,清理孤立数据块(释放空间) |
| Keep Last | 3 |
永久保留最新的 3 份备份作为兜底 |
| Keep Daily | 7 |
保留最近 7 天的每日备份 |
| Keep Weekly | 4 |
保留最近 4 周的周备份 |
| Keep Monthly | 3 |
保留最近 3 个月的月备份 |
| Max Depth | Full |
完整扫描所有快照,确保清理逻辑生效 |
- 标准执行时序逻辑
为避免数据堆积并满足官方 24 小时数据冷却保护机制,建议遵循以下时序:- 23:00:PVE 自动生成增量备份。
- 00:30:PBS 执行 Prune,标记超出保留策略的过期快照。
- 周日 03:00:执行 GC,因间隔超过 24 小时,可完整回收磁盘空间。
🔐 四、 权限管理与安全对接
创建 PVE 专用账号
操作路径:Access Control→Users→Add User- Username:
pve_client - Realm:
pbs(PBS 本地用户域) - Password: 设置高强度密码(大小写+数字+符号)
分配仓库权限:
- 路径:
Permissions→Add Permission - Path:
/datastore/backup_pool - User:
pve_client@pbs - Role:
DatastorePowerUser
- Username:
配置 API Token(推荐用于免密对接)
关键说明:API Token 属于独立身份,不继承用户权限。创建 Token 后必须单独分配仓库权限,否则鉴权会失败。
创建 Token:
- 路径:
API Token→Add API Token - User:
pve_client@pbs - Token ID:
pve-token - Expire:
never - 操作:创建后立即复制保存 Secret 密钥,页面仅展示一次,丢失无法找回。
新增 Token 专属权限:
- 权限类型:切换为
API Token Permission - Path:
/datastore/backup_pool - API Token:
pve_client@pbs!pve-token - Role:
DatastorePowerUser
- 路径:
🌐 五、 网络与证书配置
- 防火墙放行
操作路径:Administration→Firewall→Add Rule
| 参数 | 配置值 | 说明 |
|---|---|---|
| Action | Accept | 允许流量 |
| Source | 192.168.1.0/24 |
替换为实际的 PVE 内网网段 |
| Port | 8007 |
PBS 服务端口 |
终端一键命令:
1 | proxmox-backup-manager firewall add allow source 192.168.1.0/24 port 8007 |
获取证书指纹
登录 PBS 终端执行以下命令,复制Fingerprint (sha256)后的完整字符串备用:1
proxmox-backup-manager cert info
🔗 六、 PVE 端对接配置
操作路径:PVE WebUI → 数据中心 → 存储 → 添加 → Proxmox Backup Server
| 参数 | 配置说明 |
|---|---|
| ID | PBS-Backup (自定义标识) |
| Server | PBS 的静态内网 IP |
| Port | 8007 |
| Username | 二选一: 1. 密码登录: pve_client@pbs 2. Token 登录: pve_client@pbs!pve-token |
| Password/Secret | 填写对应的用户密码或 Token 密钥 |
| Fingerprint | 粘贴第五步获取的 SHA256 证书指纹 |
| Datastore | 下拉选择 backup_pool |
| Encryption | 勾选自动生成密钥,务必下载 .key 文件离线保存 |
提示:添加无报错即表示对接成功。PBS 采用永久块级增量备份,任意快照均可独立完整恢复,无备份链依赖。
🤖 七、 自动化备份任务
操作路径:PVE WebUI → 数据中心 → 备份 → 添加
| 参数 | 配置值 | 说明 |
|---|---|---|
| 存储 | PBS-Backup |
选用已对接的 PBS 存储 |
| 计划 | daily 23:00 |
PVE 支持 daily 关键字,每日 23 点自动增量备份 |
| 模式 | 快照 |
在线热备份,虚拟机无需关机 |
| 压缩 | zstd |
高效压缩,降低传输流量与磁盘占用 |
| 选项 | ✅ 跳过已停机磁盘 | 跳过空磁盘,缩短备份耗时 |
🛠️ 八、 运维与故障排查
常用运维命令
1
2
3
4
5
6
7
8
9
10
11
12# 查看仓库状态(去重率、实际占用、待删除数据)
proxmox-backup-manager datastore status backup_pool
# 手动执行垃圾回收(释放磁盘空间)
proxmox-backup-client garbage-collect backup_pool
# 手动执行快照精简
proxmox-backup-manager prune run backup_pool
# 校验定时调度语法(排查 400 错误)
systemd-analyze calendar "sun 03:00"
systemd-analyze calendar "00:30"高频问题解决方案 (FAQ)
- GC/Prune 调度报错 400
- 原因:填写了
daily或weekly。 - 解决:PBS 仅允许纯时分(如
00:30)或星期+时分(如sun 03:00)格式。
- 原因:填写了
- API Token 连接提示权限拒绝
- 原因:Token 是独立身份,仅给用户分配权限无效。
- 解决:必须在权限管理中单独添加 API Token 的专属权限。
- GC 执行后显示大量“待处理数据”
- 原因:触发了官方 24 小时数据冷却保护机制。
- 解决:将 GC 设置为每周凌晨执行(间隔 >24h),即可完整清理。
- 手动新建 Datastore 指向 ZFS 根目录
- 后果:导致备份数据写入系统盘,极易爆满宕机。
- 解决:严禁此操作,务必在创建 ZFS 时勾选 “Add Storage”。
- 删除备份后磁盘空间未释放
- 原因:Prune 仅标记删除,需执行 GC 才能物理删除数据块。
- 解决:等待 GC 自动执行或手动触发 GC。
- Contents 列表不显示单份备份大小
- 原因:PBS 底层为全局块级去重,多快照共享数据块,无法拆分单份大小。
- 解决:仅能在 Summary 查看仓库总容量。
- GC/Prune 调度报错 400
