rsync断点续传需组合关键参数:--partial保留已传部分,--append-verify追加并校验md5,--checksum强制内容比对,配合ssh保活与超时设置。

rsync 本身不自动续传,必须靠参数组合才能真正从断点继续,而不是重头来。
关键参数必须一起用
只加 -P(等价于 --partial --progress)不够——它能保留已传部分并显示进度,但不会触发追加逻辑。
- --partial:中断时不删除目标端已接收的部分
- --append-verify:推荐用于大文件(如数据库镜像)。从目标文件末尾追加,并在传输完成后校验整个文件 MD5,确保与源完全一致
- --append:仅追加、不校验,适合可追加的二进制日志类文件,但存在内容不一致风险
避免误判导致全量重传
默认 rsync 依据文件大小 + 修改时间判断是否跳过。中断后目标文件大小变了、时间戳也更新了,但内容不全,容易被当成“已修改文件”而重传整份。
- 加 --checksum:强制按内容比对(逐块校验),最可靠,适合高完整性要求场景
- 或加 --size-only:只比大小,速度快,适合日志等可追加、不需严格校验的文件
- 配合 --ignore-times:彻底禁用时间戳判断,防止干扰
增强 SSH 连接稳定性
断点续传的前提是能重新连上,不是卡在 SSH 层就退出。
- 用 -e "ssh -o ConnectTimeout=15 -o ServerAliveInterval=30":缩短连接等待、维持长连接
- 加 --timeout=600 和 --contimeout=30:分别控制传输超时和连接超时,防卡死
- 避免使用 rsync:// 协议:它不走 SSH,缺乏连接恢复能力,续传易失败
实际可用命令示例
把本地 /data/db.img 推送到远程,支持可靠续传:
rsync -av --partial --append-verify --checksum --timeout=600 --contimeout=30 -e "ssh -o ConnectTimeout=15 -o ServerAliveInterval=30" /data/db.img user@host:/backup/
- 首次运行全量传输
- 中断后再次执行同一命令,rsync 自动检测目标文件存在且较短,直接追加
- 确保目标路径有写权限,磁盘剩余空间 ≥ 文件原始大小 × 1.2(留出校验与缓冲余量)
- 若目标文件被手动截断或覆盖,rsync 会拒绝续传并报错——这是保护机制,不是故障











