Linux MC 文件夹全量备份至 Google Drive
- Linux
- 20小时前
- 13热度
- 0评论
Linux 环境下使用 Rclone 定时备份数据至 Google Drive 的完整实操记录
记录一下最近在 Linux 服务器上配置 Rclone 备份的过程。需求场景是:将本地的 Minecraft 服务器存档文件夹,每天定时打包上传到 Google Drive,并自动清理 7 天前的旧备份。这套流程抛开游戏服务端不谈,对于常规的 Web 目录、数据库备份或是类似 ERP 系统的数据灾备也同样适用。
本文记录了从零开始的完整操作步骤,供有类似需求的朋友参考。
零、 适用环境与前提说明
在开始敲命令之前,请先确认一下你的环境是否与本教程匹配:
- 操作系统:本教程的测试环境为
Ubuntu 24.04.1 LTS,但通用于绝大多数基于 Debian 或 Ubuntu 的 Linux 发行版。 - 服务端运行方式:本教程默认你的 Minecraft(或其他业务)服务端是挂载在
screen后台运行的。因为我们需要利用 screen 向游戏内发送存盘指令。 - ⚠️ 自定义变量提醒:教程代码中涉及的路径(如
/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" #需要复制的这行
此时,保持服务器端不要动。
- 在你日常使用的 Windows/Mac 电脑上,前往 Rclone 官网下载对应系统的 Rclone。
- 解压后,打开电脑自带的终端(Windows 的 CMD 或 PowerShell,Mac 的 Terminal)。
- 将服务器提示的那行命令原封不动地复制并在本地终端运行。
- 本地电脑会自动打开浏览器,跳转到 Google 的登录界面。登录你的账号并点击“允许”授权。
- 授权成功后,网页会提示 Success。回到本地终端,你会看到生成了一大段以
{"access_token": ...}开头的代码。(也有可能直接就是一大串字符)
4. 将 Token 粘贴回服务器
- 完整复制本地终端生成的那段 JSON 代码。
- 回到服务器终端,在
config_token>提示符后粘贴进去,回车。 - Configure this as a Shared Drive (y/n)>
n(是否配置为团队盘,个人盘选 n) - y/e/d>
y(确认配置无误并保存 / Yes this is OK) - 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-all 和 save-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。
