不能直接替代,但比scp更可靠实现断点续传;需目标文件存在且大小小于源文件、前段未损坏,并配合--ignore-existing防误覆盖,加-v和--progress验证续传行为。

rsync --append-verify 能替代 scp 断点续传吗
不能直接替代,但比 scp 更可靠地实现断点续传——前提是目标文件已存在且大小小于源文件,且内容前段未被破坏。scp 本身不支持断点续传;它一旦中断就得重传整个文件。rsync 的 --append-verify 是专门为此设计的:跳过开头已匹配的块,只传输剩余部分,并在末尾校验整体一致性。
为什么 --append-verify 必须配 --ignore-existing 才安全
--ignore-existing 防止 rsync 覆盖目标端已存在的、但实际更完整或更新的文件;而 --append-verify 默认仍会检查并尝试追加——如果目标文件比源文件还大,就会报错 rsync: read error: Is a directory (20) 或直接失败。两者组合才是生产环境常见策略:
-
--append-verify:只从当前文件长度位置继续写,用 checksum 校验追加后整体是否一致 -
--ignore-existing:跳过目标端已存在且大小 ≥ 源文件的文件,避免误覆盖或冲突 - 必须加
-v和--progress实时观察是否真正在“续传”,而不是跳过
实际命令怎么写才不踩坑
典型场景:传一个大日志文件到远程服务器,中途断了,想接着传:
rsync -av --append-verify --ignore-existing --progress /local/big.log user@host:/remote/big.log
注意几个关键点:
- 路径结尾不加
/,否则 rsync 会把目标当目录处理,报错Is a directory - 不要加
-z(压缩),它会干扰--append-verify的偏移计算,导致校验失败 - 如果目标文件权限/时间戳不同但内容一致,
--size-only可加快判断,但会跳过内容校验,慎用 - 首次传输建议不用
--append-verify,直接用-av;续传时再加
比 scp 多出的开销和兼容性问题
rsync 需要在远端运行 rsync --server 进程,如果目标机器没装 rsync 或不在 $PATH,会报 rsync: command not found。这不是配置问题,是硬依赖。
另外:--append-verify 比普通 --append 多一次全量 checksum 计算,对超大文件(>10GB)可能明显拖慢收尾阶段;而 scp 中断后只能靠第三方工具(如 lftp 或封装脚本)模拟续传,反而更不可靠。
真正容易被忽略的是:目标文件若曾被截断、追加过其他内容,或挂载卷异常掉电导致块损坏,--append-verify 会校验失败并中止——它不修复数据,只拒绝错误续传。










