BorgBackup去重压缩备份:初始化仓库+计划任务配置
在数据爆炸的时代,一个不小心的误删、一次意外的硬盘故障,都可能让数周的工作付诸东流。我们早已告别了“复制粘贴式”备份的原始阶段——那种方式不仅占用大量空间,恢复时更是耗时费力。真正的现代备份,应该是静默运行、高效去重、安全加密、随时可恢复的。
BorgBackup 正是这样一款工具。它不像某些商业备份软件那样臃肿复杂,也不像简单脚本那样脆弱不可靠。它用极简的设计实现了企业级的能力:块级去重、端到端加密、增量快照、跨平台兼容。更重要的是,它是开源的,完全掌控在你自己手中。
要真正用好 Borg,有两个关键环节必须拿捏到位:仓库的初始化和自动化的计划任务配置。很多人第一次尝试 Borg 时,往往卡在这两步——要么初始化失败,要么定时任务执行后发现根本没备份成功。下面我们就从实战角度,拆解这两个核心步骤,帮你避开常见坑点,搭建一套真正“设好即忘”的备份系统。
仓库初始化:不只是init一下那么简单
当你准备开始使用 Borg,第一件事就是创建一个“仓库”(Repository)。这听起来像是简单的目录创建,但实际上,这一步决定了你整个备份系统的安全性与可维护性。
执行这条命令:
borg init --encryption=repokey-blake2 /path/to/borg-repo或者如果你的仓库在远程服务器上:
borg init --encryption=repokey-blake2 user@backup-server:/backup/data/my-pc-borg看起来很简单?但背后的细节决定成败。
加密模式选哪个?
这是初始化时最关键的决策。Borg 提供多种加密方式,但推荐只用两种:
repokey-blake2keyfile-blake2
其中repokey-blake2是最常用的选择。它的意思是:加密密钥会存储在仓库的config文件中,但仍然由你的密码保护。好处是方便迁移——你只需要记住密码,就能在任何地方访问仓库。而blake2后缀表示使用 BLAKE2b 哈希算法,比默认的 SHA256 更快更安全。
⚠️ 注意:一旦选定加密模式,无法更改。如果未来想换加密方式,只能新建仓库重新备份。
密钥丢了怎么办?
答案很残酷:数据永久丢失。
Borg 是端到端加密的,这意味着即使是备份服务器的管理员,也无法读取你的数据。但这也意味着,如果你忘了密码,或者repokey丢失,那就真的无解了。
所以建议:
- 使用强密码,并存入密码管理器(如 Bitwarden、1Password)
- 或者改用BORG_PASSCOMMAND环境变量,通过命令动态获取密码,避免明文暴露
初始化前的检查清单
别急着敲回车,先确认以下几点:
目标路径必须为空
如果/backup/data/my-pc-borg已存在文件,borg init会直接报错。确保这是一个干净的新目录。远程主机已安装 Borg
如果你把仓库放在远程服务器,必须确保那台机器也安装了 Borg。版本尽量保持一致,避免兼容问题。SSH 免密登录已配置
虽然不是必须,但强烈建议配置 SSH 密钥认证。否则每次备份都要输密码,自动化就无从谈起。文件系统支持硬链接和扩展属性
Borg 依赖这些特性来保证一致性。不要把仓库放在 FAT32、exFAT 或某些老旧 NFS 配置上。
自动化备份:让 cron 成为你最忠实的运维助手
初始化完仓库,下一步就是让它“自己动起来”。没有人会每天手动执行备份命令,所以我们需要 cron。
但直接把borg create丢进 crontab 是危险的。我见过太多人这么干,结果日志里全是权限错误、环境变量缺失、备份中断……最后才发现一个月都没成功过一次。
正确的做法是:写一个完整的备份脚本,再由 cron 调用。
备份脚本怎么写?
下面是一个经过生产环境验证的模板:
#!/bin/bash # 设置环境变量 export BORG_REPO="user@backup-server:/backup/data/my-pc-borg" export BORG_PASSPHRASE="your-super-strong-passphrase" # 推荐替换为 BORG_PASSCOMMAND export BORG_CACHE_DIR="/tmp/borg-cache" # 可选:加快元数据加载 # 执行备份 borg create \ --verbose \ --filter AME \ --list \ --stats \ --show-rc \ --compression zstd,6 \ --one-file-system \ --exclude '/home/*/.cache' \ --exclude '/tmp' \ --exclude '/var/tmp' \ --exclude '/dev' \ --exclude '/proc' \ --exclude '/sys' \ --exclude '/run' \ ::'{hostname}-{now}' \ /home \ /etc \ /root \ /var/www # 判断返回码 if [ $? -le 1 ]; then echo "[$(date)] Backup completed successfully." >> /var/log/borg-backup.log else echo "[$(date)] Backup FAILED!" >&2 exit 1 fi保存为/usr/local/bin/backup.sh,并赋予可执行权限:
chmod +x /usr/local/bin/backup.sh关键参数解读
| 参数 | 作用 |
|---|---|
--compression zstd,6 | 使用 Zstandard 压缩,级别6是速度与压缩率的最佳平衡点 |
--one-file-system | 防止跨挂载点扫描,避免误包含/proc,/sys等虚拟文件系统 |
--exclude | 明确排除临时目录、缓存文件等无关数据,减少噪声和传输量 |
::'{hostname}-{now}' | 归档命名规则,自动生成类似myserver-2025-04-05T02:00:00的名称 |
📌 小技巧:可以用
{now:%Y-%m-%d}自定义时间格式,比如只保留日期部分。
如何配置 cron?
运行:
crontab -e添加一行:
0 2 * * * /usr/local/bin/backup.sh >> /var/log/borg-backup.log 2>&1这表示每天凌晨 2 点执行备份,并将输出追加到日志文件中。
为什么要把输出重定向?因为 cron 默认不记录执行内容。没有日志,你就无法知道某次备份是否真的成功了。
💡 进阶建议:配合
logrotate管理日志大小,防止日志无限增长。
实际部署中的工程考量
Borg 很强大,但在真实环境中,还需要一些额外的设计思考。
仓库放在哪儿最合适?
- 本地外接硬盘:适合个人用户,成本低,但需手动插拔
- 远程 VPS/NAS:推荐方案,独立于主设备,避免同毁风险
- NFS/CIFS 共享:可用,但需确保网络稳定、权限正确、支持扩展属性
❗ 不建议将仓库和源数据放在同一块硬盘上。一旦硬盘损坏,两边全丢。
性能优化建议
- 压缩级别选择
zstd,6~9:现代 CPU 上 Zstd 几乎无性能损耗,却能显著减少传输量 - 使用 SSD 存放仓库:尤其当归档数量多时,元数据查询速度提升明显
- 设置本地缓存目录:
BORG_CACHE_DIR可加速指纹比对过程
安全最佳实践
- 禁用密码登录,使用 SSH 密钥
- 不要在脚本中硬编码密码,改用:
bash export BORG_PASSCOMMAND="pass show borg/my-pc"
结合pass或gopass等密码管理工具,实现安全注入。 - 定期测试恢复流程:每年至少做一次“灾难演练”,验证你能从零恢复所有数据
监控与告警怎么做?
光有日志还不够,你需要主动发现问题。
一个简单的监控思路:
# 检查最近一次备份是否成功(基于日志中的 RC) tail -n 100 /var/log/borg-backup.log | grep -q "terminates with success" if [ $? -ne 0 ]; then echo "⚠️ 最近一次备份失败,请检查!" | mail -s "Borg 备份告警" admin@example.com fi可以将其加入另一个 cron 任务,每天上午检查前一天的备份状态。
归档清理:防止仓库无限膨胀
虽然 Borg 去重很高效,但如果不加控制,归档还是会越来越多。我们需要定期“修剪”。
在备份脚本末尾加上:
# 清理旧归档 borg prune --keep-daily=7 --keep-weekly=4 --keep-monthly=12 --stats ::含义是:
- 保留最近7天的每日备份
- 保留最近4周的每周备份
- 保留最近12个月的每月备份
这样既能满足恢复需求,又不会让仓库无限增长。
✅ 建议:把这个
prune命令单独放在一个 nightly 任务中执行,避免影响主备份性能。
为什么这套方案值得信赖?
Borg 不是一个“玩具级”工具。它的设计哲学非常清晰:用最少的外部依赖,实现最强的数据完整性保障。
- 块级去重让你可以用 1TB 硬盘存下多年系统快照
- 内容寻址机制确保数据永不冲突
- 加密仓库即使被盗也无法被读取
- 所有操作都有详细统计和返回码,便于自动化判断
再加上 cron 的稳定调度能力,整套系统几乎没有单点故障。只要你的备份服务器还能连上,数据就在那里,安静地等着你哪天需要它。
很多团队花大价钱购买商业备份软件,功能一大堆,但核心能力其实 Borg 都能覆盖。区别在于,Borg 把控制权交给了你。你要做的,只是认真走好初始化和自动化这两步。
这种高度集成的设计思路,正引领着个人与中小规模数据保护方案向更可靠、更高效的方向演进。