备份永远是最后一道防线,所以我给 Homelab 定了一条明确原则:同一份数据至少存三份,其中一份必须在异地。这个项目就是为此做的调研——把市面上能免费使用的云盘逐个看过一遍,最后整理成一套能长期运行下去的方案。
结论:没有任何一家的免费额度能装下我 300GB 的照片。免费层普遍只有 10–20GB,只够放配置、数据库、重要文档这类几 GB 的内容;照片全量要么付费,要么退回移动硬盘做离线副本。
所以方案拆成两层:小体积关键数据走 Backblaze B2 免费层,再加香港 VPS 的 20GB 空余额度,两个副本都不花钱;照片全量暂时用移动硬盘离线保存,等哪天愿意花钱了再考虑 B2 付费(约 $6.95/TB/月)。
自动化部分交给 restic:照片每周日 03:00 运行,配置和数据库每天 03:00 运行,脚本里用 flock -n 防止重复执行,每月用 restic check --read-data-subset=5% 抽查一次。
现在这个项目已归档:结论已经确定,脚本正在运行;剩下的是等照片涨到必须付费的时候,再回来调整参数。
功能
- 逐一对比免费云盘的额度与限制,明确“免费装不下 300GB 照片”的结论
- 把数据拆成小体积关键数据与照片全量两层,分别匹配方案
- 主力副本:restic + Backblaze B2(S3 兼容,先跑 10GB 免费层)
- 第二副本:香港 VPS 已有的 20GB 空余额度,无需额外注册
- 配置、数据库每天备份,照片每周备份,cron 定时 + flock 防止重复执行
- 每月做一次 read-data-subset 抽查,留出恢复演练的流程步骤
技术栈
使用 / 部署教程
1. 创建存储桶
注册 Backblaze B2,新建一个私有 bucket,记下 keyID、applicationKey,以及 bucket 详情里的 S3 endpoint 和 region。先别充值,10GB 免费层足够把流程跑通。
2. 初始化 restic 仓库
export RESTIC_REPOSITORY="s3:s3.<region>.backblazeb2.com/<bucket>"
export AWS_ACCESS_KEY_ID="<keyID>"
export AWS_SECRET_ACCESS_KEY="<applicationKey>"
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic init
密码单独存文件、权限设 600,别和脚本放一起提交到 git。
3. 写备份脚本
#!/usr/bin/env bash
set -euo pipefail
export RESTIC_REPOSITORY="s3:s3.<region>.backblazeb2.com/<bucket>"
export AWS_ACCESS_KEY_ID="<keyID>"
export AWS_SECRET_ACCESS_KEY="<applicationKey>"
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic backup /srv/data/config /srv/data/db --tag daily
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
照片用同一套脚本,换路径和 --tag photos 即可。执行时统一包一层 flock -n /var/lock/restic.lock <脚本>,防止上一次没跑完就开始下一次。
4. 配置定时
crontab -e 加两行:
0 3 * * * flock -n /var/lock/restic-daily.lock /opt/backup/daily.sh
0 3 * * 0 flock -n /var/lock/restic-photo.lock /opt/backup/photos.sh
第二副本同步到香港 VPS 的 20GB 空余目录,可以直接用 restic 多仓库,也可以用 rclone sync。
5. 抽查与恢复演练
restic snapshots
restic check --read-data-subset=5%
restic restore latest --target /tmp/restore-test
每月运行一次,确认能真正还原出文件;只备份不验证等于没有备份。
6. 需要自己实测的部分
B2 / R2 在你这边的上传下载速度,以及免费额度的具体规范——各家会变,确定方案前再核对一下官方定价页。
注意
- RESTIC_PASSWORD 一旦丢失,仓库里的数据就解不开;密码文件和云存储密钥都不要入库或提交,建议额外留一份离线备份。
- 阿里云盘、夸克、百度、123 等只能通过 AList/OpenList 转 WebDAV 这类非官方接口访问,随时可能失效,不要接入自动备份链路。
- 免费额度规则常变:Oracle 需要绑定银行卡,闲置可能被销号,超出配额可能删除数据;每隔一段时间复核一次额度与计费口径。