侧边栏壁纸
博主头像
龍騰博客 博主等级

行动起来,活在当下

  • 累计撰写 114 篇文章
  • 累计创建 31 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

Halo2 博客数据异地备份全流程方案 (深度细节版)

管理员
2026-03-29 / 0 评论 / 0 点赞 / 2 阅读 / 0 字

要实现从 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 data

2. 创建 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 交互模式)

  1. 进入容器内部进行配置(这步和你之前操作类似):

    docker exec -it rclone_manager rclone config
    • n) New remote -> 名字必填 od (脚本以此为准)。

    • Storage -> 输入数字41 选择 Microsoft OneDrive

    • client_id & client_secret -> 直接回车

    • Edit advanced config -> n

    • Option region->1

    • Option tenant-> 直接回车。

    • Use web browser to automatically authenticate rclone with remote?->n

    • Option config_token.

      For this to work, you will need rclone available on a machine that has

      a 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 rclone

      version recommended):

              rclone authorize "onedrive"

      Then paste the result.

      Enter a value..->选择 n


2. 在你的本地电脑上下载 Rclone

如果你电脑上还没有 Rclone,请根据你的系统下载对应的版本:


3. 在本地电脑获取 Token

  1. 在你的本地电脑打开终端(Windows 搜 PowerShellCMD;Mac 搜 Terminal)。

  2. 进入你解压 Rclone 的文件夹,运行 VPS 刚才给你的命令:

    # Windows 示例(如果 rclone.exe 在当前目录)
    .\rclone.exe authorize "onedrive"
    
  3. 浏览器会自动弹出:登录你的微软账号,点击 “接受”“是”

  4. 返回终端看结果:浏览器显示 "Success!" 后,回到你电脑的终端,你会看到一段以 {"access_token":...} 开头的长代码(这就是 Token)。


4. 把 Token 粘贴回 VPS

  1. 全选并复制 电脑终端里那段以 { 开头、以 } 结尾的所有代码。

  2. 回到你的 VPS 窗口(即显示 Enter a value. 的地方)。

  3. result> -> 粘贴刚才在本地电脑得到的 Token 长代码

  4. Option config_type -> 选择 1 (OneDrive Personal or Business)。

  5. Option config_driveid -> 选 2

  6. e) Edit existing remote

    n) New remote

    d) Delete remote

    r) Rename remote

    c) Copy remote

    s) Set configuration password

    q) Quit config-> 选q

输入 q 并按回车,退出 Rclone 配置模式,回到 VPS 的系统命令行。


5.验证“管道”是否通畅

在 VPS 终端输入以下测试命令:

rclone lsd od:/
  • 预期结果:你应该能看到 OneDrive 根目录下的文件夹列表(如 Documents, Pictures 等)。

  • 如果看到了列表:说明 VPS 与 OneDrive 的通信完全正常。

第三阶段:部署上传与清理脚本

逻辑要点:使用 copyto 而非 copy,确保“单文件精准上传”;加入 delete 逻辑确保“5GB 容积率控制”。

  1. 先找到halo 2的备份文件路径为:/root/halo/halo2/backups

  2. 创建脚本nano /root/backup_to_od.sh

  3. 粘贴代码 (已整合路径与报错修复)

    #!/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)

  1. 执行命令crontab -e

  2. 添加配置

    代码段

    0 5 * * 0 /bin/bash /root/backup_to_od.sh > /root/backup_to_od.log 2>&1
    

    (每周日凌晨 5 点,VPS 自动发货,并记录审计日志)


第五阶段:群晖 NAS 同步策略 (最后落地的保险)

核心逻辑:OneDrive 只是“传送门”,群晖才是“保险库”。

  1. Cloud Sync 设置

    • 远程路径:选中 halobackup 文件夹。

    • 同步方向仅下载远程更改(防止 NAS 文件反向误删云端)。

    • 高级设置勾选“当从远程存储空间删除文件时,不要删除本地文件”

      • 意义:VPS 脚本删除了 30 天前的旧云端包,但你的群晖里会一直保留,实现永久归档。

  2. 运行计划

    • 蓝色时间块:周日 06:00 - 12:00。


💡 维护与审计 (针对您的职业习惯建议)

  • 手动测试:您可以随时执行 /bin/bash /root/backup_to_od.sh 观察日志。

  • 配置备份:由于 rclone.conf 包含 Token,建议您偶尔将 /root/rclone-backup/config/rclone.conf 内容手动复制一份存入您的密码管理工具。

0

评论区