要实现从 VPS 到群晖 NAS 的自动化备份,最稳健且高效的方案是利用 Rsync。在vps上用rclone定时备份最新文件到Microsoft OneDrive ,nas通过cloud sync定时获取OneDrive上的文件来实现备份。这种方式不仅传输速度快,而且支持增量备份(只传输有变化的文件)。
第一阶段:容器化环境准备
核心:必须确保配置文件所在的“宿主机文件夹”被完整映射,否则 Rclone 无法保存 Token 更新。
1. 准备目录结构
在你的 VPS 上创建一个专门存放 Rclone 的文件夹:
mkdir -p /root/rclone-backup && cd /root/rclone-backup
mkdir -p config data2. 创建 docker-compose.yaml
新建一个 docker-compose.yaml 文件,填入以下内容:
version: "3"
services:
rclone:
image: rclone/rclone:latest
container_name: rclone_manager
volumes:
- ./config:/config/rclone
- /root/halo/halo2/backups:/data:ro # :ro 表示只读,更安全
environment:
- PHP_TZ=Asia/Shanghai
# 保持容器运行以便我们进去配置
entrypoint: ["/bin/sh", "-c", "sleep infinity"]3. 启动并进行网盘授权
执行以下命令启动容器:
在docker-compose.yaml文件夹下执行
docker compose up -d
第二阶段:OneDrive 远程授权 (最关键步骤)
技术背景:VPS 没有浏览器,必须在本地电脑(Windows/Mac)辅助授权。
1.VPS 端操作 (Docker 交互模式):
进入容器内部进行配置(这步和你之前操作类似):
docker exec -it rclone_manager rclone confign) New remote-> 名字必填od(脚本以此为准)。Storage-> 输入数字41 选择Microsoft OneDrive。client_id&client_secret-> 直接回车。Edit advanced config->n。Option region->1Option tenant-> 直接回车。Use web browser to automatically authenticate rclone with remote?->nOption config_token.For this to work, you will need rclone available on a machine that hasa web browser available.For more help and alternate methods see: https://rclone.org/remote_setup/Execute the following on the machine with the web browser (same rcloneversion recommended):rclone authorize "onedrive"Then paste the result.Enter a value..->选择n
2. 在你的本地电脑上下载 Rclone
如果你电脑上还没有 Rclone,请根据你的系统下载对应的版本:
3. 在本地电脑获取 Token
在你的本地电脑打开终端(Windows 搜 PowerShell 或 CMD;Mac 搜 Terminal)。
进入你解压 Rclone 的文件夹,运行 VPS 刚才给你的命令:
# Windows 示例(如果 rclone.exe 在当前目录) .\rclone.exe authorize "onedrive"浏览器会自动弹出:登录你的微软账号,点击 “接受” 或 “是”。
返回终端看结果:浏览器显示 "Success!" 后,回到你电脑的终端,你会看到一段以
{"access_token":...}开头的长代码(这就是 Token)。
4. 把 Token 粘贴回 VPS
全选并复制 电脑终端里那段以
{开头、以}结尾的所有代码。回到你的 VPS 窗口(即显示
Enter a value.的地方)。result>-> 粘贴刚才在本地电脑得到的 Token 长代码。Option config_type-> 选择1(OneDrive Personal or Business)。Option config_driveid-> 选2。e) Edit existing remoten) New remoted) Delete remoter) Rename remotec) Copy remotes) Set configuration passwordq) Quit config-> 选q
输入 q 并按回车,退出 Rclone 配置模式,回到 VPS 的系统命令行。
5.验证“管道”是否通畅
在 VPS 终端输入以下测试命令:
rclone lsd od:/预期结果:你应该能看到 OneDrive 根目录下的文件夹列表(如
Documents,Pictures等)。如果看到了列表:说明 VPS 与 OneDrive 的通信完全正常。
第三阶段:部署上传与清理脚本
逻辑要点:使用 copyto 而非 copy,确保“单文件精准上传”;加入 delete 逻辑确保“5GB 容积率控制”。
先找到halo 2的备份文件路径为:/root/halo/halo2/backups
创建脚本:
nano /root/backup_to_od.sh粘贴代码 (已整合路径与报错修复):
#!/bin/bash # --- 配置区 --- CONF_DIR="/root/rclone-backup/config" SOURCE_DIR="/root/halo/halo2/backups" REMOTE_NAME="od" REMOTE_FOLDER="halobackup" # --- 执行区 --- # 1. 寻找最新的 .zip 备份文件 LATEST_FILE=$(ls -t $SOURCE_DIR/*.zip | head -n 1) if [ -z "$LATEST_FILE" ]; then echo "未找到备份文件,请检查路径。" exit 1 fi FILE_NAME=$(basename "$LATEST_FILE") echo "检测到最新备份: $FILE_NAME,准备上传..." # 2. 自动化管理:删除 OneDrive 上 30 天前的旧备份 (控制在 5GB 以内) # 先清理,再上传 docker run --rm \ -v "$CONF_DIR":/config/rclone \ rclone/rclone delete "$REMOTE_NAME":"$REMOTE_FOLDER" --min-age 30d # 3. 仅上传最新这一个文件 # 使用 copyto 确保目标路径是 远程名:文件夹名/文件名 docker run --rm \ -v "$CONF_DIR":/config/rclone \ -v "$SOURCE_DIR":/data:ro \ rclone/rclone copyto "/data/$FILE_NAME" "$REMOTE_NAME":"$REMOTE_FOLDER/$FILE_NAME" -v echo "最新备份已成功上传至 OneDrive!"权限赋予:
chmod +x /root/backup_to_od.sh
第四阶段:设定每周计划任务 (Crontab)
执行命令:
crontab -e添加配置:
代码段
0 5 * * 0 /bin/bash /root/backup_to_od.sh > /root/backup_to_od.log 2>&1(每周日凌晨 5 点,VPS 自动发货,并记录审计日志)
第五阶段:群晖 NAS 同步策略 (最后落地的保险)
核心逻辑:OneDrive 只是“传送门”,群晖才是“保险库”。
Cloud Sync 设置:
远程路径:选中
halobackup文件夹。同步方向:仅下载远程更改(防止 NAS 文件反向误删云端)。
高级设置:
勾选“当从远程存储空间删除文件时,不要删除本地文件”。意义:VPS 脚本删除了 30 天前的旧云端包,但你的群晖里会一直保留,实现永久归档。
运行计划:
蓝色时间块:周日 06:00 - 12:00。
💡 维护与审计 (针对您的职业习惯建议)
手动测试:您可以随时执行
/bin/bash /root/backup_to_od.sh观察日志。配置备份:由于
rclone.conf包含 Token,建议您偶尔将/root/rclone-backup/config/rclone.conf内容手动复制一份存入您的密码管理工具。
评论区