borg vs restic vs kopia:三个加密增量备份工具实测对比

起因

之前文章分别介绍过 borg 和 restic。一个朋友问"我应该选哪个?"
干脆做一个对比实测:同样数据集 + 同样备份策略,跑出真实数字。

三个候选:

  • borg:Python 写的,2014 起,老牌
  • restic:Go 写的,2015 起,现代
  • kopia:Go 写的,2018 起,最年轻,UI 最强

三者都支持:客户端加密、去重、增量、压缩、多 backend。

测试 setup

  • 数据:500 GB(混合:1M 个文件 + 几个大 VM disk)
  • 机器:8 core / 32 GB / NVMe SSD
  • 后端:本地磁盘(避免网络变量)
  • 跑 5 次取均值

1. 首次全量备份

时间 备份大小 CPU 峰值 RAM 峰值
borg 38 min 195 GB 800% (8 core) 1.2 GB
restic 31 min 198 GB 700% 1.8 GB
kopia 24 min 180 GB 850% 2.4 GB

kopia 最快 + 最小(zstd 默认压缩级别更激进)。
borg / restic 接近。

2. 增量备份(改动 5GB)

时间 新写入
borg 1m 50s 1.8 GB
restic 1m 20s 2.0 GB
kopia 0m 55s 1.5 GB

kopia 增量也最快。

3. 还原性能(取 10 个文件)

时间
borg 4s
restic 2s
kopia 2s

borg 单文件还原稍慢(Python 启动开销)。

4. 还原全量

时间
borg 32 min
restic 25 min
kopia 22 min

跟备份时间类似的趋势。

5. 仓库 check(校验完整性)

时间
borg check 8 min
restic check --read-data 18 min
kopia maintenance 6 min

borg / kopia 校验快。restic 默认 check 不读 data;带 --read-data 慢。

6. 大量小文件场景(100 万个 1KB 文件)

备份时间
borg 14 min
restic 12 min
kopia 9 min

kopia 处理 small files 最好。

7. UI / 易用性

borg:CLI only

borg init -e repokey /backup/repo
borg create /backup/repo::$(date +%F) /home /etc
borg list /backup/repo
borg extract /backup/repo::2024-05-24 home/me/important.txt

borgmatic 是它的 YAML wrapper。无原生 GUI。

restic:CLI + fuse mount

restic init -r /backup/repo
restic backup -r /backup/repo /home /etc
restic snapshots
restic mount /tmp/r   # FUSE 挂载浏览

无 GUI 但 fuse mount 让"浏览历史快照" 很方便。

kopia:CLI + Web UI + 跨平台 GUI

kopia repository create filesystem --path=/backup/repo
kopia snapshot create /home /etc
kopia snapshot list
kopia server start --address=0.0.0.0:51515 --insecure   # Web UI

Web UI 浏览快照 / 还原 / 管理 policy 都可视化。
还有 Windows / Mac 客户端 GUI。

8. 多客户端共享仓库

多机器备份到同一仓库(共享 dedup 池):

支持 体验
borg ❌ 单写者(一次一客户端) 复杂:需 borg serve + lock
restic ✅ 多客户端 简单
kopia ✅ 多客户端 简单(甚至有 P2P 模式)

家庭多设备 / 公司多服务器场景 restic / kopia 友好。

9. 远程后端支持

本地 SSH S3 B2 GCS Azure rclone
borg rclone 代理 rclone rclone rclone
restic
kopia webdav

restic / kopia 原生支持云存储更全。

10. 安全 / 加密

三者都 AES + 客户端加密 + 服务端只看到加密块。

加密算法 密钥管理
borg AES-256-CTR + HMAC-SHA256 keyfile / repokey
restic AES-256-CTR + Poly1305-AES 内置 config
kopia AES-256-GCM 多 key 支持

都安全。kopia 用 AEAD 更现代。

11. 资源占用对比

长期运行的 inactive 仓库:

元数据大小 看快照速度
borg 中(chunks index)
restic 慢(大 repo 时)
kopia

restic 在 TB 级仓库的"列出快照"操作会慢,是个已知问题。

选择决策

场景 推荐
单机 / Linux 老手 / 已经在用 borg(稳定 + 成熟)
多机器 + 云后端 + 团队 restic(生态最广)
喜欢 GUI + 跨平台 + 多设备共享 kopia(最现代)
不想折腾 restic
极致性能 kopia

我个人现在新项目首选 kopia,遗留项目继续 restic / borg。

共同 best practice

不管选哪个:

  1. 测试还原:每季度真的还原一次到不同机器,验证流程能通
  2. 3-2-1 规则:3 份数据,2 种媒介,1 份异地
  3. 加密 key 单独备份:repo 备份了但 key 丢了 = 数据死透了
  4. 自动 prune 策略:保留 7d / 4w / 12m 之类
  5. monitor 告警:备份失败要立刻知道(systemd OnFailure / healthchecks.io)

配置示例:kopia + B2

# 第一次
kopia repository create b2 \
    --bucket=my-backups \
    --key-id=00abc... \
    --key=K00... \
    --password=very-strong-password

# 定 policy
kopia policy set --global \
    --keep-latest 10 \
    --keep-hourly 24 \
    --keep-daily 30 \
    --keep-weekly 12 \
    --keep-monthly 24 \
    --keep-annual 5 \
    --compression=zstd

# 备份
kopia snapshot create /etc /home/me/important /srv

# 定时
# systemd timer 每小时

踩过的坑

  1. borg 单写锁卡死:多机器同时备份 → 第二个等待 / 失败。
    解决:每机一独立 repo,或者错峰备份。

  2. restic prune 慢:TB 级仓库 prune 几小时。改 forget --keep-* --prune-max-unused 5% 增量 prune。

  3. kopia metadata 损坏:仓库被 unsafe shutdown → 偶尔 corruption。
    kopia maintenance --safety=full 修复。

  4. 三者都 case-sensitive:Windows / Mac 用户备份大小写不敏感
    文件系统,恢复到 Linux 时可能冲突。

  5. 加密密码丢了没有 recovery。所有这类工具都设计成"你忘
    密码 = 数据死透了"。一定要写在 password manager + 离线纸质备份。

精确评价 共 0 人评价
可复现性
可复现 · 0 不可复现 · 0
文风
文风流畅 · 0 文风晦涩 · 0
立场
支持 · 0 反对 · 0

登录后即可对本帖作出评价。

评论区 0 条 · 所有人可在此交流

登录后参与评论。

还没有评论,来说两句。