rsync 是什么
一句话总结
rsync 是一个快速的文件复制/同步工具,只传输文件的变化部分,常用于备份、部署和跨机器同步。
🤔 为什么会有它 / 解决了什么问题
scp 和 cp 每次复制整个文件,即使只改了一个字节也要全量传输。rsync 通过分块校验(delta algorithm)只传差异部分,大幅减少带宽和耗时,尤其适合大文件和增量备份。
🔍 具体原理 / 运作逻辑
rsync 把文件切成固定大小的块,计算每块的 checksum,和目标文件对比后只传输差异块。SSH 模式下数据走加密通道,无额外端口。
更硬核的技术细节(点击展开)
核心算法(rsync algorithm)在接收端生成 rolling checksum + MD4 hash 列表,发送端逐块比对,匹配的跳过、不匹配的传原始数据。
--archive(-a)保留权限、时间戳、属主等元信息。
🧭 什么情况下会用到 / 什么场景会遇到它
- 备份 Press 持久化卷:
rsync -avz /var/lib/docker/volumes/press-sites/ backup@host:/backup/ - Quartz 发布:
sync.sh用 rsync 把 Obsidian vault 增量推到 VPS - 容器间同步:Press Agent 用 rsync 将构建产物分发到 Bench 容器
🛠️ 怎么上手 / 在哪操作
rsync -avz <源路径> <目标路径>(SSH 模式加 -e ssh),常见选项:-a(归档)、-v(详情)、-z(压缩)、--delete(删除目标端多余文件)。
⚖️ 副作用 / 代价 / 取舍
--delete 用错方向会删目标端文件——源端少一个文件目标端就少一个。先 --dry-run(-n)预览再执行。大目录第一次扫描耗时较长。
🕰️ 来历
- 谁提出/创造的:Andrew Tridgell(Samba 作者)和 Paul Mackerras
- 什么时候出现的:1996 年首次发布
🔗 关联 / 经常一起出现的概念
- SSH:rsync 默认的传输通道,加密且无需额外端口
- Press 备份:cron job 用 rsync 把数据库备份和站点文件推送到 R2
⚠️ 注意事项 / 常见误区
路径末尾的斜杠 / 有语义区别——rsync -avz src/ dest 复制目录内容,rsync -avz src dest 复制目录本身。差一个斜杠结果完全不同。
📎 记忆锚点
rsync 是文件同步界的 diff——只传差异,不传完整文件,靠 checksum 高效比对。
📝 更新日志
| 日期 | 改动 | 原因 |
|---|---|---|
| 2026-07-13 | 首次创建 | - |