Brave
@47c132035ed7a1105a867946b99d67af 开源软件研究 公开
讨论 Borg:安全高效的开源备份神器,随时找回硬盘数据

Borg:安全高效的开源备份神器,随时找回硬盘数据

在数据被称为"数字石油"的今天,备份不是选项,而是必选项。如果你正在寻找一款既能省空间、又极其安全、还完全免费的备份软件,那么 BorgBackup(简称 Borg)绝对是你的不二之选。


一、什么是 BorgBackup?

Borg 是一款开源的、支持去重(Deduplication)的归档备份工具。它诞生于 Linux 社区,专为高效安全地存储数据而设计。与 Dropbox 或 Syncthing 这种实时同步软件不同,Borg 的核心目标是版本化存档——不仅要把数据存下来,还要能随时找回"昨天"或"上个月"的某个特定文件。

📌 核心定位对比:

工具类型代表软件核心目标特点
实时同步Dropbox、Syncthing多设备文件同步实时性强,但不保留历史版本
版本化备份BorgBackup数据归档与恢复保留完整历史快照,支持任意时间点恢复
系统镜像Timeshift、Clonezilla系统级完整备份适合操作系统恢复,非用户数据专用

💡 Borg 的名字由来:

Borg 的命名灵感来源于《星际迷航》中的博格人(Borg)——一个通过"同化"来高效整合资源的种族。这恰如其分地描述了 Borg 备份软件的核心能力:将冗余数据"同化"(去重)为高效的统一存储。

🔢 当前版本状态(截至 2026 年初):

版本系列最新版本发布日期状态
Borg 1.4.x1.4.32025-12-02当前稳定版(推荐生产使用)
Borg 1.2.x1.2.92025-08-04旧稳定版(仍受支持)
Borg 2.0.x2.0.0b202025-12-24测试版(请勿用于生产环境)
Borg 1.1.x1.1.182022-06-05已停止支持

⚠️ 重要提醒:Borg 2.0 目前仍处于 Beta 测试阶段,官方明确建议不要在生产环境中使用。如果你需要稳定可靠的备份方案,请使用 Borg 1.4.x 系列。


二、核心黑科技:为什么它比别人快、比别人省?

🧬 数据去重(Deduplication)

这是 Borg 的杀手锏。它采用"块级去重"技术(Content-Defined Chunking)。如果你有一个 1GB 的文件,今天修改了其中 1MB 的内容再次备份,Borg 只会存储那变更的 1MB。这让你可以保留几十个历史版本,却只占用极小的硬盘空间。

📐 去重原理图解:

┌─────────────────────────────────────────────────────────────┐
│                     传统备份方式                              │
├─────────────────────────────────────────────────────────────┤
│  Day 1: [████████████████████] 1GB                          │
│  Day 2: [████████████████████] 1GB(即使只改了 1MB)          │
│  Day 3: [████████████████████] 1GB                          │
│  总计: 3GB                                                   │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│                     Borg 去重备份                            │
├─────────────────────────────────────────────────────────────┤
│  Day 1: [████████████████████] 1GB                          │
│  Day 2: [█]                   1MB(仅存储变更部分)           │
│  Day 3: [██]                  2MB                           │
│  总计: ≈1.003GB                                              │
└─────────────────────────────────────────────────────────────┘

🔍 技术细节深入:

Borg 使用可变长度分块算法(Variable-Length Chunking),而非简单的固定大小切分。这意味着:

  • 📦 每个文件被智能地分割成若干可变长度的数据块(chunks)
  • 🔑 每个块通过哈希函数(默认使用 HMAC-SHA256)生成唯一标识符(chunk ID)
  • 🔄 只有从未见过的块才会被存入仓库,已存在的块仅记录引用
  • ✨ 即使文件开头插入了新内容,后续未变化的部分仍能被正确识别和去重(这是固定分块做不到的)

📊 实际去重效果参考:

备份场景典型去重率说明
日常文档备份70-90%文档修改通常只涉及小部分内容
代码仓库备份80-95%代码变更往往是增量的
数据库备份60-80%取决于数据变化频率
系统配置备份90%+配置文件很少大幅变动

🔐 客户端加密

数据在离开你的电脑前,就会通过强加密算法进行处理。这意味着即便你把备份存在不信任的云服务器上,别人也无法窥探你的隐私。

🛡️ Borg 加密体系详解:

Borg 1.x 系列(传统模式):

  • 加密算法:AES-256-CTR(计数器模式)
  • 认证方式:HMAC-SHA256BLAKE2b-256(密钥模式)
  • 构造方式:Encrypt-then-MAC(EtM),先加密后认证

Borg 2.x 系列(现代 AEAD 模式):

加密模式算法适用场景性能特点
AES-256-OCBAEAD 认证加密有硬件加速的现代 CPU极快(单遍处理)
ChaCha20-Poly1305AEAD 认证加密无 AES 硬件加速的设备纯软件实现,依然很快

🔑 密钥管理机制:

用户密码
    │
    ▼
┌─────────────────────────────────────────┐
│  Argon2 密钥派生函数(256-bit 随机盐)   │
│  ↓                                      │
│  256-bit 密钥加密密钥(KEK)             │
│  ↓                                      │
│  ChaCha20-Poly1305 加密主密钥           │
│  ↓                                      │
│  加密后的密钥 blob(存储在仓库或密钥文件)│
└─────────────────────────────────────────┘

📋 加密模式选择指南:

模式密钥存储位置适用场景安全级别
repokey仓库内(需密码解锁)个人备份、信任存储端⭐⭐⭐
keyfile本地密钥文件企业备份、不信任存储端⭐⭐⭐⭐
repokey-blake2仓库内(BLAKE2b 认证)追求性能的场景⭐⭐⭐
none无加密仅本地可信存储⭐(不推荐)

💡 安全提示: Borg 不实现自己的加密原语,而是依赖经过广泛审计的 OpenSSL 库。基本上所有 2010 年后的 Intel、AMD 和 ARM CPU 都支持 AES 硬件加速(AES-NI),使得加密几乎不影响备份速度。

🛡️ 防篡改保护机制:

Borg 的 AEAD 加密不仅保护数据机密性,还提供完整性验证

  • 所有对象的元数据和数据都经过认证加密
  • 对象 ID 作为关联数据(AAD)绑定到加密过程中
  • 这意味着攻击者无法在不被检测到的情况下:移动、修改、添加或删除任何备份数据
  • 整个数据结构(DAG)被"锚定"到只有客户端控制的密钥上

📦 高效压缩

支持多种压缩方式,进一步榨干存储空间:

压缩算法命令参数压缩率速度适用场景
LZ4--compression lz4⚡ 极快默认选项,日常备份首选
Zstd--compression zstd中-高🚀 很快平衡压缩率与速度的最佳选择
Zstd(高级)--compression zstd,10中等追求更高压缩率
Zlib--compression zlib,6较慢兼容性好
LZMA--compression lzma,6最高🐢 很慢归档存储、带宽极其有限
None--compression none最快已压缩文件(视频、图片)

💡 最佳实践: 对于已经压缩过的文件(如 MP4、JPEG、ZIP),使用压缩反而会浪费 CPU 且几乎无法再减小体积。可以通过排除规则或使用 none 压缩来优化这类文件的备份。

🆕 Zstd 压缩深度介绍:

Zstd(Zstandard)是由 Facebook 开发的现代压缩算法,已成为 Borg 用户的热门选择:

  • 压缩级别范围: 1-22(默认 3)
  • 特点: 在相同压缩率下,速度通常是 Zlib 的 3-5 倍
  • 自适应模式: --compression auto,zstd,10 可智能跳过已压缩文件
  • 推荐配置: zstd,3 适合日常使用,zstd,10 适合长期归档

🌐 远程备份如本地

通过 SSH 协议,你可以像操作本地硬盘一样把数据备份到远程服务器,且传输过程非常顺滑。

🔧 远程备份工作原理:

┌─────────────┐     SSH 隧道(加密)    ┌─────────────┐
│   客户端    │ ◄─────────────────────► │  远程服务器  │
│  (你的电脑)  │                         │  (borg serve)│
│             │  • 身份验证              │             │
│  borg create│  • 数据传输(已压缩+加密)│  仓库存储    │
│             │  • 仅传输变更块          │             │
└─────────────┘                         └─────────────┘

✨ 远程备份的优势:

  • 🔒 传输过程双重加密(SSH + Borg 自身加密)
  • 📉 只传输变更的数据块,大幅节省带宽
  • 🖥️ 支持通过 borg serve 限制远程端权限
  • 🆕 Append-only 模式:远程端只能追加数据,无法删除(防勒索软件)

📝 远程备份命令示例:

# 初始化远程仓库
borg init -e repokey ssh://user@backup-server/path/to/repo

# 创建远程备份
borg create ssh://user@backup-server/path/to/repo::archive-{now} /home/user/documents

三、Borg 与同类工具对比

在选择备份工具之前,了解各工具的优劣势有助于做出最适合自己需求的选择:

特性BorgBackupResticDuplicatiKopia
去重方式块级去重块级去重块级去重块级去重
加密AES-256 / ChaCha20AES-256AES-256AES-256
云存储原生支持❌ 需 rclone✅ S3、B2、Azure 等✅ 多种云服务✅ 多种云服务
SSH 备份✅ 原生支持✅ SFTP
GUI 客户端Vorta、Pika Backup有限内置 Web UI内置 GUI
Windows 支持❌ 不支持
macOS 支持
Linux 支持
内存占用中等中等
成熟度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐(较新)
恢复可靠性极高极高一般待验证

📋 选择建议:

你的需求推荐工具理由
Linux/macOS 本地或 SSH 备份BorgBackup成熟稳定、内存效率高
需要直接备份到 S3/云存储Restic原生云存储支持
Windows 用户且需要简单 GUIDuplicati 或 Kopia跨平台且有图形界面
追求现代 GUI + 云原生Kopia界面友好,但稳定性仍需观察

⚠️ 关于 Duplicati 的提醒: 部分用户反馈 Duplicati 在处理大型备份时存在可靠性问题,恢复成功率不如 Borg 和 Restic。建议在重要数据场景谨慎使用。

⚠️ 关于 Kopia 的提醒: Kopia 是相对较新的工具,功能丰富且界面现代,但有用户报告过仓库损坏问题。如果数据极其重要,建议选择更成熟的 Borg 或 Restic。


四、告别命令行:好用的 GUI 推荐

虽然 Borg 本身是基于命令行的,但对于普通用户,以下图形化工具让备份变得像点外卖一样简单:

🖥️ Vorta(macOS / Linux)

目前最成熟的 Borg 桌面客户端,支持定时自动备份和图形化一键恢复,是桌面用户的首选。

📦 最新版本:v0.11.2(2026 年 1 月发布)

功能特性描述
定时备份支持灵活的自动备份计划
仓库管理可视化创建、浏览和管理本地/远程仓库
恢复方式支持挂载浏览 + 批量提取两种恢复模式
排除规则图形化配置备份包含/排除项
多仓库支持可同时管理多个备份目标
🆕 macOS 26 改进得益于 FSKit 后端,不再需要重启进入恢复模式来启用 macFUSE 内核扩展

📥 安装方式:

# macOS (Homebrew)
brew install vorta

# Linux (Flatpak)
flatpak install flathub com.borgbase.Vorta

# Linux (pip)
pip install vorta

🐧 Pika Backup(Linux / GNOME)

设计非常精美,尤其适合 GNOME 桌面环境和 Linux 新手,操作直观。

📦 最新版本:v0.7.5(2025 年 10 月发布)

功能特性描述
现代设计采用 GTK4 + libadwaita,完美融入 GNOME 桌面
定时备份支持定期自动执行
本地 + 远程支持 USB 设备和 SFTP 远程服务器
加密保护内置密码保护功能
🆕 备份脚本钩子支持在备份前后自动运行自定义脚本
🆕 完整性检查新增仓库完整性验证功能
🆕 电池模式可配置在电池供电时是否允许定时备份

🎉 里程碑: Pika Backup 在 Flathub 上的下载量已超过 100,000 次

📥 安装方式:

# 推荐通过 Flatpak 安装
flatpak install flathub org.gnome.World.PikaBackup

💡 使用提示: Pika Backup 专注于用户数据备份。如需系统级备份(如操作系统恢复),请使用 Timeshift


☁️ BorgBase

如果你懒得自己折腾服务器,这是专门为 Borg 优化的托管云存储服务,提供简单直观的后台管理。

功能特性描述
即开即用无需配置服务器,注册即可使用
免费额度10GB 存储 + 2 个仓库永久免费
付费计划从 \(2/月起(250GB),最高\)7/TB/月
Append-only 模式防止备份被恶意删除(防勒索软件)
备份监控自动检测备份是否过期并发出警报
2FA 安全支持 TOTP 双因素认证
数据中心选择欧盟 / 北美可选,每个仓库可选不同地区
API 支持可通过 API 自动化管理仓库
专业支持由 Borg 开源维护者提供技术支持

💰 BorgBase 定价参考:

方案基础容量弹性容量(按需)月费
免费版10 GB-$0
入门版250 GB-$2/月
标准版1 TB最高 4 TB$7/TB/月(超出部分)
专业版2 TB最高 8 TB$6/TB/月(超出部分)

🤖 Borgmatic:自动化利器

如果你更喜欢命令行但又想简化配置,Borgmatic 是一个强大的 Borg 包装器,通过单一 YAML 配置文件实现备份自动化。

功能特性描述
YAML 配置一个文件定义所有备份策略
数据库集成原生支持 PostgreSQL、MySQL、MariaDB、MongoDB 自动转储
保留策略简单配置保留几个每日/每周/每月备份
监控集成支持 Healthchecks.io、Uptime Kuma 等监控服务
Systemd 集成提供 systemd 定时器,比 cron 更可靠
Docker 支持可在容器中运行,备份其他容器的卷
钩子脚本支持备份前后执行自定义命令

📝 Borgmatic 配置示例:

location:
    source_directories:
        - /home
        - /etc
    repositories:
        - ssh://user@backup-server/./repo

retention:
    keep_daily: 7
    keep_weekly: 4
    keep_monthly: 6

consistency:
    checks:
        - repository
        - archives

hooks:
    before_backup:
        - echo "Starting backup..."
    after_backup:
        - echo "Backup completed!"
    on_error:
        - echo "Backup failed!" | mail -s "Backup Alert" admin@example.com

五、Borg 核心命令速查

掌握以下常用命令,你就能玩转 Borg 的 90% 功能:

🏗️ 初始化仓库

# 本地仓库(带加密)
borg init -e repokey /path/to/backup-repo

# 远程仓库
borg init -e repokey ssh://user@server/path/to/repo

# 创建父目录(如果不存在)
borg init -e repokey --make-parent-dirs ssh://user@server/~/backups/myrepo

📋 加密模式选项:

  • -e repokey:密钥存在仓库中(推荐新手)
  • -e keyfile:密钥存在本地文件(更安全)
  • -e repokey-blake2:使用 BLAKE2b 哈希(更快)
  • -e none:不加密(不推荐)

📤 创建备份

# 基本备份
borg create /path/to/repo::archive-name /path/to/source

# 带进度显示
borg create --progress /path/to/repo::Monday ~/Documents ~/Pictures

# 使用时间戳命名(推荐)
borg create /path/to/repo::{hostname}-{now:%Y-%m-%d_%H:%M} ~/important-data

# 排除特定文件
borg create --exclude '*.pyc' --exclude '__pycache__' /path/to/repo::archive ~/code

# 指定压缩方式
borg create --compression zstd,3 /path/to/repo::archive ~/data

🏷️ 命名占位符:

  • {hostname}:主机名
  • {user}:用户名
  • {now}:当前时间
  • {now:%Y-%m-%d}:格式化时间

📋 查看备份

# 列出所有归档
borg list /path/to/repo

# 列出归档中的文件
borg list /path/to/repo::archive-name

# 查看仓库信息
borg info /path/to/repo

# 查看归档详情
borg info /path/to/repo::archive-name

📥 恢复数据

# 恢复整个归档到当前目录
borg extract /path/to/repo::archive-name

# 恢复特定目录
borg extract /path/to/repo::archive-name home/user/Documents

# 恢复并排除某些文件
borg extract /path/to/repo::archive-name --exclude '*.log'

# 挂载为文件系统浏览(需要 FUSE)
borg mount /path/to/repo::archive-name /mnt/backup
# 使用完毕后卸载
borg umount /mnt/backup

💡 提示: 挂载方式非常适合只需恢复少量文件的场景,可以像浏览普通文件夹一样找到需要的文件。


🧹 清理旧备份

# 预览将被删除的归档(强烈建议先运行!)
borg prune --dry-run --list --keep-daily=7 --keep-weekly=4 --keep-monthly=6 /path/to/repo

# 执行清理
borg prune --list --keep-daily=7 --keep-weekly=4 --keep-monthly=6 /path/to/repo

# 释放磁盘空间(prune 后必须执行)
borg compact /path/to/repo

📋 保留策略选项:

  • --keep-last=N:保留最近 N 个
  • --keep-hourly=N:每小时保留 1 个,共 N 个
  • --keep-daily=N:每天保留 1 个,共 N 个
  • --keep-weekly=N:每周保留 1 个,共 N 个
  • --keep-monthly=N:每月保留 1 个,共 N 个
  • --keep-yearly=N:每年保留 1 个,共 N 个

⚠️ 重要: borg prune 只是标记删除,必须运行 borg compact 才能真正释放磁盘空间!


🔍 其他实用命令

# 比较两个归档的差异
borg diff /path/to/repo::archive1 archive2

# 检查仓库完整性
borg check /path/to/repo

# 删除特定归档
borg delete /path/to/repo::archive-name

# 重命名归档
borg rename /path/to/repo::old-name new-name

⚙️ 环境变量(方便自动化)

# 设置默认仓库
export BORG_REPO=ssh://user@server/path/to/repo

# 设置密码(用于无人值守脚本,注意安全!)
export BORG_PASSPHRASE='your-secret-passphrase'

# 之后可以省略仓库路径
borg create ::archive-{now} ~/data
borg list

⚠️ 安全警告: 将密码写入环境变量或脚本存在安全风险。生产环境建议使用密钥文件或 BORG_PASSCOMMAND 从密钥管理器获取密码。


六、备份策略最佳实践

📐 3-2-1 黄金法则

业界公认的数据保护黄金标准:

┌─────────────────────────────────────────────────────────┐
│                    3-2-1 备份法则                        │
├─────────────────────────────────────────────────────────┤
│  3️⃣  保留 3 份数据副本(1 份原始 + 2 份备份)            │
│                                                         │
│  2️⃣  使用 2 种不同存储介质(如 SSD + 外置硬盘)          │
│                                                         │
│  1️⃣  至少 1 份存放在异地(如云端或远程服务器)           │
└─────────────────────────────────────────────────────────┘

🔧 用 Borg 实现 3-2-1:

副本存储位置实现方式
原始数据本地电脑日常使用
备份 1外置硬盘/NASborg create /mnt/usb-backup::...
备份 2远程服务器/BorgBaseborg create ssh://server/repo::...

🛡️ 进阶策略:3-2-1-1-0

针对勒索软件等现代威胁,安全专家提出了增强版策略:

数字含义实现方式
33 份副本原始 + 2 备份
22 种介质本地硬盘 + 云存储
11 份异地远程服务器或云端
11 份离线或不可变Append-only 模式 / 气隙备份
00 个错误(定期验证)定期运行 borg check

🔐 Append-only 模式配置(防勒索软件):

在远程服务器的 ~/.ssh/authorized_keys 中限制 Borg 命令:

command="borg serve --append-only --restrict-to-path /path/to/repo",restrict ssh-rsa AAAA... user@client

这样即使攻击者获得了客户端的 SSH 密钥,也无法删除已有的备份!


⏰ 推荐备份频率

数据类型备份频率保留策略
工作文档每天 1 次7 日 + 4 周 + 6 月
照片视频每周 1 次4 周 + 12 月
系统配置重大变更后保留最近 10 个
数据库每天 1-4 次7 日 + 4 周

✅ 定期验证清单

验证项目频率命令
仓库完整性每月borg check /path/to/repo
随机文件恢复测试每季度实际恢复几个文件验证
完整恢复演练每年模拟灾难恢复全流程

💡 切记: 未经测试的备份不是真正的备份!定期进行恢复测试是确保备份有效性的唯一方法。


七、适用场景

💻 个人电脑备份

定期对文档、照片和系统配置进行快照,防止误删或硬盘损坏。

推荐配置:

  • 使用 VortaPika Backup 设置每日自动备份
  • 备份到外置硬盘 + BorgBase 云存储
  • 保留策略:7 天 + 4 周 + 6 月

🖥️ 服务器运维

每天自动将数据库镜像、网站源码归档,只需极小的增量带宽。

推荐配置:

  • 使用 Borgmatic 配置自动化备份
  • 集成数据库导出(PostgreSQL/MySQL)
  • 配置 Healthchecks.io 监控备份状态
  • 启用 Append-only 模式防止数据被恶意删除

🏠 家庭 NAS 玩家

配合群晖或自建 OMV 系统,实现多版本容灾。

推荐配置:

  • NAS 本地运行 Borg 服务端
  • 各设备通过 SSH 推送备份
  • 可选:NAS 再同步一份到 BorgBase 实现异地容灾

🏢 企业与团队

多用户环境下的集中备份管理。

推荐配置:

  • 部署专用备份服务器运行 borg serve
  • 使用 keyfile 加密模式,密钥集中管理
  • 配合配置管理工具(Ansible)批量部署客户端
  • 建立定期恢复测试流程

八、常见问题解答

❓ Borg 支持 Windows 吗?

目前 Borg 官方不支持 Windows。Windows 用户可考虑:

  • 在 WSL2(Windows Subsystem for Linux)中运行 Borg
  • 使用支持 Windows 的替代品如 ResticKopia

❓ Borg 2.0 什么时候正式发布?

截至 2026 年初,Borg 2.0 仍处于 Beta 阶段(最新 2.0.0b20)。官方尚未公布正式发布时间。生产环境请使用 1.4.x 系列。

❓ 忘记密码怎么办?

Borg 的加密设计意味着没有后门。如果忘记密码且没有密钥文件备份,数据将永久无法恢复。请务必:

  • 将密码存储在密码管理器中
  • 备份密钥文件到安全位置

❓ 如何备份到云存储(S3/B2)?

Borg 不原生支持云存储,但可以配合 rclone 使用:

# 使用 rclone 挂载云存储
rclone mount remote:bucket /mnt/cloud --vfs-cache-mode full
# 然后正常使用 Borg
borg create /mnt/cloud/repo::archive ~/data

或者直接使用原生支持云存储的 Restic

❓ 备份中断了怎么办?

Borg 具有断点续传能力。如果备份过程中断,只需重新运行相同的 borg create 命令,Borg 会智能识别已上传的数据块,只传输缺失的部分。

❓ 如何从 Borg 1.x 升级到 2.x?

Borg 2.0 使用新的仓库格式(v2),不直接兼容 1.x 仓库。升级步骤:

  1. 使用 borg transfer --upgrader=From12To20 命令迁移数据
  2. 1.x 仓库在 2.0 中只能以只读方式访问
  3. 建议等 2.0 正式发布后再考虑迁移

九、小结

BorgBackup 就像一个"黑洞",不管你塞进去多少数据,它都能通过精妙的算法将其压缩、去重,并用最严密的锁保护起来。

✨ Borg 的核心优势总结:

优势描述
🧬 极致去重块级去重,节省 70-95% 存储空间
🔐 军事级加密AES-256 / ChaCha20 AEAD,零知识加密
🚀 高效传输仅传输变更块,适合异地备份
🆓 完全免费开源软件,无任何限制
📱 友好 GUIVorta、Pika Backup 让备份傻瓜化
🛡️ 久经考验社区活跃,十年发展,稳定可靠

如果你厌倦了昂贵的商业备份软件,不妨尝试这款开源界的常青树。


📚 延伸阅读与资源: