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）二、原有方案：rsync1. 使用的命令rsync -au --progress --stats /Volumes/mercury/* /Volumes/Shuttle/Video_Projects参数说明：-a：归档模式，保留文件属性-u：仅更新较新的文件--progress：显示传输进度--stats：显示统计信息2. 性能测试删除了一个项目后运行 rsync 复制：$ 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.453. 性能分析完整复制耗时超过 8 分钟，复制了约 59 GiB 的文件。存在两个问题：rsync 单线程串行执行，一次只能复制一个文件即使对于非常大的文件，rsync 在此网络共享上的速度上限约为 350 MB/sec三、rsync 的优化尝试作者尝试了多种优化方案，但均未获得显著提速：1. 压缩算法尝试不同的压缩算法，反而会降低速度。2. tar 管道尝试先 tar 再管道传输到 rsync。3. rsync daemon尝试运行 rsync daemon 而非 SSH 传输。结论：由于作者的 NAS 运行在能效较高的 Arm 核心上，单线程压缩反而会成为瓶颈。四、新方案：rclone1. rclone 简介rclone 是一个强大的文件同步工具，支持几乎任何存储位置之间的文件复制、移动和同步，包括云存储、本地存储、NAS 卷等。作者已将其作为 3-2-1 备份计划的一部分使用多年。2. 关键特性：多线程流传输rclone 提供 --multi-thread-streams 选项，允许并行传输。3. 命令配置经过调整参数以匹配 rsync 的归档模式，并处理 Final Cut Pro 生成的 .fcpcache 符号链接目录：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 同样的目录复制：$ 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. 传输时间对比工具传输时间传输数据量rsync8 分 17 秒59 GiBrclone2 分 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 秒来扫描目录树以检查元数据变化。差异主要体现在并行文件传输能力上。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 等）跨平台兼容性好活跃的社区和持续的更新参考资料4x faster network file sync with rclone (vs rsync) - Jeff Geerling