打开/关闭菜单
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

利用 Rclone + Crontab 实现 Google Drive / OneDrive 自动异地备份

来自md5.pw
这是此页面的最新修订,它没有已核准修订。

对于 VPS 用户来说,最担心的事情莫过于服务器硬盘损坏(最近有服务器商家就发生了被黑客入侵,导致硬盘数据全部被清除的事件),或者是自己手滑误删了数据库。

搬瓦工提供的快照(Snapshot)虽然好用,但它通常保存在服务商的机房内。如果机房发生灾难性故障(如机房火灾、账号被封),快照也会随之消失。虽然这种可能性很小,但我们还是要小心,而异地备份是数据安全的最后一道防线。

这篇教程将教你使用 Linux 下的 Rclone,配合 Crontab 定时任务,将 VPS 上的关键数据(如 Docker 挂载目录、网站代码、数据库)自动打包并上传到你的 Google Drive 或 OneDrive 网盘中。

准备工作

  • VPS 一台:Debian / Ubuntu / CentOS 均可(本文以 Debian/Ubuntu 为例)。
  • 网盘账号:Google Drive(建议 15G 免费版或无限容量团队盘)或 OneDrive。
  • 本地电脑:你需要在一台有浏览器的电脑(Windows/Mac)上下载 Rclone,用于获取授权 Token(因为 VPS 没有浏览器)。

第一步:安装 Rclone

Rclone 官方提供了一键安装脚本,非常方便。在你的 VPS 终端中执行以下命令:

Bash

sudo -v ; curl https://rclone.org/install.sh | sudo bash

安装完成后,输入 rclone --version,如果能看到版本号,说明安装成功。


第二步:配置 Rclone 连接网盘(关键步骤)

这是最容易卡住的一步。因为 VPS 是没有浏览器的,无法直接弹出网页进行授权,所以我们需要采用 “远程授权” 的方式。

1. 在 VPS 上发起配置

在 VPS 终端输入:

rclone config

按照以下交互提示进行操作(以 Google Drive 为例):

  1. n (New remote) -> 回车。
  2. name: 输入网盘别名,例如 gdrive -> 回车。
  3. Storage: 找到 Google Drive 的编号(通常是 18 左右,或者是输入 drive) -> 回车。
  4. client_id: 留空,直接回车(使用默认)。
  5. client_secret: 留空,直接回车。
  6. Scope: 选择 1 (Full access) -> 回车。
  7. service_account_file: 留空,直接回车。
  8. Use auto config?: 这里非常重要!一定要选 n (No)

此时,VPS 终端会显示一段很长的命令,类似 rclone authorize "drive" "xxxxxxxx..."。复制这段命令。

2. 在本地电脑上获取 Token

  1. 在你的Windows 或 Mac 电脑上下载 Rclone (官方下载地址)。
  2. 解压后,在文件夹内打开 CMD (Windows) 或 终端 (Mac)。
  3. 粘贴刚才从 VPS 上复制的那段命令并回车。
  4. 此时浏览器会自动跳出,登录你的 Google 账号并点击“允许”。
  5. 回到本地电脑的 CMD/终端窗口,你会看到一段生成的 config token。复制这段 Token。

3. 回到 VPS 完成配置

  1. 将 Token 粘贴到 VPS 的终端里 -> 回车。
  2. Configure this as a team drive?: 如果是个人盘选 n,团队盘选 y
  3. 最后确认配置信息,输入 y (Yes, this is OK)。
  4. 输入 q 退出配置界面。

4. 验证连接

输入以下命令,查看网盘根目录下的文件列表。如果能列出文件,说明连接成功。

# gdrive 是你刚才设置的名字
rclone lsd gdrive:

第三步:编写自动备份脚本

我们不能只靠一条命令备份,建议写一个 Shell 脚本,完成“打包压缩 -> 上传 -> 清理旧备份”的全流程。

创建脚本文件:

# 创建目录存放脚本
mkdir -p /root/scripts
vim /root/scripts/backup.sh

在 Vim 中粘贴以下内容(请根据注释修改你的配置):

#!/bin/bash

# ================= 配置区域 =================

# 1. 备份名称(建议用日期)
BACKUP_DATE=$(date +%Y%m%d_%H%M)
ARCHIVE_NAME="backup_${BACKUP_DATE}.tar.gz"

# 2. 需要备份的本地目录(多个目录用空格隔开)
# 例如:备份 /opt/stacks (Dockge数据) 和 /var/www/html (网站数据)
SOURCE_DIRS="/opt/stacks /var/www/html"

# 3. Rclone 远程配置名称:网盘内的文件夹路径
# 这里表示上传到 gdrive 网盘的 vps_backup 文件夹下
REMOTE_DIR="gdrive:vps_backup"

# 4. 临时存放目录
TEMP_DIR="/root/backup_temp"

# ===========================================

# 创建临时目录
mkdir -p "$TEMP_DIR"

echo "[$(date)] 开始备份..."

# 1. 打包压缩
# 使用 tar 命令将源目录打包到临时目录
tar -czPf "$TEMP_DIR/$ARCHIVE_NAME" $SOURCE_DIRS

if [ $? -eq 0 ]; then
    echo "[$(date)] 打包成功: $ARCHIVE_NAME"
else
    echo "[$(date)] 打包失败!"
    exit 1
fi

# 2. 上传到网盘
# 使用 copy 命令上传
rclone copy "$TEMP_DIR/$ARCHIVE_NAME" "$REMOTE_DIR"

if [ $? -eq 0 ]; then
    echo "[$(date)] 上传成功"
  
    # 3. (可选) 删除网盘上 30 天前的旧备份
    # 这一步是为了防止网盘爆满,请谨慎使用
    # rclone delete --min-age 30d "$REMOTE_DIR"
  
else
    echo "[$(date)] 上传失败!"
fi

# 4. 清理本地临时文件
rm -f "$TEMP_DIR/$ARCHIVE_NAME"
echo "[$(date)] 本地清理完成,备份结束。"

保存并退出 (:wq)。然后赋予脚本执行权限:

chmod +x /root/scripts/backup.sh

你可以先手动运行一次脚本,测试是否成功:

/root/scripts/backup.sh

第四步:设置 Crontab 定时任务

脚本没问题后,我们将其加入系统定时任务,实现全自动运行。

输入以下命令编辑定时任务:

crontab -e

在文件末尾添加一行。例如,设置为每天凌晨 3 点 30 分自动备份:

30 3 * * * /bin/bash /root/scripts/backup.sh >/dev/null 2>&1
  • 30 3 * * *:表示每天 03:30 执行。
  • >/dev/null 2>&1:表示不发送邮件通知(如果需要查看日志,可以将输出重定向到文件)。

保存退出即可。


常见问题与注意事项

Q: OneDrive 怎么设置? A: 步骤与 Google Drive 基本一致。在 rclone config 选择 storage type 时搜索 onedrive 即可。同样需要用到“远程授权”的步骤。

Q: 如何恢复数据? A: 如果你的 VPS 挂了,重装系统并安装 Rclone 后,使用 copy 命令把数据拉回来即可: rclone copy gdrive:vps_backup/你的备份包.tar.gz /root/

Q: 数据量很大怎么办? A: 如果数据量达到几十 GB,建议不要每次都全量打包。可以使用 Rclone 的 sync 命令直接同步文件夹结构,而不是打包成 .tar.gz。命令示例:rclone sync /opt/stacks gdrive:vps_sync_folder