rsync 是什么
rsync 是增量文件同步工具:它先比对新旧文件的大小与修改时间,只传变化的部分,必要时还能按块计算校验值做更精细的差异传输。这让它在备份与发布场景里远优于直接复制,同步十吉字节的文件通常只需传几十兆差异。它既能走本地路径,也能通过 ssh 在机器之间传,配合归档与删除选项可以做到「让目标端与源端完全一致」。信创平台的服务器版与桌面版都预装 rsync。
基本信息
| 所属 | rsync,各 Linux 发行版通用 |
|---|---|
| 语法 | rsync [选项] 源 目标 |
| 常用组合 | -a 归档保留属性,-v 输出详情,-P 显示进度并支持续传 |
| 远端传输 | 默认走 ssh 通道,可用 -e 指定端口等参数 |
| 演练模式 | -n 只预演不落盘 |
| 权限 | 读写目标目录所需权限即可,跨机需远端有账号 |
典型使用场景
- 发布部署:把构建产物增量推到目标机目录,只传变化文件
- 数据备份:把业务目录同步到备份机或挂载的存储卷
- 目录镜像:配合删除选项让目标端与源端完全一致,便于做校验
- 迁移搬迁:首次全量传输,之后靠增量补齐,长时间窗口也能断点续传
- 定时同步:写进计划任务做周期增量备份
- 核对文件完整性:用校验模式确认两端内容是否真的相同
典型用法
典型用法
rsync -avP /data/app/ deploy@10.0.10.21:/data/app/ # 增量同步并显示进度
rsync -avn --delete /data/app/ /backup/app/ # 先预演,确认要删哪些
rsync -av --exclude='cache/' --exclude='tmp/' /data/ /backup/data/ # 排除临时目录
rsync -av -e 'ssh -p 2222' /data/ user@host:/data/ # 指定非默认端口
rsync -av --bwlimit=20m /data/big/ backup:/data/big/ # 限速,避免占满带宽
rsync -avc /data/app/ backup:/data/app/ # 按校验值比对,更准但更慢常用选项读法
| 选项 | 作用 | 使用提示 |
|---|---|---|
| -a | 归档模式,保留权限时间属主 | 最常用,相当于多个选项的组合 |
| -v | 输出传输详情 | 脚本里建议保留,便于日志审计 |
| -P | 进度显示并支持断点续传 | 传大文件时必备 |
| -n | 只预演不落盘 | 带删除选项时必须先跑一次 |
| --delete | 删除目标端多余的文件 | 让目标与源一致,风险最高 |
| --exclude | 排除匹配的路径 | 写相对路径,模式结尾注意目录语义 |
| -e | 指定远端 shell 及参数 | 常用于非默认 ssh 端口 |
| -c | 按校验值比对 | 更准但耗时,慎用于大目录 |
源路径末尾是否带斜杠语义完全不同:带斜杠表示同步「目录里的内容」,不带斜杠表示把「这个目录本身」放到目标路径下。删除选项与这层语义组合错误时,会造成目标端被清空或结构错乱,所以带删除的动作一律先加预演选项跑一遍。
压缩选项在局域网内不一定更快:大量小文件时压缩会增加 CPU 开销而收益有限,同机房同步通常可以不加;跨广域网传文本类数据时收益明显。带宽有限的线路可用限速选项,避免备份任务把业务带宽占满。