Skip to content
注意

文章发布较早,内容可能过时,阅读注意甄别。

rsync-faq

rsync-faq

问题

bash
问题:我利用rsync从云服务器同步到目录到pc本地,这个动作已经完成了。命令如下:rsync.exe-avPzruh--port8730--password-file=/cygdrive/d/vitepress-theme-teek-one-private/shell/password.txtroot@106.75.214.199::cmi-MdImages//cygdrive/D/images此时我又加了一个--delete参数,把本地目录往云服务器上同步下,命令如下:rsync.exe-avPzruh--port8730--password-file=/cygdrive/d/vitepress-theme-teek-one-private/shell/password.txt/cygdrive/D/imagesroot@106.75.214.199::cmi-MdImages/请问:我从本地往云端同步的这个操作会很快嘛,还是说它要把本地的每一张图片和远程的数据做下对比呢?我的数据都是图片,大小7.05GB,数量23425个。

回答

你的问题涉及 rsync--delete参数同步效率,具体分析如下:


1. 你的命令行为分析

bash
# 从云端同步到本地(已完成)rsync.exe-avPzruh--port8730--password-file=密码文件root@IP::模块名/本地目录/# 从本地同步回云端(新增 --delete)rsync.exe-avPzruh--port8730--password-file=密码文件本地目录/root@IP::模块名/
  • --delete的作用
    确保云端目录 严格匹配本地目录,删除云端存在但本地不存在的文件(危险操作,慎用!)。

2. 同步速度的关键因素

(1)rsync 的默认行为

  • 文件对比机制
    rsync 一定会对比本地和云端的所有文件(即使没有 --delete),但对比方式高效:
    • 先比较 文件大小和修改时间(快速)。
    • 如果大小/时间不一致,再通过 校验和(checksum)确认内容差异(较慢)。
  • --delete的额外开销
    需要扫描云端目录,找出本地不存在的文件并删除,这会增加少量时间。

(2)你的数据特点(23,425 张图片/7.05GB)

  • 首次同步
    如果云端原本有大量本地不存在的文件,--delete会触发删除操作,可能较慢。
  • 后续同步
    若文件无变化,rsync 会快速跳过(仅对比元数据),耗时极短。

3. 预估同步时间

场景耗时范围(参考)影响因素
文件无变化 + 无删除几秒 ~1分钟网络延迟、文件数量
需删除云端大量文件1 ~10分钟删除操作的IO性能、网络延迟
大量文件需校验和比对10分钟 ~1小时+文件大小、磁盘读写速度

4. 优化建议

  1. 首次同步时避免直接 --delete

    • 先不加 --delete同步一次,确认文件一致后再启用,避免误删云端数据。
  2. 使用 --dry-run预演

    bash
    rsync.exe-avPzruh--delete--dry-run本地目录/root@IP::模块名/
    • 模拟运行,显示哪些文件会被删除/传输,确认安全后再执行真实操作。
  3. 排除无需同步的文件

    bash
    --exclude="*.tmp"--exclude="temp/"
    • 减少不必要的文件对比。
  4. 网络优化

    • 确保两端网络稳定,避免因丢包重传降低效率。

5. 为什么 rsync 必须对比文件?

  • 核心机制:rsync 是 增量同步工具,依赖对比以下信息决定是否传输:
    • 文件名、大小、修改时间(快速)。
    • 文件内容校验和(仅对疑似变化的文件计算)。
  • --delete只是额外步骤:在对比完成后,清理云端冗余文件。

总结

  • 你的同步不会特别快(需对比2.3万文件元数据),但比完整传输7GB快得多。
  • 主要耗时在文件对比阶段,而非网络传输(如果文件无变化)。
  • 极端情况(如首次启用 --delete且云端有大量待删除文件)可能较慢。

建议先用 --dry-run测试,确认无误后再执行真实同步!