🛡️ PBS 裸机部署与 PVE 完整增量备份实战指南

本教程旨在指导您完成 Proxmox Backup Server (PBS) 的独立裸机配置 PVE 备份过程,包括:ZFS 存储池配置、权限管理以及与 Proxmox VE (PVE) 的无缝对接,实现高效、安全的增量备份。

📋 一、 前置准备与环境要求

在开始配置前,请确保满足以下基础环境要求:

  1. 系统安装:PBS 已独立裸机安装,配置了静态 IP,且能通过 https://PBS_IP:8007 正常访问 Web 管理页面。
  2. 磁盘规划严禁混用磁盘。系统盘仅用于安装 PBS 系统,必须使用独立硬盘专门存放备份数据。
  3. 网络互通:PVE 节点与 PBS 必须在内网互通,防火墙需放行 TCP 8007 端口。
  4. 时间同步:两台设备的时区需统一(如上海),并确保 NTP 时间同步正常,避免备份校验失败。

💾 二、 PBS 存储池配置(ZFS 标准流程)

操作路径:PBS WebUI → AdministrationDisks

  1. 磁盘擦除
    选中所有用于备份的专用硬盘,点击 Wipe Disk

    • 擦除模式:选择 secure,彻底清空磁盘原有分区表。
  2. 创建 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)

操作路径StorageDatastorebackup_poolEditPrune & GC

⚠️ 重要提示:PBS 定时调度不支持 dailyweekly 关键字,仅支持标准 systemd 时间格式(如 00:30sun 03:00)。

  1. 定时任务与保留策略配置
参数项 填写内容 功能释义
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 完整扫描所有快照,确保清理逻辑生效
  1. 标准执行时序逻辑
    为避免数据堆积并满足官方 24 小时数据冷却保护机制,建议遵循以下时序:
    1. 23:00:PVE 自动生成增量备份。
    2. 00:30:PBS 执行 Prune,标记超出保留策略的过期快照。
    3. 周日 03:00:执行 GC,因间隔超过 24 小时,可完整回收磁盘空间。

🔐 四、 权限管理与安全对接

  1. 创建 PVE 专用账号
    操作路径Access ControlUsersAdd User

    • Username: pve_client
    • Realm: pbs (PBS 本地用户域)
    • Password: 设置高强度密码(大小写+数字+符号)

    分配仓库权限

    • 路径PermissionsAdd Permission
    • Path: /datastore/backup_pool
    • User: pve_client@pbs
    • Role: DatastorePowerUser
  2. 配置 API Token(推荐用于免密对接)

    关键说明:API Token 属于独立身份,不继承用户权限。创建 Token 后必须单独分配仓库权限,否则鉴权会失败。

    创建 Token

    • 路径API TokenAdd 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

🌐 五、 网络与证书配置

  1. 防火墙放行
    操作路径AdministrationFirewallAdd 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
  1. 获取证书指纹
    登录 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. 常用运维命令

    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"
  2. 高频问题解决方案 (FAQ)

    1. GC/Prune 调度报错 400
      • 原因:填写了 dailyweekly
      • 解决:PBS 仅允许纯时分(如 00:30)或星期+时分(如 sun 03:00)格式。
    2. API Token 连接提示权限拒绝
      • 原因:Token 是独立身份,仅给用户分配权限无效。
      • 解决:必须在权限管理中单独添加 API Token 的专属权限。
    3. GC 执行后显示大量“待处理数据”
      • 原因:触发了官方 24 小时数据冷却保护机制。
      • 解决:将 GC 设置为每周凌晨执行(间隔 >24h),即可完整清理。
    4. 手动新建 Datastore 指向 ZFS 根目录
      • 后果:导致备份数据写入系统盘,极易爆满宕机。
      • 解决:严禁此操作,务必在创建 ZFS 时勾选 “Add Storage”。
    5. 删除备份后磁盘空间未释放
      • 原因:Prune 仅标记删除,需执行 GC 才能物理删除数据块。
      • 解决:等待 GC 自动执行或手动触发 GC。
    6. Contents 列表不显示单份备份大小
      • 原因:PBS 底层为全局块级去重,多快照共享数据块,无法拆分单份大小。
      • 解决:仅能在 Summary 查看仓库总容量。