From 826c5e7c64d4eb9d93e340fc00f05563b09fbe2e Mon Sep 17 00:00:00 2001 From: chen <546775624@qq.com> Date: Thu, 7 May 2026 12:30:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AD=A6=E4=B9=A0=E7=AC=94?= =?UTF-8?q?=E8=AE=B0=EF=BC=9AGoogle=20Drive=E5=8F=8C=E5=90=91=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E9=85=8D=E7=BD=AE=E4=B8=8E=E9=97=AE=E9=A2=98=E6=80=BB?= =?UTF-8?q?=E7=BB=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- .../Linux本机与Google Drive双向同步配置总结.md | 129 ++++++++++++++++++ 学习笔记/同步脚本问题总结.md | 88 ++++++++++++ 2 files changed, 217 insertions(+) create mode 100644 学习笔记/Linux本机与Google Drive双向同步配置总结.md create mode 100644 学习笔记/同步脚本问题总结.md diff --git a/学习笔记/Linux本机与Google Drive双向同步配置总结.md b/学习笔记/Linux本机与Google Drive双向同步配置总结.md new file mode 100644 index 0000000..edf3608 --- /dev/null +++ b/学习笔记/Linux本机与Google Drive双向同步配置总结.md @@ -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` 直接在目标位置创建文件并粘贴内容。 + +### 问题 3:filters 文件语法错误 +`--max-size 1G` 不是 rclone filters 文件支持的语法,导致 bisync 报错中止。删除该行后还需清除损坏的状态文件: + +```bash +rm -rf ~/.cache/rclone/bisync +~/gdrive_sync.sh +``` + +--- + +*配置日期:2026-05-07* diff --git a/学习笔记/同步脚本问题总结.md b/学习笔记/同步脚本问题总结.md new file mode 100644 index 0000000..4ad273a --- /dev/null +++ b/学习笔记/同步脚本问题总结.md @@ -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`