跳转到内容

Borg备份指南

BorgBackup 是一款支持 去重(Deduplication)压缩身份验证加密 的归档程序。它的核心目标是提供一种高效且安全的方法来备份数据。

  1. 高度去重 (Data Deduplication): 这是它的杀手锏。它只存储更改的内容。例如:你备份一个 10GB 的虚拟机镜像,第二天只改了 10MB 数据,再次备份时,Borg 只会增加这 10MB 的存储占用。
  2. 高效压缩: 支持多种压缩算法(如 lz4 追求速度,zstd 追求压缩率)。
  3. 安全性 (加密): 所有数据都可以在客户端进行 AES-256 加密。这意味着即使你的备份服务器被黑,黑客也无法读取你的备份内容。
  4. 离线与远程备份: 可以通过 SSH 备份到远程服务器,且对带宽要求极低(因为只传输去重后的增量部分)。

理解 Borg 的操作逻辑,需要明白以下层级:

  • 存储库 (Repository): 存放备份数据的总仓库(一个目录或远程服务器路径)。
  • 归档 (Archive): 仓库里的某一次具体备份(例如 Monday-Backup)。
  • 区块 (Chunks): Borg 会将文件切成小块,通过哈希值对比来实现去重。

在使用之前,你需要创建一个加密仓库:

Terminal window
# 初始化一个本地仓库,并使用密码加密
borg init --encryption=repokey /path/to/repo

/home/user/data 备份到仓库中,并命名为 my-backup

Terminal window
borg create --stats --progress /path/to/repo::my-backup /home/user/data
  • 查看所有备份: borg list /path/to/repo
  • 恢复某个归档:
Terminal window
# 进入一个空目录执行
borg extract /path/to/repo::my-backup

既然你已经了解了 Borg 是引擎,而 borgmatic 是驾驶员,那么深入使用 borgmatic 的核心就在于如何配置那个 YAML 文件 以及如何管理日常任务。

以下是 borgmatic 的实战使用全指南。


首先,确保你已经安装了 borg,然后安装 borgmatic

Terminal window
# Ubuntu/Debian
sudo apt install borgmatic
# 或者通过 pip 安装最新版
pip install --user --upgrade borgmatic

borgmatic 依赖一个 YAML 配置文件(通常位于 /etc/borgmatic/config.yaml~/.config/borgmatic/config.yaml)。

Terminal window
# 生成一个带注释的完整示例文件
generate-borgmatic-config

一个典型的生产环境配置文件通常包含以下四个部分:

定义备份谁,备份到哪。

location:
# 待备份的本地目录
source_directories:
- /home/user/documents
- /var/www/html
- /etc
# 备份目的地(本地磁盘或远程 SSH 服务器)
repositories:
- /mnt/backup_disk/my_repo
- user@remote-server.com:main_repo
# 排除不需要的文件
exclude_patterns:
- '*.tmp'
- '*/.cache'
- '/home/*/.local/share/Trash'

定义如何加密和压缩。

storage:
# 对应 borg init 的加密模式
encryption_passphrase: "你的复杂密码"
# 压缩算法:lz4 速度最快,zstd 压缩率更高
compression: zstd,3
# 远程备份时使用的 SSH 命令
ssh_command: ssh -i ~/.ssh/id_rsa

这是 borgmatic 最省心的地方,自动清理旧备份。

retention:
# 策略示例:保留最近 7 天的每天备份,最近 4 周的每周备份,最近 6 个月的每月备份
keep_daily: 7
keep_weekly: 4
keep_monthly: 6
# 必须设置前缀,防止误删其他来源的备份
prefix: hostname-

无需手动执行 mysqldump

databases:
- name: my_database_name
type: postgresql
username: postgres

配置完成后,所有的操作都变得非常简单:

操作命令备注
初始化仓库borgmatic init --encryption repokey仅需执行一次
执行备份borgmatic默认执行所有配置好的任务
清理旧备份borgmatic prune根据 retention 策略删除旧档
检查损坏borgmatic check验证仓库完整性
查看列表borgmatic list列出所有已有的备份存档
一键完成borgmatic --create --prune --compact推荐: 备份+清理+回收空间

3.4. 自动化:定时任务 (Cron/Systemd)

Section titled “3.4. 自动化:定时任务 (Cron/Systemd)”

你不需要手动运行备份。通常我们会设置 Systemd TimerCron

borgmatic 通常会附带 Systemd 单元文件。你可以启用它:

Terminal window
sudo systemctl enable --now borgmatic.timer

这会默认每天执行一次备份。


borgmatic 提供了方便的挂载功能,让你像找回 U 盘文件一样找回备份:

  1. 挂载整个仓库

    Terminal window
    mkdir /tmp/my_backup
    borgmatic mount --mount-point /tmp/my_backup
  2. 拷贝你需要的文件: 直接使用 cp 命令从 /tmp/my_backup 拷走文件。

  3. 卸载

    Terminal window
    borgmatic umount --mount-point /tmp/my_backup
    borgmatic delete --archive ... # 删除

特性BorgBackuprsync / rcloneRestic
去重强项 (块级去重)无 (仅文件级同步)支持
加密原生支持需配合其他工具原生支持
挂载支持 (FUSE)不支持支持
性能极快,适合处理大量小文件适合大文件同步内存占用略高于 Borg

简单来说,BorgBackup (简称 Borg) 是一个强大的去中心化、去重备份工具,而 borgmatic 是 Borg 的“高级管家”或配置层,让 Borg 的使用变得更简单、更自动化。

虽然 Borg 很强大,但如果你想实现“每天凌晨 2 点备份、备份前停止数据库、备份后清理旧数据、顺便检查备份完整性”,直接写 Borg 的 Shell 脚本会非常繁琐。borgmatic 就是为了解决这个问题而生的。

  • 声明式配置:使用简单的 YAML 文件替代复杂的命令行参数。
  • 多任务集成:在一个配置文件里同时管理多个备份源和多个目的地。
  • 数据库支持:内置了对 MySQL, PostgreSQL, MongoDB 的支持(备份前自动 dump,备份后自动清理临时文件)。
  • 自动清理 (Pruning):根据保留策略(如:保留最近 7 天,每周一个,每月一个)自动删除旧档案。
  • 一致性检查:自动运行 borg check 确保数据没损坏。
  • 监控钩子:备份成功或失败时发送通知(如 Healthchecks, PagerDuty 等)。
特性BorgBackup (Borg)borgmatic
角色核心工具(后端)封装工具(前端/驱动)
操作方式纯命令行,参数复杂配置文件 (YAML)
自动化需自行编写脚本原生支持定时、清理、检查
数据库备份需手动导出简单配置即可自动备份数据库
适用人群开发者、高级系统管理员追求高效、稳定的系统运维人员

5. 典型工作流示例 (使用 borgmatic)

Section titled “5. 典型工作流示例 (使用 borgmatic)”

如果你安装了 borgmatic,你的备份流程通常只需要两步:

5.1. 第一步:编写配置文件 config.yaml

Section titled “5.1. 第一步:编写配置文件 config.yaml”
location:
source_directories:
- /home/user/data
- /etc
repositories:
- user@remote-storage.com:repo
database_backends:
- postgresql
retention:
keep_daily: 7
keep_weekly: 4
keep_monthly: 6
consistency:
checks:
- repository
- archives

只需执行一行命令,或者将其加入 Cron 任务:

Terminal window
borgmatic --create --prune --compact

这条命令会自动:导出数据库 -> 执行加密备份 -> 删除过期旧备份 -> 整理磁盘空间。


[!question] 部署场景确认 您是准备在个人服务器上部署备份系统,还是在公司生产环境中使用?如果需要,我可以为您提供一份针对特定场景(如备份 Docker 卷或数据库)的详细配置模板。