Linux MC 文件夹全量备份至 Google Drive

Linux 环境下使用 Rclone 定时备份数据至 Google Drive 的完整实操记录

记录一下最近在 Linux 服务器上配置 Rclone 备份的过程。需求场景是:将本地的 Minecraft 服务器存档文件夹,每天定时打包上传到 Google Drive,并自动清理 7 天前的旧备份。这套流程抛开游戏服务端不谈,对于常规的 Web 目录、数据库备份或是类似 ERP 系统的数据灾备也同样适用。

本文记录了从零开始的完整操作步骤,供有类似需求的朋友参考。

零、 适用环境与前提说明

在开始敲命令之前,请先确认一下你的环境是否与本教程匹配:

  1. 操作系统:本教程的测试环境为 Ubuntu 24.04.1 LTS,但通用于绝大多数基于 Debian 或 Ubuntu 的 Linux 发行版。
  2. 服务端运行方式:本教程默认你的 Minecraft(或其他业务)服务端是挂载在 screen 后台运行的。因为我们需要利用 screen 向游戏内发送存盘指令。
  3. ⚠️ 自定义变量提醒:教程代码中涉及的路径(如 /root/mc)、Rclone 配置名(如 gdrive)以及 screen 的会话名称(如 mc_server),都需要你根据自己服务器的实际情况进行替换,千万不要闭着眼睛全盘复制。

一、 准备工作与 Rclone 安装

Rclone 是一款开源的命令行云存储同步工具,支持挂载几乎所有主流的云盘。

1. 登录服务器

使用 SSH 工具(如 Xshell、Termius 或直接使用终端)连接到你的 Linux 服务器。以 root 用户登录或确保你的用户拥有 sudo 权限。

2. 执行安装命令

Rclone 官方提供了一键安装脚本,直接在终端输入并回车即可:

curl https://rclone.org/install.sh | bash

安装完成后,可以输入 rclone version 检查是否安装成功。如果输出了版本号信息,就可以进入下一步。

二、 配置 Rclone 连接 Google Drive

由于 Linux 服务器通常没有图形化浏览器,在授权 Google Drive 时需要借助我们本地的个人电脑(Windows/Mac)进行辅助。

1. 在服务器上启动配置

终端输入:

rclone config

2. 按照提示进行交互式配置(中英对照详解)

接下来终端会连续弹出询问,请按照以下步骤输入:

  • e/n/d/r/c/s/q> n
    (新建一个远程连接 / New remote)
  • name> gdrive
    (为这个连接自定义一个名称,后续命令都会用到这个名字,这里以 gdrive 为例)
  • Storage> 24
    (选择存储类型 / Type of storage to configure。在长长的列表中找到 Google Drive 对应的数字,通常是 24)
  • client_id> 直接回车跳过
    (Google Application Client Id,留空使用 Rclone 默认提供的客户端)
  • client_secret> 直接回车跳过
    (OAuth Client Secret,留空)
  • scope> 1
    (权限范围 / Scope that rclone should use。选 1 代表允许 Rclone 具备完整的读写、删除权限 / Full access all files)
  • service_account_file> 直接回车跳过
    (服务账户文件路径 / Service Account Credentials JSON file path,留空)
  • Edit advanced config? (y/n)> n
    (是否编辑高级配置 / Edit advanced config? 选择 n)
  • Use auto config? (y/n)> n
    (是否使用自动配置 / Use auto config? 这里非常关键,由于服务器没有浏览器,必须选 n)

3. 在本地电脑获取授权 Token

当上一步选择 n 后,服务器终端会显示类似下面这样一段提示:

Execute the following on the machine with the web browser (same rclone version recommended):
        rclone authorize "drive" "eyJzY29wZSI6ImRyaXZlIn0" #需要复制的这行

此时,保持服务器端不要动。

  1. 在你日常使用的 Windows/Mac 电脑上,前往 Rclone 官网下载对应系统的 Rclone。
  2. 解压后,打开电脑自带的终端(Windows 的 CMD 或 PowerShell,Mac 的 Terminal)。
  3. 将服务器提示的那行命令原封不动地复制并在本地终端运行。
  4. 本地电脑会自动打开浏览器,跳转到 Google 的登录界面。登录你的账号并点击“允许”授权。
  5. 授权成功后,网页会提示 Success。回到本地终端,你会看到生成了一大段以 {"access_token": ...} 开头的代码。(也有可能直接就是一大串字符)

4. 将 Token 粘贴回服务器

  1. 完整复制本地终端生成的那段 JSON 代码。
  2. 回到服务器终端,在 config_token> 提示符后粘贴进去,回车。
  3. Configure this as a Shared Drive (y/n)> n (是否配置为团队盘,个人盘选 n)
  4. y/e/d> y (确认配置无误并保存 / Yes this is OK)
  5. e/n/d/r/c/s/q> q (退出配置界面 / Quit config)

5. 验证连接

输入以下命令查看网盘根目录内容:

rclone lsd gdrive:

注意: 名称后面的冒号 : 不能省略。如果能正常列出网盘里的文件夹,说明连接已彻底打通。如果里面没文件夹,输出为空也是正常的。

三、 编写自动化备份脚本

直接通过网络流式传输零散文件容易受网络波动影响,稳妥的做法是:在服务器本地打包压缩 -> 上传到云端 -> 清理本地与云端的旧文件。

我们来写一个 Shell 脚本执行这些操作。

1. 创建脚本文件

nano /root/backup_task.sh

2. 填入脚本逻辑

将以下代码粘贴进去(请根据实际情况修改路径):

#!/bin/bash

# 基础变量配置
SCREEN_NAME="mc_server"       # 运行服务端的 screen 会话名称
SOURCE_DIR="/root/mc"         # 需要备份的源文件夹绝对路径
LOCAL_TMP_DIR="/root"         # 本地存放压缩包的临时目录
REMOTE_DIR="gdrive:MC_Backup" # Rclone配置名称:网盘内的存放目录
KEEP_DAYS=7                   # 备份文件保留天数

# 生成带时间戳的文件名,格式如 mc_backup_20260511.tar.gz
DATE_STR=$(date +%Y%m%d)
BACKUP_FILENAME="mc_backup_$DATE_STR.tar.gz"

# 暂停服务写入(保证数据完整性)
# 向服务端发送广播,并强制内存数据落盘,暂停自动保存
screen -S $SCREEN_NAME -X stuff "say 系统准备备份,可能有轻微卡顿。$(printf \r)"
screen -S $SCREEN_NAME -X stuff "save-all$(printf \r)"
sleep 3
screen -S $SCREEN_NAME -X stuff "save-off$(printf \r)"

# 执行本地打包
# 使用 tar 打包压缩,通过 --exclude 排除不需要备份的日志文件夹减小体积
tar -czf $LOCAL_TMP_DIR/$BACKUP_FILENAME --exclude="logs" $SOURCE_DIR

# 恢复服务写入
screen -S $SCREEN_NAME -X stuff "save-on$(printf \r)"
screen -S $SCREEN_NAME -X stuff "say 备份打包完毕,已恢复正常。$(printf \r)"

# 上传与生命周期管理(转入后台执行)
# 使用 nohup 将网络传输任务放入后台,避免因终端断开导致上传中断
# --bwlimit 2M 限制上传带宽为 2MB/s,防止触发 Google Drive 的 API 频率限制 (403 Quota exceeded)
nohup bash -c "
# 第一步:上传新生成的压缩包
/usr/bin/rclone move $LOCAL_TMP_DIR/$BACKUP_FILENAME $REMOTE_DIR --bwlimit 2M && 

# 第二步:如果上传成功,则删除云端超过 7 天的旧备份
/usr/bin/rclone delete $REMOTE_DIR --min-age ${KEEP_DAYS}d --include 'mc_backup_*.tar.gz' && 

# 第三步:清理本地可能残留的旧压缩包
find $LOCAL_TMP_DIR -name 'mc_backup_*.tar.gz' -mtime +$KEEP_DAYS -exec rm -f {} ;
" > /tmp/rclone_upload.log 2>&1 &

编辑完成后,按 Ctrl + O 然后回车保存,按 Ctrl + X 退出。

3. 赋予脚本执行权限

Linux 下新建的脚本默认不能直接运行,需要加权:

chmod +x /root/backup_task.sh

四、 设置 Cron 计划任务(定时执行)

我们需要让系统在每天凌晨业务低谷期自动运行这个脚本。在 Linux 中,这通过 crontab 工具实现。

1. 打开定时任务配置

crontab -e

(如果是首次运行,系统会让你选择编辑器,输入数字 1 选择 nano 即可)

2. 添加定时规则

在文件最末尾另起一行,添加如下内容:

0 3 * * * /bin/bash /root/backup_task.sh

规则解释: 前面的五个位置分别代表 分钟 小时 日 月 星期。0 3 * * * 的意思就是每天的 03:00 整执行后面的命令。

保存并退出。系统会提示 crontab: installing new crontab,说明定时任务已生效。

五、 测试与验证

配置到这里,体系已经搭建完毕,但必须进行人为干预测试,以确认流程畅通。

1. 手动触发脚本

在终端运行:

./root/backup_task.sh

观察服务端的控制台日志,确认 save-allsave-off 等指令已正确传递。

2. 监控后台上传

脚本在打包完成后,会将上传任务挂载到后台。我们可以通过查看日志了解上传进度:

tail -f /tmp/rclone_upload.log

如果不报错且没有卡住,按 Ctrl + C 退出日志查看模式即可。

3. 验证最终结果

估算一下上传所需的时间,稍后执行查看命令:

rclone ls gdrive:MC_Backup

如果在列表中看到了带有今天日期后缀的 .tar.gz 文件,说明整个自动化备份闭环已经成功建立。

排错建议:
如果在上传日志中频繁看到 403 Quota exceeded,这是 Google API 对免费通道的限流。确保脚本中的 --bwlimit 2M 没有被删掉,细水长流是公用 API 通道最稳妥的策略。如果依然报错,可以考虑去 Google Cloud Console 申请属于自己的 Client ID。