很多年前在 备份系统 一文中总结了备份的基础知识以及一些常见工具,如今又冒出一些新的开源备份工具,简单总结一下:

  1. 类 GIT 存储:Bup(GIT 兼容)⭐️⭐️⭐️⭐️, BorgBackup(支持加密,图形界面 Pika Backup)⭐️⭐️⭐️, restic(支持加密)⭐️, casync*
  2. 硬链接快照:rsnapshot⭐️⭐️, dirvishstoreBackup(支持去重)*, cronopeteBackInTimeTimeShift
  3. 快照 + 反向增量: rdiff-backup⭐️⭐️⭐️ + rdiff-backup-fs
  4. 增量归档: duplicity(支持加密, 图形界面  Deja Dup)⭐️⭐️⭐️⭐️, dar*(支持加密), flexbackup
  5. C/S 架构: Burp*, Bacula⭐️⭐️, BackupPC⭐️, AmandaBoxBackup

每一类的排序基本是按推荐顺序,⭐️表示 Debian popcon 的排名,比如 Popularity Contest Statistics – Debian Quality Assurance ,* 表示个人觉得值得看看:

  • casync 是 systemd 作者 Lennart Poettering 的作品,设计巧妙,使用方便(不过手册写的有点含糊),但是已经最近这些年开发不活跃了,不知何故,因此建议谨慎使用。
  • storeBackup 使用 MD5(可惜不支持更安全的hash算法)去重,备份文件保持原始文件布局,设计直白可靠,如果喜欢硬链接快照的形式,storeBackup 从设计上比 rsnapshot 更好,但是 rsnapshot 更知名,因此也建议慎用 storeBackup。
  • Duplicity 的流行主要归功于 Gnome 的官方备份程序 Deja Dup,它的备份原理基本上 full tar ball + increment tar ball,如果有一个 tar ball 坏掉了,那就不太妙了,所以个人并不太推荐,倒是更推荐 dar 这个工具,功能很强大,支持稀疏文件,支持增量备份。
  • Burp 是对标 Bacula 的,不过个人试用下来其行为不太符合预期,也许是我没配置好。我对 C/S 架构的备份工具暂无兴趣,请读者自行试用。

第 2、3 类工具都在文件系统上存放了一份快照,也就是说备份目录也是仿照原始目录布局,所以检查备份非常方便,第 1 类工具由于备份存储是类似 GIT objects 的方式,所以没法从文件系统直接查看备份文件,它们都提供了 FUSE mount 能力,可以将备份文件暴露成普通的文件系统,非常方便。

下面挑了几个工具测试它们的备份速度、备份压缩效果、稀疏文件支持情况,原始文件为 18MB 的 /etc 目录。

  • Bup: bup index 0.5s,第一次 bup save 1s,第二次 bup save 0.5s,备份库 4.1MB
  • Borg: 第一次 borg create 0.6s,第二次 borg create 0.6s,备份库 3.1MB (使用 zstd 压缩)
  • Restic: 第一次 restic backup 0.9s, 第二次 restic backup 0.7s, 备份库 3.2MB
  • casync: 第一次 casync make 0.3s,第二次 casync make 0.2s, 备份库 3.3MB
casync make --store=casync-repos --compression=zstd etc-1.caidx /etc
  • storeBackup: 

  • 默认 bzip2 压缩:第一次备份 3s, 备份库 6.3MB;第二次备份 1s,备份库 7.3MB;第三次备份 1s,备份库 8.3MB

  • 使用 zstd 压缩:第一次备份 3s, 备份库 6.3MB;第二次备份 1s,备份库 7.3MB;第三次备份 1s,备份库 8.3MB

  • rdiff-backup: 第一次 backup 1s,第二次 backup 0.3s,第三次 backup 0.3s,备份库 19MB

  • dar: dar -zlzo:3 -c etc-bak -R / -g etc 耗时 0.4s,etc-bak.dar 文件 4MB

Bup、Borg、Restic 都支持 –sparse 选项,恢复文件时可以完美生成稀疏文件,比如备份一个 truncate -s 100M test 文件,恢复后用 du test 确认是 0 字节。casync 和 dar 默认打开了稀疏文件支持,但恢复出来的稀疏文件还是占用了几 KB 磁盘。storeBackup 和 rdiff-backup 都不支持稀疏文件。


后记:知乎给推送了一些相关文章,从之知道三个类 GIT 存储的备份工具:

  1. Kopia 使用 Go 编写,CLI 界面比较复杂的,自带 web UI。支持加密、压缩、稀疏文件。
  2. Duplicacy 使用 Go 编写,支持加密、压缩,不支持稀疏文件,商业使用要收费。Duplicacy 的 Github 主页详细分析了几个竞品,分析的很不错,不过它吹牛说自己按 chunk 切分文件,不打成大的 pack,但看了下好像还是打成 pack 的,多个文件会合并到一个 pack 文件里。在备份符号链接时居然会把目标文件备份进去,而不是符号链接本身,这个 bug 这么多年没发现挺匪夷所思的。CLI 设计的挺逗逼,restore 时不能指定目标路径,只能恢复到源文件所在位置,这脑洞长的不一般啊。
  3. Duplicati C# 写的,也支持加密、压缩,懒的搞个 Mono 编译安装了,没试用。

各个软件的版本如下:

  • bup 0.32
  • borg 1.2.4
  • restic 0.15.1
  • casync-2+git20201210.bd8898e-1.11
  • rdiff-backup 2.2.0
  • storeBackup 3.5
  • dar 2.7.8
  • kopia 20230330.0.0-88f223c6 build: 88f223c6cfa1858fb447fb9150d66c2245939599
  • duplicacy 3.1.0

总结下推荐:

  • GIT 存储风格:Restic or Kopia。bup 不支持加密而且删除老版本要 git gc 重写 pack,有点可怕,Borg 实现好像有点问题,把 1.5GB 的目录备份到一个 500M chunk 一个 300M chunk,而 Restic 和 Kopia 都是切分成 20M 左右。太大的 chunk size 意味着在删除备份的老版本时需要重写大量 chunk。
  • 快照风格:storeBackup,虽然名气比 rsnapshot 小很多,但是省了配置了。 rdiff-backup 不支持压缩,也不支持去重,算了算了。
  • 归档风格:dar,想上传到云存储自己用 rclone 吧。 或者 duplicity 搭配图形界面的 Deja Dup。
  • C/S 风格:估计没人愿意配置这东西🤣

后记 2:

有同学推荐了 deajan 的 backup-bench,这哥们测试的非常专业,但是我在 macOS 上测试 bup-stash 0.12.0 性能很差,第一次备份一个 1.5GB 目录的情况,压缩算法都是 zstd。

  • kopia 0.12.1 build 5227d74996b6520f9f96e4203cfe00b832a60d5f: 5.89s, 855M

  • restic 0.15.1: 8.45s, 860M

  • conserve 23.1.1: 9s, 920M

  • borg 1.2.4: 25.19s, 850M

  • rustic 0.5.0: 26.87s, 849M

  • bupstash 0.12.0: 62s, 843M

borg create -C zstd,3 -v –stats ::bak-1 my-dir bupstash put –no-progress –indexer-threads 8 –threads 8 my-dir

还有一个很年轻的 Rust 写的 bacup 就没测试了,看来 Rust 写的 conserve、rustic、bupstash 都还不太成熟,这类类似 GIT 存储风格的备份程序里还是 restic 和 kopia 最成熟。