如何用zstd快速网络传输小文件?rsync对比tar提速效果如何?
用zstd实现大量小文件的SSH快速传输
大量小文件单独通过SSH传输会产生巨大的连接和元数据开销,打包+zstd压缩+SSH管道是最优方案,具体操作如下:
核心命令示例
# 本地打包→zstd压缩→SSH传输→远端解压(保留文件权限) tar -cpf - /path/to/your/small/files | zstd -T0 --fast | ssh user@remote-host "zstd -d | tar -xpf - -C /path/to/remote/dir"
参数解释
tar -cpf -:-c创建打包文件,-p保留权限/元数据,-f -将打包内容输出到标准输出(而非本地文件)zstd -T0 --fast:-T0自动使用所有CPU线程加速压缩,--fast启用快速压缩级别(平衡速度与压缩比,若追求更高压缩比可替换为-3到-19,但速度会下降)- 远端
zstd -d | tar -xpf - -C:解压zstd数据流,再将tar包提取到指定目标目录
rsync vs tar:传输速度对比
两者的速度差异取决于场景:
1. 首次全量备份
tar+zstd的速度显著优于rsync
- rsync需要逐个遍历本地和远端的文件列表,比对元数据(大小、修改时间),大量小文件会导致极高的比对开销
- tar直接将所有文件打包成单一数据流,减少了SSH连接的反复建立和元数据传输开销,配合zstd的高速压缩,整体传输效率更高
2. 增量备份(仅同步变化文件)
rsync的优势明显
- rsync仅传输本地与远端存在差异的文件(或文件的变化部分),无需重新打包所有文件
- 如果要结合zstd提升rsync的压缩效率,可使用rsync 3.2.0+版本的
--compress-choice=zstd参数:rsync -avz --compress-choice=zstd /path/to/small/files user@remote-host:/path/to/remote/dir
总结
- 首次全量备份:优先选
tar+zstd+SSH - 后续增量同步:优先选
rsync(可选结合zstd压缩)
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

