添加学习笔记:Google Drive双向同步配置与问题总结

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-07 12:30:26 +08:00
parent 0a2317c40c
commit 826c5e7c64
2 changed files with 217 additions and 0 deletions
@@ -0,0 +1,129 @@
# Linux 本机与 Google Drive 双向同步配置总结
## 实现的功能
本机文件夹与 Google Drive 文件夹之间的**全自动双向同步**:
- 本机路径:`/home/chen/AI-document/学习笔记`
- Google Drive 路径:`gdrive:学习笔记`
- 同步方向:双向(任意一侧的新增、修改、删除都会同步到另一侧)
- 触发方式:每 15 分钟自动执行一次,也可手动触发
- 冲突处理:以修改时间较新的文件为准
---
## 实现方式
### 核心工具:rclone
[rclone](https://rclone.org/) 是一个开源命令行工具,支持与数十种云存储服务同步文件,包括 Google Drive。本方案使用其 `bisync`(双向同步)功能。
### 整体架构
```
本机文件夹 ⇄ rclone bisync ⇄ Google Drive
```
cron 定时任务每 15 分钟调用一次同步脚本,脚本调用 rclone bisync 执行双向同步,结果写入日志文件。
---
## 配置步骤
### 1. 安装 rclone
```bash
curl https://rclone.org/install.sh | sudo bash
```
### 2. 配置 Google Drive 远程
```bash
rclone config
```
交互式配置过程:
- 新建远程,命名为 `gdrive`
- 类型选 `drive`Google Drive,选项 24
- client_id 和 client_secret 留空(使用内置密钥)
- scope 留空(默认完整访问权限)
- 使用浏览器完成 OAuth 授权
- 不配置为 Shared Drive
配置完成后可用 `rclone lsd gdrive:` 验证连接。
### 3. 同步脚本
文件位置:`~/gdrive_sync.sh`
脚本主要逻辑:
- 使用锁文件防止多个实例同时运行
- 自动检测是否为首次运行,首次运行时加 `--resync` 初始化基准
- 常规运行使用 `rclone bisync`,冲突以较新文件为准
- 同步失败时自动尝试 `--resync` 自修复
- 日志超过 500 行时自动轮转
核心同步命令:
```bash
rclone bisync "$LOCAL_DIR" "$REMOTE_DIR" \
--log-level INFO \
--log-file "$LOG_FILE" \
--conflict-resolve newer \
--filters-file "$HOME/.gdrive_sync_filters"
```
### 4. 过滤规则
文件位置:`~/.gdrive_sync_filters`
默认排除以下内容:
- 系统文件:`.DS_Store``Thumbs.db``desktop.ini`
- 临时文件:`*.tmp``*.temp``~$*``*.swp`
> 注意:`--max-size` 不是过滤文件支持的语法,不能写在 filters 文件里,如需限制文件大小请在命令行参数中添加。
### 5. 定时任务(cron
```bash
crontab -e
```
添加:
```
*/15 * * * * /bin/bash /home/chen/gdrive_sync.sh >> /dev/null 2>&1
```
---
## 日常使用
| 操作 | 命令 |
|------|------|
| 手动触发同步 | `~/gdrive_sync.sh` |
| 查看同步日志 | `cat ~/.gdrive_sync.log` |
| 查看定时任务 | `crontab -l` |
| 修改定时任务 | `crontab -e` |
---
## 遇到的问题与解决方法
### 问题 1:curl 安装脚本管道卡住
安装命令 `curl ... | sudo bash` 执行完后终端看起来无响应,实际上 rclone 已安装成功。按 `Ctrl+C` 中断后运行 `rclone version` 确认即可。
### 问题 2:脚本文件找不到
直接 `cp gdrive_sync.sh ~/` 因文件不在当前目录而失败。解决方法是用 `nano ~/gdrive_sync.sh` 直接在目标位置创建文件并粘贴内容。
### 问题 3filters 文件语法错误
`--max-size 1G` 不是 rclone filters 文件支持的语法,导致 bisync 报错中止。删除该行后还需清除损坏的状态文件:
```bash
rm -rf ~/.cache/rclone/bisync
~/gdrive_sync.sh
```
---
*配置日期:2026-05-07*
+88
View File
@@ -0,0 +1,88 @@
# rclone bisync 同步脚本问题总结
*记录日期:2026-05-07*
---
## 问题一:锁文件僵死导致任务被跳过
### 现象
日志持续出现:
```
⚠️ 另一个同步任务正在运行,跳过本次。
```
手动运行脚本也无法执行,所有 cron 触发的任务全部跳过。
### 原因
rclone bisync 在上一次同步过程中因网络超时异常退出,但锁文件 `/tmp/gdrive_sync.lock` 没有被正常清除,导致后续所有任务误判为"有实例正在运行"而跳过。
### 临时解决方法
```bash
rm -f /tmp/gdrive_sync.lock
~/gdrive_sync.sh
```
### 长期修复方案
在脚本中加入锁文件超时检测:锁文件存在超过 600 秒(10 分钟)自动视为僵死并清除,不再需要手动干预。
---
## 问题二:网络超时连接失败
### 现象
日志出现:
```
CRITICAL: Failed to create file system for destination "gdrive:学习笔记":
couldn't find root directory ID: dial tcp 142.250.204.42:443: i/o timeout
```
### 原因
访问 Google API 服务器(googleapis.com)网络不通,导致 rclone 无法建立连接,同步直接失败退出。
### 临时解决方法
确保网络可以访问 Google 服务,或配置代理:
```bash
export HTTPS_PROXY=http://127.0.0.1:代理端口
~/gdrive_sync.sh
```
### 长期修复方案
脚本中加入同步前网络检测 + 重试机制:
- 连不上时每 30 秒重试一次,最多重试 3 次
- rclone 参数加入 `--timeout 60s``--contimeout 30s``--retries 3`
- 超过重试次数则记录日志,等待下一个 cron 周期,不阻塞进程
---
## 改进前后对比
| 问题 | 旧版本 | 新版本 |
|------|--------|--------|
| 锁文件卡死 | 永久阻塞,需手动删除 | 超过 10 分钟自动清理 |
| 网络超时 | 直接失败退出 | 重试 3 次,间隔 30 秒 |
| 连接参数 | 无超时设置 | 60s 超时 + 自动重连 |
| 状态损坏 | 需手动 --resync | 失败后自动 --resync |
---
## 同步配置概览
- **同步工具**rclone bisync(双向同步)
- **本机目录**`/home/chen/AI-document/学习笔记`
- **Google Drive 目录**`gdrive:学习笔记`
- **自动同步频率**:每 15 分钟(cron 任务)
- **日志位置**`~/.gdrive_sync.log`
- **锁文件位置**`/tmp/gdrive_sync.lock`