云存储同步特殊问题——OAuth 过期、API 限流、对象存储重命名
OAuth Token 过期
现象
GoodSync 日志中出现:
Token expired, refreshing...
Refresh token also expired
Need to re-authorize
原因
OAuth 授权机制中:
- Access Token:有效期短(通常 1 小时),GoodSync 自动刷新
- Refresh Token:有效期长但也会过期或被撤销
GoodSync 的自动刷新机制能覆盖 99% 的场景。但 Refresh Token 过期后,必须重新授权。
解决方案
- GoodSync 主界面 → Job → 选中使用该云存储的作业
- 右键端点 → Account → Re-Authorize(或类似选项)
- 浏览器弹出云服务商的授权页面 → 重新允许
- GoodSync 获得新的 Access Token + Refresh Token
Refresh Token 为什么会过期
| 云服务商 | Refresh Token 有效期 | 说明 |
|---|---|---|
| 长期有效(但账户安全事件时可能被撤销) | 最稳定 | |
| Dropbox | 与账户安全策略相关 | 可能定期失效 |
| OneDrive | 与账户安全策略相关 | 可能失效 |
| Box.com | 长期有效 | 稳定 |
某些情况下(如修改了账户密码、账户触发安全事件),所有 Refresh Token 会被云服务商主动撤销——此时 GoodSync 无法自动恢复,必须手动重新授权。
API 限流
检测
GoodSync 日志中出现:
HTTP 429 Too Many Requests
Rate Limited
Throttled
SlowDown(S3 特有)
GoodSync 的自动应对
GoodSync 内置了指数退避重试:
- 收到 429 后等待 N 秒再重试
- 每次重试失败,等待时间加倍(最多几十秒)
- 重试几次后仍然失败则暂时放弃该文件,继续其他文件
用户侧的缓解措施
- 降低并行线程数:Options → Advanced → Parallel Threads,云存储建议不超过 4
- 增加同步间隔:实时同步改为每 15-30 分钟计划任务
- 拆分大目录:把包含数万文件的大目录拆分成多个小目录,分别用不同作业同步
- 联系云服务商:在 S3/Azure 上可以联系支持团队提高默认配额
各云服务商的典型限流阈值
| 服务 | 默认请求率 | 备注 |
|---|---|---|
| AWS S3 | 每桶 3500 PUT + 5500 GET /秒 | 可申请提高到 10000+ |
| Google Drive | 10,000,000 请求/天 | 通常够用 |
| Dropbox | 500 请求/秒/应用 | 对商业 API 应用可能紧张 |
| OneDrive | 4-8 请求/秒/应用 | 较严格,需要保守配置 |
| Backblaze B2 | 有速率限制 | 具体值见 B2 文档 |
对象存储重命名的临时残留
问题
S3/Azure/B2 等对象存储不支持原地重命名——GoodSync 执行「复制到新键名 + 删除旧键名」。在复制成功、删除旧键之前,新旧两个对象会同时存在。
正常流程:
1. PUT 新键名的对象 → 成功
2. DELETE 旧键名 → 成功
3. 结果:只剩新键名
异常情况:
1. PUT 新键名的对象 → 成功
2. 同步中断(崩溃/断电)
3. 结果:新旧两个对象同时存在
GoodSync 的自动清理
GoodSync 有专门的「孤儿对象清理」机制:
- 下次 Analyze 时检测到同一份内容的新旧两个对象
- 自动删除旧对象(保留新对象)
- 日志中记录清理操作
严重情况:Key 冲突
如果新旧对象的 Key 前缀包含相同路径,可能导致后续同步逻辑混乱。GoodSync 在这种情况下会强制全量重新分析来修正状态。
时间戳在云存储中的兼容性
现象
文件内容没变,但 GoodSync 每次同步都要重新上传。检查 Analyze 结果显示:时间戳不一致。
原因
云存储的时间戳处理方式与本地文件系统不同:
- 某些云存储在上传时自动把时间戳刷新为上传时间
- GoodSync 的时间戳翻译在极少数情况下失效
- 跨时区的设备之间,时间戳比较出现偏移
解决方案
- 在 GoodSync 作业中开启「时间戳翻译」(默认已开启)
- 把 Analysis Mode 切换为「MD5 + Quick Hybrid」
- 全量重新 Analyze 一次(不执行同步),让 GoodSync 重建内部状态文件
- 检查两端设备的系统时间是否一致(相差不应超过 1 分钟)
云存储的特殊限制
文件大小限制
同步前确认目标云存储的单文件上限。超过限制的文件会被 GoodSync 跳过并记录在日志中。
路径长度限制
- OneDrive / SharePoint:400 字符
- Google Drive:约 1024 字符
- S3:无硬限制(但建议 Key < 1KB)
GoodSync 在同步前会检查,超过限制的文件会被跳过。
不支持的功能
| 功能 | 云存储限制 |
|---|---|
| 块级传输 | 仅 GoodSync Storage 原生支持;其他云存储 GoodSync 只能走文件级传输 |
| 符号链接 | 云存储不支持 |
| 权限属性同步 | 云存储的 ACL 模型与本地不同,GoodSync 不做深度映射 |
| 硬链接 | 云存储不支持 |
| MTP 协议 | 云存储完全不涉及 |
通用云存储对接检查清单
- [ ] OAuth 授权已完成并验证过
- [ ] Access Key/Secret Key 的权限是最小化原则
- [ ] GoodSync 作业开启了 Safe Copy(防止中途崩溃)
- [ ] 并行线程数不超过 4(云存储端点)
- [ ] 已配置版本历史(防止云端误删)
- [ ] 定期检查云服务商的 Access Token 授权状态
- [ ] 云存储的访问日志在合规场景下已开启