在 RcloneView 中修复云同步校验和不匹配错误
云同步过程中出现的校验和不匹配,通常意味着源端和目标端使用了不同的哈希算法,而不是数据已损坏。以下是诊断和解决此问题的方法。
当 rclone 在云服务商之间同步文件时,会比较校验和以验证传输后的数据与原始数据是否一致。如果源端和目标端服务商使用不同的哈希算法——或者某个服务商根本不返回校验和——rclone 可能会报告不匹配,或不必要地重新传输文件。本指南将说明其原理以及如何在 RcloneView 中解决该问题。

在一个地方管理和同步所有云端
RcloneView 是 rclone 的跨平台 GUI。通过清爽的可视化界面比较文件夹、传输或同步文件,并自动化多云工作流。
- 一键作业:复制 · 同步 · 比较
- 调度器与历史记录,实现可靠的自动化
- 支持 Google Drive、OneDrive、Dropbox、S3、WebDAV、SFTP 等
核心功能免费。Plus 提供自动化功能。
校验和不匹配意味着什么
校验和(或哈希值)是根据文件内容计算出的固定长度字符串。如果两个文件生成相同的校验和,则它们是相同的。Rclone 使用校验和来:
- 验证上传——在传输后确认目标文件与源文件一致。
- 检测变化——在同步过程中,跳过校验和与大小未发生变化的文件。
- 确保完整性——当文件哈希与预期不符时标记为可能损坏。
不匹配意味着一端计算出的哈希值与另一端不一致。这可能表示数据确实已损坏, 但更常见的原因是服务商之间的哈希算法不兼容。
各服务商的哈希差异
不同的云服务商支持不同的哈希算法:
| 服务商 | 支持的哈希算法 |
|---|---|
| 本地磁盘 | MD5、SHA-1、SHA-256(取决于操作系统) |
| Google Drive | MD5 |
| OneDrive | SHA-1、QuickXorHash |
| Dropbox | Dropbox 内容哈希(自定义) |
| Amazon S3 | MD5(ETag,但分块上传时不适用) |
| Backblaze B2 | SHA-1 |
| Azure Blob | MD5 |
| SFTP | MD5、SHA-1(若服务器支持) |
| Wasabi | MD5(ETag) |
| Cloudflare R2 | MD5(ETag) |
当在共享同一哈希算法的服务商之间同步时(例如 Google Drive 的 MD5 到 Azure Blob 的 MD5),校验和比对可以无缝进行。当不存在共同的哈希算法时(例如 Google Drive 的 MD5 与 OneDrive 的 QuickXorHash),rclone 无法直接比较校验和。
Rclone 如何处理不匹配的哈希
Rclone 在哈希比较方面具有一定的智能处理机制:
- 找到共同哈希——rclone 使用共享的算法比较文件,不会出现问题。
- 没有共同哈希——rclone 会回退到比较文件大小和修改时间。大小和时间都相符的文件被视为相同。
- 启用
--checksum标志——rclone 仅使用校验和进行比较(不比较时间)。如果不存在共同哈希,rclone 将重新传输所有文件,因为它无法确认文件是否一致。
第三种情况是导致意外行为最常见的原因:在不兼容的服务商之间启用 --checksum 会强制进行不必要的重新传输。
常见错误场景
场景 1:S3 分块上传的 ETag 不匹配
当你使用分块上传方式将大文件上传到 S3 时,生成的 ETag 并非简单的 MD5 哈希——而是各分块的复合哈希。Rclone 在本地计算出的文件 MD5 值将与 S3 的 ETag 不一致,从而在下次同步时触发不匹配。
解决方法: 这是预期中的行为。Rclone 会尽可能将预期的哈希值存储在元数据中来处理这一问题。如果你发现大文件被重新传输,可以为该特定同步任务安全地使用 --ignore-checksum。