我总是使用rsync
或scp
来将文件从远程计算机复制到远程计算机。最近,我在手册中发现了scp
( man scp
)标志-C
-C Compression enable. Passes the -C flag to
ssh(1) to enable compression.
在我发现这个标志之前,我曾经使用过zip
before 和 then scp
。
只使用-C
比压缩和解压缩更有效吗?什么时候使用一个或另一个进程可以使传输更快?
答案1
该-C
标志启用 SSH 流的 gzip 压缩。
它相当于Accept-Encoding: gzip
HTTP 中的。
该标志的执行方式取决于您传输的数据类型:
传输单个大文件时,性能与传输前压缩文件几乎相同(忽略 zip 与 gzip 算法的效率)。
但
-C
对于用户来说,使用起来更省力。当传输大量小文件时,性能会不如传输前压缩文件。
其背后的原因是,在每次文件传输之前,SCP 服务器和客户端之间都会进行交互式通信(用于交换文件元数据,例如时间戳和权限)。因此双方都必须等待一段时间才能得到对方的响应(等待时压缩没有帮助)。对于每个传输的文件来说,这都是浪费时间。浪费多少时间取决于连接的延迟。最终,传输速度可能会慢很多。
当您传输单个压缩文件时,该通信仅发生一次。
答案2
它永远不会真正产生任何大的区别,但是在复制文件之前对其进行压缩应该会稍微降低效率,因为使用诸如zip
可以封装多个文件(如tar
)之类的容器格式是不必要的,并且不可能流式传输 zip输入和输出(因此您需要一个临时文件)。
gzip
另一方面,使用,而不是zip
应该完全相同,因为它是ssh -C
在引擎盖下所做的......除了 gzip 自己比仅仅使用更多工作ssh -C
。
答案3
它在 ssh 中启用 gzip 压缩(在 scp 下)。
在慢的连接这会加快速度,在任何相当快的连接(100Mbit 或更快)上,压缩很可能会减慢速度。
它比 zip 效率更高或更低,具体取决于 gzip(特别是 gzip -6)是否比您选择的 zip 压缩级别效率更高或更低