搬瓦工 VPS 部署 BorgBackup 去重备份工具教程
BorgBackup(简称 Borg)是一款功能强大的去重备份程序,使用 Python 编写并包含 C 扩展以提升性能。Borg 的核心优势在于其卓越的去重和压缩能力,相同的数据块在仓库中只存储一次,配合 LZ4/ZSTD 压缩,可以极大地节省存储空间。Borg 在备份大量小文件和数据库转储方面表现尤为出色。本教程将介绍如何在搬瓦工 VPS 上安装和使用 BorgBackup。
一、BorgBackup 特性概览
- 高效去重:基于可变长度分块算法,文件内部和跨文件去重效果极佳。
- 多种压缩算法:支持 LZ4(快速)、ZSTD(均衡)、LZMA(高压缩比)。
- 客户端加密:备份数据在发送到仓库之前就已加密(AES-256-CTR + HMAC-SHA256)。
- 远程仓库:通过 SSH 协议支持远程备份,仅需目标机器安装 Borg。
- 快速操作:得益于去重缓存和内容索引,增量备份极其快速。
二、安装 BorgBackup
# Ubuntu/Debian
apt update
apt install borgbackup -y
# 或使用 pip 安装最新版
pip install borgbackup
# CentOS(通过 EPEL)
yum install epel-release -y
yum install borgbackup -y
# 验证
borg --version
三、创建备份仓库
3.1 本地仓库
# 创建加密仓库(推荐 repokey 模式)
borg init --encryption=repokey /backup/borg-repo
# 导出仓库密钥(务必安全保管)
borg key export /backup/borg-repo /root/borg-key-backup.txt
3.2 远程仓库(SSH)
# 在远程备份服务器上也需要安装 borg
# 然后通过 SSH 初始化仓库
borg init --encryption=repokey ssh://backup-user@backup-server:22/backup/borg-repo
# 建议配置 SSH 密钥登录
ssh-keygen -t ed25519 -f ~/.ssh/borg_key -N ""
ssh-copy-id -i ~/.ssh/borg_key backup-user@backup-server
四、执行备份
# 设置仓库密码环境变量
export BORG_PASSPHRASE="your_borg_password_2026"
export BORG_REPO="/backup/borg-repo"
# 创建备份归档(使用日期命名)
borg create \
--stats --progress \
--compression zstd,6 \
--exclude '*.log' \
--exclude 'node_modules' \
--exclude '.git' \
--exclude '__pycache__' \
::vps-{now:%Y-%m-%d_%H%M} \
/opt/app /var/www /etc/nginx
# 备份数据库
mysqldump -u root --all-databases | \
borg create --stdin-name mysql-dump.sql \
--compression zstd,6 \
::mysql-{now:%Y-%m-%d_%H%M} -
# 查看备份统计
borg info ::vps-2026-03-28_0300
五、管理归档
# 列出所有归档
borg list
# 查看归档中的文件列表
borg list ::vps-2026-03-28_0300
# 查看仓库详细信息
borg info
# 查看归档详细信息
borg info ::vps-2026-03-28_0300
# 对比两个归档的差异
borg diff ::vps-2026-03-27_0300 ::vps-2026-03-28_0300
六、数据恢复
# 恢复整个归档
cd /opt/restore
borg extract ::vps-2026-03-28_0300
# 恢复特定文件或目录
borg extract ::vps-2026-03-28_0300 opt/app/config
# 恢复数据库转储
borg extract --stdout ::mysql-2026-03-28_0300 | mysql -u root
# 挂载归档为文件系统
mkdir -p /mnt/borg
borg mount :: /mnt/borg
# 浏览后卸载
borg umount /mnt/borg
七、保留策略
# 按策略删除旧归档
borg prune \
--keep-within 2d \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 6 \
--stats
# 释放已删除归档占用的空间
borg compact
八、自动化备份脚本
cat > /opt/borg/backup.sh <<'EOF'
#!/bin/bash
set -euo pipefail
export BORG_PASSPHRASE="your_borg_password_2026"
export BORG_REPO="ssh://backup-user@backup-server/backup/borg-repo"
export BORG_RSH="ssh -i /root/.ssh/borg_key -o StrictHostKeyChecking=accept-new"
LOG="/var/log/borg-backup.log"
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG"; }
log "=== 开始 Borg 备份 ==="
# 数据库备份
docker exec postgres pg_dumpall -U postgres > /tmp/pg-dump.sql
log "数据库导出完成"
# 创建归档
borg create \
--stats --compression zstd,6 \
--exclude '*.log' --exclude 'node_modules' --exclude '.git' \
::auto-{now:%Y-%m-%d_%H%M} \
/opt/app /var/www /etc/nginx /tmp/pg-dump.sql 2>> "$LOG"
log "归档创建完成"
rm -f /tmp/pg-dump.sql
# 清理旧归档
borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly 6 2>> "$LOG"
borg compact 2>> "$LOG"
log "旧归档清理完成"
# 每周日验证仓库
if [ "$(date +%u)" -eq 7 ]; then
borg check 2>> "$LOG"
log "仓库完整性检查通过"
fi
log "=== 备份完成 ==="
EOF
chmod +x /opt/borg/backup.sh
# 定时任务:每天凌晨 2 点
(crontab -l 2>/dev/null; echo "0 2 * * * /opt/borg/backup.sh") | crontab -
九、常见问题
仓库被锁定
# 如果上次备份异常中断,仓库可能被锁定
borg break-lock
备份速度优化
调整压缩级别可以在速度和压缩率之间取得平衡。LZ4 最快但压缩率低,ZSTD 是推荐的均衡选择,LZMA 压缩率最高但速度慢。
密钥丢失恢复
repokey 模式的密钥存储在仓库内,只需记住密码即可。但强烈建议导出密钥文件并安全保管。
总结
BorgBackup 的去重和压缩能力使其成为存储空间有限场景下的理想备份工具。与 Restic 相比,Borg 在去重效率和压缩选择上更有优势。如果需要将备份同步到云端存储,可以搭配 Rclone 使用。选购搬瓦工 VPS 请参考 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,购买链接:bwh81.net。