块级传输引擎——为什么 GoodSync 比普通同步快得多
文件级 vs 块级:同步效率的本质差异
普通文件同步工具的工作方式很简单——对比两端文件的时间戳和大小,如果发现有变动,就把整个文件重新传输过去。对于几十 KB 的文档文件,这个方案足够用了;但对于虚拟机镜像(动辄几十 GB)、视频素材(几 GB)、打包的归档文件这类大文件,哪怕只修改了其中几个字节,也需要重新传输整个文件,造成巨大的带宽浪费。
GoodSync 采用的块级传输则是另一种思路。它先在两端分别对文件进行分块哈希——把文件按固定大小(通常是几 KB 到几 MB)切成若干块,每块计算一个哈希值,然后对比两端的哈希列表。只有那些哈希值不一致的块才会被传输,两端哈希一致的块直接复用。

块级传输的典型场景
大文件部分修改
假设一个 10GB 的虚拟机镜像文件 vmdk,只在中间某个块发生了变更:
- 文件级工具:重新传输 10GB
- GoodSync 块级:只传输变更的那一个块(约 1-4MB)
断点续传
块级传输天然支持断点续传——传输中断后,只需要重新校验哪些块已经成功、哪些还需要传输,不需要从头开始。
时间戳保持
在块级传输完成后,GoodSync 会把目标文件的修改时间设置为源文件的时间戳,确保文件级对比工具也能正确判断两端一致。
块级传输的实现前提
块级传输虽然高效,但也有一些前提条件需要满足:
- 两端都要有 GoodSync 引擎:块哈希的计算需要在两端分别进行。如果一端是纯 WebDAV/FTP 服务器而没有 GoodSync,GoodSync 无法在远端执行分块哈希,此时会退回到文件级传输。
- 计算开销:对大文件计算大量哈希值本身也需要时间和 CPU 资源,GoodSync 在配置选项中允许调整块大小以平衡计算和传输开销。
- 并行线程:GoodSync 支持多线程并行传输不同的数据块,这也是大文件同步加速的关键。
安全附加:块级 MD5 校验
GoodSync 在块级传输时,除了用哈希判断哪些块需要传输,还可以在传输完成后对目标端文件做一次 MD5 全量校验,确认所有块拼接后的文件与源文件完全一致。这是一个可选但推荐开启的特性,尤其是在传输重要数据时。