我正在询问将大文件复制到远程服务器的场景。
一个最简单的情况是:
tar c myfile | ssh myserver tar x
如果网络连接速度很快,那么一切都很好。
在较慢的网络上我这样做
tar c myfile | bzip2 -1 | ssh myserver tar xj
-- 以 CPU 时间为代价提高传输速度。
当然,我可以使用压缩比,通常会尝试猜测正确的压缩比,这样我的 CPU 就不会太忙,网络也不会饱和。
是否有压缩实用程序或压缩标志可以告诉bzip2
/ xz
/...在输出缓冲区繁忙时尽可能多地压缩?
答案1
zstd --adapt
这zstd
压缩实用程序有一个打开自适应压缩的选项(该选项是在zstd
v1.3.6 中添加的)。这会将压缩调整为“当前感知的 I/O 条件”。
请参阅zstd
手册了解更多信息。
一个完整的管道可能看起来像这样:
tar -c -f - source_directory |
zstd --adapt |
ssh user@server 'cd /someplace && { zstd -d | tar -x -f -;}'
或者
tar -c -f - source_directory |
zstd --adapt |
ssh user@server 'zstd -d | tar -x -C /someplace -f -'
如果您添加到管道中的-v
第一个,您将得到一个进度指示器行,上面写着类似的内容zstd
(L7) Buffered : 32 MB - Consumed : 192 MB - Compressed : 72 MB => 37.50%
其中(L7)
表示压缩级别。对于任何中等大量的数据,您会期望它会随着时间的推移而波动,这表明它zstd
确实在适应 I/O 条件(并且可能也适应数据本身)。