rsync批量同步大文件因ssh超时导致损坏,须“防中断+可恢复”双轨并行:加固ssh连接(serveraliveinterval保活)、启用--partial--append--checksum组合续传与校验、同步后用md5sum自动验证完整性。

处理rsync批量同步大文件时因SSH通道超时导致的物理文件部分损坏,核心在于“防中断”+“可恢复”双轨并行。单纯重试或忽略错误只会让损坏累积,必须从连接稳定性、传输策略和校验机制三方面入手。
加固SSH连接,避免通道被意外切断
SSH超时不是网络断了,而是中间设备(防火墙、负载均衡、云平台安全组)主动终止空闲连接。关键不是等它断,而是持续“打招呼”:
- 在本地~/.ssh/config中为对应主机配置保活参数:
Host your-target<br> ServerAliveInterval 45<br> ServerAliveCountMax 3<br> TCPKeepAlive yes
这样每45秒发一次心跳,连续3次失败才断开,大幅降低误判概率。 - 同步命令中显式传递SSH选项:
rsync -avz -e "ssh -o ServerAliveInterval=45" /src/ user@host:/dst/ - 若目标环境受限(如某些容器或精简系统),可在远程服务器的/etc/ssh/sshd_config中补充:
ClientAliveInterval 60<br>ClientAliveCountMax 3
,重启sshd生效。
启用rsync原生续传与完整性保护
--partial只是起点,真正防止损坏需组合使用多个参数:
- --partial:保留已传部分,避免中断后全量重传;
- --append:对已存在同名文件,只追加未传内容(适合大日志、镜像等顺序写场景);
- --checksum:强制按内容校验而非仅看大小和时间戳,确保接收端文件与源完全一致(牺牲少量性能,但杜绝静默损坏);
-
-P:等价于
--partial --progress,直观看到进度,便于人工干预。
推荐组合命令:rsync -avzP --checksum --append -e "ssh -o ServerAliveInterval=45" /large-files/ user@host:/backup/
同步后自动验证,把损坏挡在使用前
即使传输过程顺利,中间设备缓存异常或磁盘IO错误仍可能导致文件损坏。建议在同步完成后立即校验:
- 用
md5sum或sha256sum生成源端校验码列表:find /large-files -type f -exec md5sum {} \; > /tmp/src.md5 - 推送到目标端并比对:
rsync -av /tmp/src.md5 user@host:/tmp/ssh user@host "cd /backup && md5sum -c /tmp/src.md5 2>/dev/null | grep -v OK" - 更轻量做法:对关键大文件单独校验,例如同步完一个50GB数据库镜像后立刻执行:
ssh user@host "md5sum /backup/db.img" | cut -d' ' -f1
与本地结果比对。











