Backrest 适用于家庭与 NAS 的备份方案

1657 字
8 分钟
Backrest 适用于家庭与 NAS 的备份方案

前期准备#

概述#

Backrest 是一个基于 restic 构建的、可通过 Web 访问的备份解决方案。Backrest 提供了一个 Web UI,该 Web UI 封装了 restic 命令行界面,可以轻松创建仓库、浏览快照和恢复文件。此外,Backrest 可以在后台运行,并采用有主见的策略来调度快照和编排仓库健康操作。

通过在 restic 之上构建,Backrest 利用了其成熟、快速、可靠和安全的备份功能,同时增加了一个直观的界面。

garethgeorge
/
backrest
Waiting for api.github.com...
00K
0K
0K
Waiting...
restic
/
restic
Waiting for api.github.com...
00K
0K
0K
Waiting...

主要特性#

  • Web 界面:本地或远程访问(非常适合 NAS 部署)
  • 多平台支持
    • Linux
    • macOS
    • Windows
    • FreeBSD
    • Docker
  • 备份管理
    • 导入现有 restic 仓库
    • Cron 定时备份和维护(例如 prune、check、forget 等)
    • 浏览和恢复快照中的文件
    • 可配置通知(Discord、Slack、Shoutrrr、Gotify、Healthchecks)
    • 备份前/后命令钩子,用于执行 shell 脚本
  • 存储选项
    • 兼容 rclone 远程
    • 支持所有 restic 存储后端(S3、B2、Azure、GCS、本地、SFTP 以及 所有 rclone 远程

安装 Backrest#

version: "3.8"
services:
backrest:
image: 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 挂载网盘时配置此项
# - /boot/config/plugins/rclone/.rclone.conf:/root/.config/rclone # Unraid 使用此 rclone 路径
- /path/to/backup/data:/userdata # 备份路径
- /path/to/local/repos:/repos # repos 路径
environment:
- BACKREST_DATA=/data
- BACKREST_CONFIG=/config/config.json
- XDG_CACHE_HOME=/cache
- TMPDIR=/tmp
- TZ=Asia/Shanghai
ports:
- "9898:9898"
restart: unless-stopped

配置 Backrest#

  • 第一次打开需要创建账户和密码;如果在纯内网环境使用,可跳过对外访问相关配置。
  • 在 Plans 中可以添加备份计划,在 Repositories 中可以添加备份仓库。

以 S3 作为 restic 存储后端#

概述#

OpenList 是一个由 OpenList 团队维护的、社区驱动的 AList 分支,旨在通过其韧性和长期治理来保护开源项目免受基于信任的攻击。该项目在 AGPL-3.0 许可下开源,所有代码和服务均在 GitHub 上免费提供,且目前没有付费计划或商业部署。

OpenListTeam
/
OpenList
Waiting for api.github.com...
00K
0K
0K
Waiting...

安装 OpenList#

services:
openlist:
restart: always
volumes:
- '/etc/openlist:/opt/openlist/data'
ports:
- '5244:5244'
- '5245:5245'
environment:
- PUID=0
- PGID=0
- UMASK=022
- TZ=UTC
container_name: openlist
image: 'openlistteam/openlist:latest'

通过 OpenList 挂载网盘为 S3#

此功能是将 OpenList 映射为 S3 协议,可以使用 S3 客户端进行访问与查看,就像 OpenList 可以映射为 WebDAV 一样。

  • 可以是整个 OpenList(根目录),也可以是单独某个文件夹
  1. 如果是第一次使用,先打开 OpenList 后台生成一下 访问客户端 ID访问密钥 保存,然后停止 OpenList,打开配置文件启用 S3 服务

    如果你后续更新访问 ID 和密钥,更新保存,再重启 OpenList 才可以生效

  2. 打开 配置文件,将 enable 字段改成 true 启用 S3 服务

"s3": {
"enable": true,
"port": 5246,
"ssl": false
}
  1. 前两步操作完成后启动 OpenList,进入后台 S3 配置页面,选择希望映射为对象存储桶的路径

    • 左侧是对外显示的存储桶名字,右侧是 OpenList 已有的列表目录路径,如果想将整个根目录全部映射出去可以选择列表中的 root 路径
    • 手动填写可能会出现错误,建议使用右侧 选择 按钮进行选择

OpenList S3 文档

配置 Backrest#

配置 Repositories#

key变量
Repo Name自定义
Repository URIs3:http://s3.example.com:5246/example-bucket
Password自定义
Env VarsAWS_ACCESS_KEY_ID=你的 S3 访问密钥 ID
AWS_SECRET_ACCESS_KEY=你的 S3 访问密钥

配置 Plans#

key变量
Plan Name自定义
Repositorys3:http://s3.example.com:5246/example-bucket
Paths自定义
Backup Flags--pack-size=64
--limit-upload 8000
--limit-download 8000
TIP

--pack-size=64 打包的文件块大小,单位 MB,TB 以下建议 64,TB 以上可考虑 128。
--limit-upload 8000 限制上传速度,单位 KB/s。
--limit-download 8000 限制下载速度,单位 KB/s。

以 rclone 作为 restic 存储后端#

概述#

当目标网盘不直接支持 S3(如 OneDrive、Google Drive、阿里云盘等)时,可以通过 rclone 作为 restic 的后端:在 Backrest 中把仓库地址写成 rclone:<远程名>:<路径> 即可。

rclone
/
rclone
Waiting for api.github.com...
00K
0K
0K
Waiting...

准备 rclone 配置#

  • 在任意主机上执行 rclone config 创建远程(以远程名 cloud 为例)。
  • 运行 rclone config file 可查看 rclone.conf 的实际路径,然后将该文件复制到宿主机 ./backrest/rclone/ 目录。
  • 确保文件名为 rclone.conf,容器内会通过卷挂载到 /root/.config/rclone/rclone.conf
  • 可选:如需自定义路径,可在服务中添加环境变量 RCLONE_CONFIG=/root/.config/rclone/rclone.conf

在 Backrest 中配置 Repositories#

key变量
Repo Name自定义
Repository URIrclone:cloud:/restic(示例:rclone:onedrive:/backups/restic
Password自定义
Env VarsRCLONE_BW_LIMIT=8M
RCLONE_TRANSFERS=4
RCLONE_CHECKERS=8
RCLONE_FAST_LIST=true
TIP
  • RCLONE_BW_LIMIT:限速,支持如 8M8000k
  • RCLONE_TRANSFERS/RCLONE_CHECKERS:并发传输与校验线程,带宽与远端限流允许时可适当提高。
  • RCLONE_FAST_LIST:对部分网盘显著降低列目录开销。

在 Backrest 中配置 Plans#

key变量
Plan Name自定义
Repositoryrclone:cloud:/restic
Paths自定义(如 /userdata/Documents 等)
Backup Flags--pack-size=64
--one-file-system
--tag nas
--exclude-file /config/exclude.txt
TIP
  • 建议在计划中设置 Cron 表达式,避开业务高峰时段(如每日 03:00)。
  • restic ≥ 0.16 可加 --compression auto 在多数远端取得更优的体积/速度平衡。

可选:排除规则(exclude)#

./backrest/config/ 下新建 exclude.txt,并在 Plan 的 Backup Flags 中引用 --exclude-file /config/exclude.txt

# 常见临时/缓存目录
**/.cache/**
**/node_modules/**
**/.venv/**
**/venv/**
**/.git/**
**/.DS_Store
**/Thumbs.db
**/@eaDir/**
**/@Recycle/**
**/Downloads/**
**/tmp/**
TIP

也可在 Backup Flags 直接使用多次 --exclude 指定路径/通配符。

恢复与校验#

  • 恢复:在 Backrest Web UI 的 Snapshots 中选择快照 → BrowseRestore
    • 目标目录必须是容器可写目录(如挂载的 /userdata/restore)。
    • 可按需添加恢复参数(如 --target--include/--exclude)。
  • 校验:在 RepositoriesMaintenance 中添加 check 任务,建议每周执行一次。
    • Check Flags 可用 --read-data-subset=3% 在速度与信心之间取得平衡。

维护与保留策略#

  • 忘记策略(forget):建议按以下之一配置(任选其一,放入 Forget Flags):
    • --keep-daily 7 --keep-weekly 4 --keep-monthly 12
    • --keep-last 30
  • 数据瘦身(prune):在维护任务中勾选/添加 prune,定期清理未引用数据。
  • 一般调度建议:
    • 备份:每日 03:00
    • check:每周日 02:00(带 --read-data-subset=3%
    • forget + prune:每月 04:00

Windows 与权限注意事项#

  • Windows + Docker Desktop:卷路径示例 C:/Backups:/userdata(注意使用绝对盘符)。
  • 确保 Docker 对对应盘符开启文件共享;路径含空格时请使用引号。
  • 若出现权限不足(Permission denied):
    • 确认宿主目录具备写入权限并已挂载到容器。
    • 在 NAS 上可确保目录属主与容器用户匹配,或放宽权限后再试。

常见问题(FAQ)#

  • 初始化仓库失败或超时:
    • 检查远端凭据/网络连通;若是 S3,确认时钟同步避免 RequestTimeTooSkewed
    • rclone 后端检查 rclone.conf 的远程名是否与 URI 一致。
  • repository is locked:在 Maintenance 中执行 unlock,或稍后重试。
  • 恢复失败(目标不可写):确保恢复到挂载进容器的目录,如 /userdata/restore
  • 速度慢:
    • 适当提高 RCLONE_TRANSFERS/RCLONE_CHECKERS,或在高延迟环境使用较大的 --pack-size(64 或 128)。
    • 对带宽紧张时设置 --limit-upload/--limit-downloadRCLONE_BW_LIMIT

参考#

Backrest 适用于家庭与 NAS 的备份方案
https://lunary.cc/posts/backrest-适用于家庭与-nas-的备份方案/
作者
鹤望兰
发布于
2025-08-17
许可协议
CC BY-NC-SA 4.0