B
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. 优化建议
首次同步时避免直接
--delete
- 先不加
--delete
同步一次,确认文件一致后再启用,避免误删云端数据。
- 先不加
使用
--dry-run
预演bashrsync.exe-avPzruh--delete--dry-run本地目录/root@IP::模块名/
- 模拟运行,显示哪些文件会被删除/传输,确认安全后再执行真实操作。
排除无需同步的文件
bash--exclude="*.tmp"--exclude="temp/"
- 减少不必要的文件对比。
网络优化
- 确保两端网络稳定,避免因丢包重传降低效率。
5. 为什么 rsync 必须对比文件?
- 核心机制:rsync 是 增量同步工具,依赖对比以下信息决定是否传输:
- 文件名、大小、修改时间(快速)。
- 文件内容校验和(仅对疑似变化的文件计算)。
--delete
只是额外步骤:在对比完成后,清理云端冗余文件。
总结
- 你的同步不会特别快(需对比2.3万文件元数据),但比完整传输7GB快得多。
- 主要耗时在文件对比阶段,而非网络传输(如果文件无变化)。
- 极端情况(如首次启用
--delete
且云端有大量待删除文件)可能较慢。
建议先用 --dry-run
测试,确认无误后再执行真实同步!