一天折腾三个备份工具,我的最终选择是…

先说答案,Backrest

前言

其实…想折腾很久了,这次就借CC炸掉的契机(虽然我没CC)研究一下备份吧

我之前的备份方式尝试过Rclone+定时脚本和Syncthing(包括国内二开的微力同步)。Rclone的方式其实还行,主要添加备份任务不方便,另外…我那可怜的E5终究还是远离了我。Syncthing呢,属于是看起来很美,全平台多设备同步,但是众所周知国内这大内网环境,设备之间想直连属实是比较困难还是得自建中继服务器和发现服务器。而且,占用资源不小,之前备份IMMICH扫盘的时候卡得我都连不上自家小主机,最离谱的是之前丫从学校到家里传文件网速300k,查了半天没查出个好歹还以为被运营商限速了,结果关掉微力同步就正常了。

选型

总之,经过上面的折腾,我对理想备份工具的要求大概有下面几点

  • 有WEBUI,界面尽可能好看
  • 性能尽可能高,需要支持定时任务和增量备份
  • 支持SFTP/FTP(因为现在拿Hostbrr的存储盒当备份)

然后筛选了一下筛出了仨,Kopia,Duplicacy,Backrest,下面是Gemini整理的一个对比仅供参考,比如我就愣是没弄明白Kopia UI体验好的评价是怎么来的

特性 Kopia Duplicacy Backrest(Restic)
核心引擎 Kopia Duplicacy Restic
开源协议 完全开源(Apache 2.0) ⚠️部分开源/商业(CLI 个人免费,Web版收费) 完全开源(GPLv3 / Restic为BSD)
收费模式 免费 CLI个人免费,Web UI需购买许可证 (年费制) 免费
用户界面 (GUI) 内置KopiaUI(桌面版) 和 Web UI,开箱即用 官方 Web UI (收费),另有第三方 GUI 专为 Restic 设计的现代化​Web UI,操作便捷
去重技术 变长分块 (Content-Defined Chunking) 无锁去重(Lock-Free Deduplication),支持多客户端并发写入 变长分块 (CDC),优秀的去重率
存储后端支持 丰富 (S3, B2, GCS, Azure, SFTP, WebDAV, 本地) 极丰富(原生支持广泛,包括许多网盘) 丰富 (原生支持 S3, B2, SFTP, REST 等,可借 rclone 扩展)
加密方式 AES-256-GCM / ChaCha20-Poly1305 AES-256-GCM AES-256-CTR + Poly1305
快照挂载 ✅ 支持 (可将快照挂载为本地磁盘浏览) ❌ 不直接支持 (需恢复操作) ✅ 支持 (通过 Web UI 浏览或 Restic mount)
主要优势 速度极快,UI 体验好,完全免费,策略管理灵活 多客户端并发备份极其强大,抗网络波动能力强 生态成熟(Restic),Backrest 补足了 UI 短板,稳定可靠
主要劣势 相对较新,部分高级功能文档较少 Web UI 收费,CLI 命令参数较复杂 大量小文件备份速度略慢于 Kopia,元数据缓存占用较高
适用人群 追求免费、高性能、有图形化需求的个人/极客 需要多台电脑同时备份到同一云端,且预算充足的用户 喜欢 Restic 的稳定性但需要好用 Web UI 的用户

最后经过实际体验后吧,Kopia的UI太丑了…Duplicacy其实不错,功能完善界面美观,唯一的问题就是用起来太卡了,切个页面都得好几秒,遂放弃。

Backrest吧,功能够用性能够用页面够用,目前用下来唯一的缺点就是配置太特么复杂了,添加个仓库还不能自己选,必须输入它指定格式的字符串,哦对Backrest还支持原生中文,虽然汉化不是很完全但是至少有

截图对比

Kopia

仓库

image

设置

image

image

仓库

image

Duplicacy

仪表盘

image

支持的存储

image

定时任务

image

Backrest

image

image

一个巨简单的Backrest部署教程

安装

Docker-Compose文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
version: "3.8"
services:
backrest:
image: ghcr.io/garethgeorge/backrest:latest
container_name: backrest
hostname: backrest
volumes:
- ./backrest/data:/data
- ./backrest/config:/config
- ./backrest/cache:/cache
- ./backrest/tmp:/tmp
- ./backrest/rclone:/root/.config/rclone # 挂载 rclone 配置(在使用 rclone 远程时需要)
- /path/to/backup/data:/userdata # 挂载本地路径以进行备份
- /path/to/local/repos:/repos # 挂载本地仓库(远程存储可选)
environment:
- BACKREST_DATA=/data
- BACKREST_CONFIG=/config/config.json
- XDG_CACHE_HOME=/cache
- TMPDIR=/tmp
- TZ=America/Los_Angeles
ports:
- "9898:9898"
restart: unless-stopped

Docker CLI

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
docker run -d \
--name backrest \
--hostname backrest \
--restart unless-stopped \
-p 9898:9898 \
-e BACKREST_DATA=/data \
-e BACKREST_CONFIG=/config/config.json \
-e XDG_CACHE_HOME=/cache \
-e TMPDIR=/tmp \
-e TZ=America/Los_Angeles \
-v "$(pwd)/backrest/data:/data" \
-v "$(pwd)/backrest/config:/config" \
-v "$(pwd)/backrest/cache:/cache" \
-v "$(pwd)/backrest/tmp:/tmp" \
-v "$(pwd)/backrest/rclone:/root/.config/rclone" \
-v "/path/to/backup/data:/userdata" \
-v "/path/to/local/repos:/repos" \
ghcr.io/garethgeorge/backrest:latest

一键安装脚本(安装到系统而不是Docker)

1
2
mkdir backrest && tar -xzvf backrest_Linux_x86_64.tar.gz -C backrest
cd backrest && ./install.sh

配置

实例ID随便写,取消勾选禁用身份验证,在下方添加用户那添加一个用户

image

提交之后会强制你输入一次账号密码,接下来点击添加仓库

image

这URL我是真的懒得看,所以我直接把文档丢GPT了,另外备份本机倒是可以直接选,但是我丫都备份了备份本机干啥

1
阅读https://restic.readthedocs.io/en/latest/030_preparing_a_new_repo.html#preparing-a-new-repository,帮我生成一个合格的仓库URL,我使用...信息是...

然后新增调度计划,计划看着填,仓库选之前的,备份调度其实就是备份频率,下边那个Retention Policy是保留多少,比如保留几天,By Count保留多少份,None不保留

image