Loading... # rclone 实现 4 倍于 rsync 的网络文件同步速度 # 一、问题背景 ## 1. 场景描述 过去几年里,作者一直使用外接 Thunderbolt NVMe SSD 在工作场所之间传输视频和项目数据。 ## 2. 痛点分析 同步过程始终非常缓慢。在典型的工作日中,作者可能会生成一个包含 500-1000 个单独文件的项目文件夹,其中数十个文件大小在 1-10 GB 之间。 ## 3. 硬件环境 - Thunderbolt 驱动器:速度超过 5 GB/sec - 网络连接:10 Gbps,理论速度 1 GB/sec - 存储源:Arm NAS 上的 NVMe 卷(名为 mercury) # 二、原有方案:rsync ## 1. 使用的命令 ```bash rsync -au --progress --stats /Volumes/mercury/* /Volumes/Shuttle/Video_Projects ``` 参数说明: - -a:归档模式,保留文件属性 - -u:仅更新较新的文件 - --progress:显示传输进度 - --stats:显示统计信息 ## 2. 性能测试 删除了一个项目后运行 rsync 复制: ```bash $ time rsync -au --progress --stats /Volumes/mercury/* /Volumes/Shuttle/Video_Projects Radxa Orion O6/ Radxa Orion O6/.DS_Store 6148 100% 4.80MB/s 00:00:00 (xfer#1, to-check=1582/3564) ... 254240026 100% 114.11MB/s 00:00:02 (xfer#6, to-check=1589/3564) ... Number of files: 3564 Number of files transferred: 122 Total file size: 244284287846 B Total transferred file size: 62947785101 B Unmatched data: 62947785101 B Matched data: 0 B File list size: 444318 B File list generation time: 9.155 seconds File list transfer time: 0.078 seconds Total sent: 62955918871 B Total received: 2728 B sent 62955918871 bytes received 2728 bytes 128990035 bytes/sec total size is 244284287846 speedup is 3.88 real 8:17.57 user 3:13.14 sys 2:45.45 ``` ## 3. 性能分析 完整复制耗时超过 8 分钟,复制了约 59 GiB 的文件。存在两个问题: - rsync 单线程串行执行,一次只能复制一个文件 - 即使对于非常大的文件,rsync 在此网络共享上的速度上限约为 350 MB/sec # 三、rsync 的优化尝试 作者尝试了多种优化方案,但均未获得显著提速: ## 1. 压缩算法 尝试不同的压缩算法,反而会降低速度。 ## 2. tar 管道 尝试先 tar 再管道传输到 rsync。 ## 3. rsync daemon 尝试运行 rsync daemon 而非 SSH 传输。 **结论**:由于作者的 NAS 运行在能效较高的 Arm 核心上,单线程压缩反而会成为瓶颈。 # 四、新方案:rclone ## 1. rclone 简介 rclone 是一个强大的文件同步工具,支持几乎任何存储位置之间的文件复制、移动和同步,包括云存储、本地存储、NAS 卷等。作者已将其作为 3-2-1 备份计划的一部分使用多年。 ## 2. 关键特性:多线程流传输 rclone 提供 --multi-thread-streams 选项,允许并行传输。 ## 3. 命令配置 经过调整参数以匹配 rsync 的归档模式,并处理 Final Cut Pro 生成的 .fcpcache 符号链接目录: ```bash rclone sync \ "--exclude='**/._*' " \ "--exclude='.fcpcache/**' " \ "--multi-thread-streams=32 " \ "-P -L --metadata " \ /Volumes/mercury/ /Volumes/Shuttle/Video_Projects ``` 参数说明: - sync:同步模式,使目标与源完全一致 - --exclude:排除特定文件/目录 - --multi-thread-streams=32:使用 32 个并行流 - -P:显示进度 - -L:跟随符号链接 - --metadata:保留元数据 ## 4. 性能测试结果 使用 rclone 同样的目录复制: ```bash $ rclone sync \ "--exclude='**/._*' " \ "--exclude='.fcpcache/**' " \ "--multi-thread-streams=32 " \ "--progress --links --metadata " \ /Volumes/mercury/ /Volumes/Shuttle/Video_Projects Transferred: 58.625 GiB / 58.625 GiB, 100%, 0 B/s, ETA - Checks: 2503 / 2503, 100% Transferred: 122 / 122, 100% Server Side Copies: 122 @ 58.625 GiB Elapsed time: 2m15.3s ``` # 五、性能对比 ## 1. 传输时间对比 | 工具 | 传输时间 | 传输数据量 | |------|---------|-----------| | rsync | 8 分 17 秒 | 59 GiB | | rclone | 2 分 15 秒 | 59 GiB | **性能提升**:约 4 倍 ## 2. 网络利用率 - rsync:约 350 MB/sec(未充分利用 10 Gbps 网络) - rclone:约 1 GB/sec(达到 10 Gbps 网络上限) ## 3. 差异分析 rclone 显示复制了 59 GB,而 rsync 显示 63 GB,可能是由于排除了 .fcpcache 目录,以及 GiB 与 GB 单位差异。 ## 4. 增量同步对比 作者还测试了仅更改少量文件的场景,rclone 和 rsync 的表现几乎相同。两者都需要约 18 秒来扫描目录树以检查元数据变化。**差异主要体现在并行文件传输能力上**。 ```mermaid graph LR A[源目录] --> B{选择工具} B -->|rsync| C[单线程串行传输] B -->|rclone| D[多线程并行传输] C --> E[350 MB/sec] D --> F[1 GB/sec] E --> G[目标目录] F --> G ```  # 六、方案选择建议 ## 1. 使用 rclone 的场景 - 大量小文件 + 大文件混合传输 - 高速网络环境(1 Gbps 以上) - 需要充分利用网络带宽 - 本地到本地、本地到云端等多场景同步 ## 2. 使用 rsync 的场景 - 低速网络环境 - 增量同步为主 - 需要精确的增量传输算法(rsync 的 delta 算法) - 系统自带,无需额外安装 ## 3. rclone 额外优势 - 支持多种存储后端(S3、B2、Google Drive 等) - 跨平台兼容性好 - 活跃的社区和持续的更新 *** ## 参考资料 1. [4x faster network file sync with rclone (vs rsync) - Jeff Geerling](https://www.jeffgeerling.com/blog/2025/4x-faster-network-file-sync-rclone-vs-rsync/) 最后修改:2026 年 02 月 03 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏