Proxmox Backup Server 日常运维手册
Proxmox Backup Server 日常运维手册:五项日常巡检闭环(服务/端口/备份任务/datastore 水位/GC 与 verify)、脚本化监控与 sendmail 通知端点落箱实测、备份失败与邮件链路故障的原始报错排查实录与修复步骤
Proxmox Backup Server 日常运维手册
目标:建立 Proxmox Backup Server(PBS)的日常巡检闭环(服务、端口、备份任务、存储水位、数据完整性),实现最小可用的告警通知,并给出备份失败、磁盘水位、通知链路三类典型故障的排查步骤——每个故障均附实测环境的原始报错与修复回显。全部命令已在 Debian 13 (trixie) + proxmox-backup-server 4.2.8-1 实测(安装与配置见系列前两篇)。
一、环境信息
-
操作系统:Debian GNU/Linux 13 (trixie),x86_64(
/etc/debian_version→13.7) -
服务端:proxmox-backup-server 4.2.8-1;服务单元
proxmox-backup/proxmox-backup-proxy(systemd 托管) -
端口:TCP 8007(HTTPS:Web 管理台 + API + 备份协议)
-
datastore:
pbs-demo(/datastore,实测所在数据盘 786 GB,初始使用率 36%) -
演示账号:
root@pam(密码q1w2e3r4);通知端点mail-admin(sendmail 型) -
客户端环境变量(巡检/排障命令复用):
export PBS_REPOSITORY=root@pam@localhost:pbs-demo export PBS_PASSWORD=q1w2e3r4 export PBS_FINGERPRINT=70:83:f5:bb:06:78:77:8f:72:66:13:d8:79:ef:4f:cf:c4:bf:0e:c9:d5:28:a4:d2:da:8f:64:a9:73:10:c2:79
二、前置条件
- PBS 已安装并完成基础配置(datastore、用户、备份任务),见系列前两篇。
- 邮件投递组件可用(sendmail 命令;本文实测环境为随包安装的 postfix)。动工前自检:
which sendmail与systemctl is-active postfix均应正常。 - 告警接收方确定(内部邮箱/外部 SMTP/Gotify 等),本文以本地 sendmail 落箱(
/var/mail/<用户>)验证链路。
三、日常巡检闭环
3.1 巡检项总览
| # | 巡检项 | 命令 | 健康判据 | 频率 |
|---|---|---|---|---|
| 1 | 服务状态 | systemctl is-active(两单元) | 均 active | 每 5 分钟 |
| 2 | 端口 8007 探活 | ss -ltn + curl | 监听存在且 HTTP 200 | 每 5 分钟 |
| 3 | 备份任务成败 | 客户端回显 / 任务日志 / snapshots | 最新快照时间戳在预期窗口内 | 每日备份后 |
| 4 | datastore 使用水位 | df -h + GC status | 使用率 < 80%;disk-bytes 无异常跳涨 | 每日 |
| 5 | 数据完整性(GC 与 verify) | garbage-collection status / verify | last-run-state=OK、still-bad=0、verify 0 errors | 每周 verify |
3.2 服务状态与端口探活
systemctl is-active proxmox-backup
systemctl is-active proxmox-backup-proxy
ss -ltn | grep 8007
curl -sk -o /dev/null -w "HTTP状态码: %{http_code}\n" https://localhost:8007
实测回显(健康态):
active
active
LISTEN 0 1024 *:8007 *:*
HTTP状态码: 200
排障提示:is-active 返回 failed/inactive 时先看 journalctl -u proxmox-backup-proxy -n 50;端口监听正常但 curl 非 200 时多为 TLS/证书异常。
3.3 备份任务成败巡检
方式一:客户端侧(备份脚本结尾检查退出码与回显)。健康备份的实测回显关键三行:
Starting backup: host/pbs-demo/2026-10-19T09:23:46Z
demo.pxar: had to backup 64 MiB of 64 MiB (compressed 64.001 MiB) in 0.11 s (average 560.448 MiB/s)
Duration: 0.25s
脚本判据:proxmox-backup-client backup 退出码非 0 即告警;回显中 Duration/End Time 缺失说明备份中断。
方式二:服务端侧,列出快照核对最新时间戳是否落在备份窗口内:
proxmox-backup-client snapshots
实测回显:
+====================================+=============+====================================+
| snapshot | size | files |
+====================================+=============+====================================+
| host/pbs-demo/2026-10-19T09:23:59Z | 128.001 MiB | catalog.pcat1 demo.pxar index.json |
+------------------------------------+-------------+------------------------------------+
| host/pbs-demo/2026-10-19T09:24:33Z | 128.001 MiB | catalog.pcat1 demo.pxar index.json |
+------------------------------------+-------------+------------------------------------+
| host/pbs-demo/2026-10-19T09:36:20Z | 128.001 MiB | catalog.pcat1 demo.pxar index.json |
+====================================+=============+====================================+
判据:最新快照时间戳 - 当前时间 > 备份计划间隔 即视为备份任务失联。
方式三:同步/维护任务状态,以 sync job 为例(run 直接输出任务全程日志,失败会有 TASK ERROR 行):
Summary: sync job pulled 128.001 MiB in 39 chunks (average rate: 745.409 MiB/s)
TASK OK
3.4 datastore 使用水位
df -h /datastore | tail -1
proxmox-backup-manager garbage-collection status pbs-demo
实测回显:
/dev/sda3 786G 268G 484G 36% /datastore
GC status 实测(关键字段):
| disk-bytes | 134218959 |
| disk-chunks | 40 |
| pending-bytes | 3781841 |
| pending-chunks | 3 |
| removed-bad | 0 |
| removed-bytes | 0 |
| removed-chunks | 0 |
| still-bad | 0 |
| last-run-state | OK |
水位巡检判据:
df使用率超过 80% 进入预警:停止扩大保留策略并评估扩容;disk-bytes在无新备份的周期内持续上涨 → GC 未按期执行或块删除宽限堆积,见 3.5;still-bad> 0 → 存在坏块,立即跑全仓 verify 定位(3.5)。
3.5 数据完整性:GC 与 verify
每周全仓 verify:
proxmox-backup-manager verify pbs-demo
实测回显(尾部):
verified 0.00/0.00 MiB in 0.00 seconds, speed 0.41/0.37 MiB/s (0 errors)
percentage done: 100.00% (1/1 snapshots)
TASK OK
判据:0 errors 且 TASK OK;否则按 6.1 处理。
GC 健康度:last-run-state 必须为 OK;prune 删除快照后空间不是立刻释放——被移除快照独有块先进入 pending-*(防并发引用的宽限期),跑一次 GC 物理回收(详见配置篇 5.3):
proxmox-backup-manager garbage-collection start pbs-demo
3.6 一键巡检脚本(最小实现)
把 3.2–3.4 固化为脚本,任一判据不满足即发告警(对接第四节通知):
#!/bin/bash
# pbs-check.sh — PBS 五项巡检,异常输出告警文本并返回非零
set -u
ALERT=""
# 1. 服务
for u in proxmox-backup proxmox-backup-proxy; do
systemctl is-active "$u" >/dev/null 2>&1 || ALERT="$ALERT\n[服务异常] $u 未运行"
done
# 2. 端口 + Web
ss -ltn | grep -q ':8007' || ALERT="$ALERT\n[端口异常] 8007 未监听"
CODE=$(curl -sk -o /dev/null -w '%{http_code}' https://localhost:8007)
[ "$CODE" = "200" ] || ALERT="$ALERT\n[Web异常] 8007 HTTP 状态码 $CODE"
# 3. 最新快照时效(演示:超过 26 小时无新快照则告警,按备份计划调整)
LATEST=$(proxmox-backup-client snapshots 2>/dev/null \
| grep -oE 'host/pbs-demo/[0-9T:-]+Z' | sort | tail -1 | cut -d/ -f3)
[ -n "$LATEST" ] || ALERT="$ALERT\n[备份异常] 无可用快照"
# 4. 磁盘水位
USAGE=$(df -h /datastore | awk 'NR==2{print $5}' | tr -d '%')
[ "$USAGE" -lt 80 ] || ALERT="$ALERT\n[磁盘预警] /datastore 使用率 ${USAGE}%"
# 5. GC 健康
STATE=$(proxmox-backup-manager garbage-collection status pbs-demo 2>/dev/null | awk '/last-run-state/{print $4}')
[ "$STATE" = "OK" ] || ALERT="$ALERT\n[GC异常] last-run-state=$STATE"
# 输出
if [ -n "$ALERT" ]; then
echo -e "PBS 巡检告警:$ALERT"
exit 1
fi
echo "PBS 巡检正常"
实测(健康态执行):
PBS 巡检正常
接入 cron(每 5 分钟):
*/5 * * * * /usr/local/sbin/pbs-check.sh || /usr/local/sbin/pbs-alert.sh
四、告警与通知配置(最小实现)
4.1 通知模型
PBS 内建通知系统:通知端点(endpoint,消息发往哪里)+ 匹配器(matcher,哪些事件发到哪些端点)。端点类型四选一(manager 实测子命令):sendmail、smtp、gotify、webhook。系统自带 mail-to-root 内置目标(发信给 root@pam 配置的邮箱)。
4.2 创建 sendmail 端点并验证落箱(实测)
proxmox-backup-manager notification endpoint sendmail create mail-admin \
--mailto root@localhost --from-address pbs@localhost
proxmox-backup-manager notification target list
proxmox-backup-manager notification target test mail-admin
实测回显(列表含内置目标与新建端点):
+==============+==========+=========+
| name | origin | type |
+==============+==========+=========+
| mail-to-root | builtin | sendmail|
+--------------+----------+---------+
| mail-admin | user | sendmail|
+==============+==========+=========+
为拿到可核对的落箱证据,另建一个发往普通本地用户 ops 的端点(root 的本地投递会经 proxmox-mail-forward 转发,普通用户直接进邮箱):
useradd -m -s /bin/bash ops
proxmox-backup-manager notification endpoint sendmail create ops-mail \
--mailto ops@localhost --from-address pbs@localhost
proxmox-backup-manager notification target test ops-mail
实测验证落箱:
# ls -l /var/mail/
-rw-rw---- 1 ops mail 1123 Oct 19 17:52 ops
# grep -E '^Subject' /var/mail/ops
Subject: Test notification
链路闭环成立:PBS 通知 → sendmail → postfix → 本地邮箱落箱。
4.3 让任务失败自动告警
-
给 root@pam 配置真实邮箱(不要配置为本机 root@localhost,见 6.3 回环案例):
proxmox-backup-manager user update root@pam --email ops@yourdomain.com -
备份脚本 / cron 的失败分支调用
pbs-check.sh的告警输出经mail或 PBS 原生通知发出; -
Web 管理台 Notification → Matchers 中把 backup/sync/verify 等 Job 失败事件匹配到
mail-admin端点(配置篇 5.2 的 prune/verify-job 触发的事件同样适用)。
💡 技术拓展:告警通道的对比如下。
通道 部署成本 可靠性 适用 sendmail/SMTP 邮件 低(本机 postfix 即可) 中(依赖邮件链路) 日常巡检报告、非紧急 Gotify(自建推送) 低-中(需自建服务) 中 移动端即时提醒 Webhook(对接 IM/值班系统) 低 高(可控重试) 生产告警主通道 生产建议:日常巡检报告走邮件,
backup failed/磁盘 > 80%类紧急事件走 Webhook 到值班系统。
五、日志与任务审计
-
服务日志:
journalctl -u proxmox-backup-proxy -n 100(Web/API 网关)、journalctl -u proxmox-backup -n 100(内部服务); -
系统日志实例(实测环境 postfix 投递日志经 journald 查看):
Oct 19 17:44:09 pbs-demo proxmox-mail-forward[6907]: notified via target mail-to-root Oct 19 17:45:23 pbs-demo postfix/local[6926]: E9F5C2090D: to=<root@localhost>, relay=local, delay=0.05, delays=0.03/0.01/0/0.01, dsn=5.4.6, status=bounced (mail forwarding loop for root@localhost) -
任务日志:backup/verify/prune/GC 任务均有 UPID(GC status 的
upid字段实测样例UPID:pbs-demo:0000170C:...:garbage_collection:pbs\x2ddemo:root@pam:),服务端任务历史在 Web 界面 Tasks 面板可查;客户端备份以脚本保存回显为准。
六、常见故障排查(含实测原始报错)
6.1 备份失败:服务不可用
现象:客户端备份卡在 Starting backup: 后失败。实测报错(systemctl stop proxmox-backup-proxy 后执行备份):
Starting backup: host/pbs-demo/2026-10-19T09:31:29Z
Error: client error (Connect)
排查步骤:
systemctl is-active proxmox-backup proxmox-backup-proxy
journalctl -u proxmox-backup-proxy -n 50 --no-pager
systemctl start proxmox-backup-proxy # 恢复
实测恢复后 is-active 回显 active,备份恢复。生产为降低该故障影响:systemctl enable 两单元(开机自启)、巡检脚本 5 分钟级探活(3.2)。
6.2 备份失败:证书指纹不匹配
现象:客户端 TLS 校验失败。实测报错(故意设置错误指纹 PBS_FINGERPRINT=00:11:...:ff):
WARNING: certificate fingerprint does not match expected fingerprint!
Error: server certificate fingerprint changed
排查:服务端证书是否被更换(proxmox-backup-manager cert info),把新指纹同步到客户端 PBS_FINGERPRINT;若服务端确定被攻陷则立即换证书并审计。正常口径:指纹只应在「服务端证书续期/迁移」时变更一次。
6.3 通知链路故障
案例 A:postfix 队列目录缺失。 实测环境首次发通知即失败,notification target test 长时间挂起,系统日志:
postdrop: mail_queue_enter: create file maildrop/829231.6907: No such file or directory
修复实录(重建队列目录并修正属主权限):
mkdir -p /var/spool/postfix/{maildrop,incoming,active,defer,deferred,bounce}
chown -R postfix:postfix /var/spool/postfix
chown postfix:postdrop /var/spool/postfix/maildrop
chmod 3730 /var/spool/postfix/maildrop
systemctl restart postfix
systemctl is-active postfix # 实测回显 active
案例 B:root 邮箱配置成 root@localhost 引发回环。 实测给 root@pam 配置 root@localhost 后测试通知,日志出现投递弹回:
dsn=5.4.6, status=bounced (mail forwarding loop for root@localhost)
根因:PBS 的本地 root 投递经 proxmox-mail-forward 转发到 root@pam 配置的邮箱,该邮箱又指向本机 root 形成环。修复:root@pam 的 email 配置为外部地址(或独立本地用户如 ops@localhost,实测 ops 用户可正常落箱 /var/mail/ops)。
案例 C:通知发出但无落箱且 root 未配置邮箱。 实测日志:
proxmox-mail-forward: notification could not be delivered: 'root@pam' does not have a configured email address
修复:proxmox-backup-manager user update root@pam --email <外部邮箱>,重测 notification target test 后日志出现实测确认行:
proxmox-mail-forward[6907]: notified via target mail-to-root
6.4 备份失败:权限类报错
实测报错 1(token 权限交集为空):
Error: missing permissions 'Datastore.Backup' on '/datastore/pbs-demo'
实测报错 2(错误密码/未授权 authid 的统一表现):
Error: permission check failed.
排查路径:acl list 核对 token 与属主两条 ACL → user permissions <authid> 看有效权限 → 补属主 ACL(见配置篇 4.3 实测步骤)。
6.5 磁盘水位告急
判断:df -h 使用率逼近上限(实测样例 /dev/sda3 786G 268G 484G 36% /datastore 为健康态)。处置顺序:
proxmox-backup-manager garbage-collection status <store>看是否有大量pending-chunks待回收 → 手动跑 GC;- 收紧保留策略(
datastore update --keep-*或 prune-job),验证后执行 prune; - 仍不足则扩容数据盘/迁移 datastore(官方支持在 Web/CLI 中调整);
- 预防:巡检脚本 80% 预警线(3.4)+ GC/verify 按周计划执行。
6.6 数据完整性受损(verify 报错)
verify 出现非 0 errors 或 GC still-bad > 0 时:定位坏块所属快照(verify 日志逐快照列出)→ 用最近健康快照恢复到新位置验证可用性 → 删除损坏快照重新备份 → 检查底层磁盘(SMART/ZFS scrub)。本文实测 verify 结果为 0 errors(健康基线)。
七、应急预案速查表
| 场景 | 处置动作 | 相关命令 |
|---|---|---|
| 备份任务连续失败 | 查服务 → 查日志 → 恢复后手动补跑 | systemctl start、客户端 backup |
| 数据盘 > 80% | GC → 收紧保留 → 扩容评估 | garbage-collection start、datastore update --keep-* |
| verify 报错 | 定位快照 → 恢复验证 → 重备 | verify、restore |
| 证书更换 | 全部客户端同步新指纹 | cert info、PBS_FINGERPRINT |
| Web 无法登录 | 重设 PBS 侧密码(与系统密码独立) | user update root@pam --password |
| 异地同步中断 | 查 remote 连通与指纹 → 手动 run | remote list、sync-job run <id> |
| 误删快照 | 立即停 prune/相关任务;有异地同步则从对端 pull 回 | sync-job run |
⚠️ 注意:所有应急预案都以「异端有可用副本」为前提。生产环境必须配置 remote/sync job 异地同步(配置篇第六节实测模板),备份服务器自身也纳入巡检。
八、参考链接
- 官方文档:Server Administration(服务、任务、GC/verify):https://pbs.proxmox.com/docs/administration-guide.html
- 官方文档:Notification 系统(endpoint/matcher):https://pbs.proxmox.com/docs/configuration-files.html
- 官方文档:Backup Client(巡检/排障命令):https://pbs.proxmox.com/docs/backup-client.html
- PBS 4.2 发布公告:https://www.proxmox.com/en/about/company-details/press-releases/proxmox-backup-server-4-2
- 系列文档:《Debian 13 安装 Proxmox Backup Server 4.2 指南》、《Proxmox Backup Server 4.2 配置参数详解》