Proxmox Backup Server增量备份魔方云
PBS备份PVE很好用,对于PVE以外的系统,PBS给了proxmox-backup-client这个客户端,在Debian/Ubuntu下有官方维护的包,但CentOS下没有。github上有个大神封装了RHEL8和RHEL9的客户端,也支持RockyLinux8 / RockyLinux9 / AlmaLinux8 / AlmaLinux 9。
魔方云有提供一个冷备份的功能,但是我不太喜欢。魔方云的这个冷备份功能是通过libvirt的blockcopy功能导出备份,然后scp去备份服务器。例如:
virsh -c qemu+tcp:///system blockcopy kvm100 vda --xml /home/kvm/kvm100/backup-disk.xml --wait --transient-job --verbose
这样能安全的克隆出正在运行的虚拟机副本,但这也相当于将虚拟机全盘在宿主服务器硬盘重写了一遍,然后再全盘scp复制去备份服务器硬盘也重写一边,每次备份都会重复这一循环。对硬盘寿命的损耗、和每次scp出去对内网宽带的占用是很大的,另外我测试单节点3TB+数据、200虚拟机、内网到备份服务器10Gbps端口的情况下,魔方云冷备份需要24小时左右耗时也很长。
PBS支持权限控制、备份压缩等,最重要的是支持增量备份,这点很好!完成首次备份之后,第二次备份它会校对首次备份数据和本次备份数据,只会备份和传输修改、新增部分,这意味着之后的备份不用再次“全盘打包”以“劳民伤财”的方式进行。
如果你直接用proxmox-backup-client客户端备份魔方云的/home目录,那么对正在运行的虚拟机来说,这个备份数据是不完整的,将丢失还未存储的临时数据,比如内存中待写入硬盘的数据、缓存数据。
对备份高要求的人来说,应该和魔方云官方做法一样,写个脚本读取所有kvmid,然后通过libvirt的blockcopy功能逐个导出备份,然后再通过proxmox-backup-client客户端上传,然后删除本地的备份,循环这步骤。
但对我这种不承诺提供备份、也无备份服务,仅做内部安全风险控制的,直接默认整个/home打包就行,简单、方便。这种备份也不是不能用,因为现代系统是具备纠错功能的,你恢复后其实就相当于断电关机后再启动。对要求不高的普通用户来说比起极端情况下数据丢失,断电关机这点影响算不得什么。当然,如果是收了客户备份的钱,还是建议开放魔方云自己的冷备份功能给客户或者基于blockcopy进行备份。
魔方云宿主服务器系统是CentOS Stream 8,需要安装大佬封装的客户端:https://github.com/TomGem/proxmox-backup-client
安装依赖:
dnf install systemd-libs libgcc libzstd libacl fuse3-libs libuuid openssl-libs
下载并安装rpm:
wget https://github.com/TomGem/proxmox-backup-client/releases/download/3.0.4/proxmox-backup-3.0.4-1.rhel8.x86_64.rpm
dnf install proxmox-backup-3.0.4-1.x86_64.rpm
完成后查看版本能正常输出就安装好了:
proxmox-backup-client version
PBS配置好以后在魔方云宿主服务器登入测试:
[root@node127 ~]# proxmox-backup-client login --repository mfy-hk-platinum-33@pbs@192.168.2.253:8007:mfy-hk-platinum-33
Password for "mfy-hk-platinum-33@pbs": ******************
fingerprint: 40:6d:39:a2:32:45:ee:ac:28:d4:24:eb:89:79:ac:54:11:a7:33:f9:29:d1:ef:21:d0:cb:83:73:bf:f1:d6:5e
Are you sure you want to continue connecting? (y/n): y
fingerprint: 40:6d:39:a2:32:45:ee:ac:28:d4:24:eb:89:79:ac:54:11:a7:33:f9:29:d1:ef:21:d0:cb:83:73:bf:f1:d6:5e
Are you sure you want to continue connecting? (y/n): y
备份整个/home目录
proxmox-backup-client backup home.pxar:/home --repository mfy-hk-platinum-33@pbs@192.168.2.253:8007:mfy-hk-platinum-33
完成后可查看快照
[root@node127 ~]# proxmox-backup-client snapshot list --repository mfy-hk-platinum-33@pbs@192.168.2.253:8007:mfy-hk-platinum-33
Password for "mfy-hk-nvmenode-33@pbs": ******************
┌───────────────────────────────────┬────────────┬────────────────────────────────────┐
│ snapshot │ size │ files │
╞═══════════════════════════════════╪════════════╪════════════════════════════════════╡
│ host/node127/2025-10-31T17:55:44Z │ 56.961 GiB │ catalog.pcat1 home.pxar index.json │
├───────────────────────────────────┼────────────┼────────────────────────────────────┤
│ host/node127/2025-10-31T21:17:33Z │ 64.693 GiB │ catalog.pcat1 home.pxar index.json │
├───────────────────────────────────┼────────────┼────────────────────────────────────┤
│ host/node127/2025-10-31T21:37:15Z │ 66.867 GiB │ catalog.pcat1 home.pxar index.json │
└───────────────────────────────────┴────────────┴────────────────────────────────────┘
交互式恢复(下演示将备份中local/下的所有文件恢复到指定目录/home/kvm/local/)
[root@node127 ~]# proxmox-backup-client catalog shell --repository mfy-hk-platinum-33@pbs@192.168.2.253:8007:mfy-hk-platinum-33 host/node58/2025-10-31T21:37:15Z home.pxar
Starting interactive shell
pxar:/ > cd kvm/
pxar:/kvm > ls
config.json
images
kvm43806
kvm43849
local
pxar:/kvm > restore /home/kvm/local/ --pattern "local/**"
pxar:/kvm > exit
定时备份脚本:
#!/bin/bash
source /etc/profile
# Verify the PBS password is set
if [ -z "$PBS_PASSWORD" ]; then
echo "错误:PBS_PASSWORD 环境变量未设置!" >&2
exit 1
fi
# Run PBS
proxmox-backup-client backup home.pxar:/home --repository mfy-hk-platinum-33@pbs@192.168.2.253:8007:mfy-hk-platinum-33
赋予权限
chmod 700 /path/pbs_backups.sh
Crontab定时任务(每周日凌晨1点运行)
0 1 * * 7 PBS_PASSWORD="pbsUserPassword" /path/pbs_backups.sh >> /path/pbs_backups.log 2>&1
更多命令参考官方文档:
https://pbs.proxmox.com/docs/command-syntax.html#proxmox-backup-client