起因
之前文章分别介绍过 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
不管选哪个:
- 测试还原:每季度真的还原一次到不同机器,验证流程能通
- 3-2-1 规则:3 份数据,2 种媒介,1 份异地
- 加密 key 单独备份:repo 备份了但 key 丢了 = 数据死透了
- 自动 prune 策略:保留 7d / 4w / 12m 之类
- 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 每小时
踩过的坑
-
borg 单写锁卡死:多机器同时备份 → 第二个等待 / 失败。
解决:每机一独立 repo,或者错峰备份。 -
restic prune 慢:TB 级仓库 prune 几小时。改
forget --keep-* --prune-max-unused 5%增量 prune。 -
kopia metadata 损坏:仓库被 unsafe shutdown → 偶尔 corruption。
kopia maintenance --safety=full修复。 -
三者都 case-sensitive:Windows / Mac 用户备份大小写不敏感
文件系统,恢复到 Linux 时可能冲突。 -
加密密码丢了:没有 recovery。所有这类工具都设计成"你忘
密码 = 数据死透了"。一定要写在 password manager + 离线纸质备份。
登录后参与评论。