快速传输大批量数据(tar+lz4+pv+ssh)

快速传输大批量数据(tar+lz4+pv+ssh)

服务器之间传输数据平时常使用的命令如scp、rsync这两个,一些小的文件或目录这两个命令足以搞定,但是一旦数据几十上百G,这样传输就有些慢了。

前两天做远程数据传输的时候,用scp命令始终感觉有点慢,就google了一下,发现了一个更好用的传输方式:tar+lz4+pv+ssh。

  • LZ4是一个非常快的无损压缩算法,压缩速度在单核300MB/S,可扩展支持多核CPU。它还具有一个非常快速的解码器,速度单核可达到和超越1GB/S。通常能够达到多核系统上的RAM速度限制。

  • PV 由Andrew Wood 开发,是 Pipe Viewer 的简称,意思是通过管道显示数据处理进度的信息。这些信息包括已经耗费的时间,完成的百分比(通过进度条显示),当前的速度,全部传输的数据,以及估计剩余的时间。 "要使用 PV,需要配合合适的选项,把它放置在两个进程之间的管道。命令的标准输入将会通过标准输出传进来的,而进度会被输出到标准错误输出。” 利用它我们可以查看到命令执行的进度。

网上也找了一段命令实例:

time tar -c sendlog/|pv|lz4 -B4|ssh -c arcfour128 \ -o"MACs [email protected]" 10.xxx.xxx.36 "lz4 -d |tar -xC /u01/backup_supu" 
3.91GiB 0:00:16 [ 249MiB/s] real 0m16.067s user 0m15.553s sys 0m16.821s
249MB/s,妥妥的。是最原始scp(40MB/s)的6倍,原来400GB传输需要约3小时,现在只需要27分钟了。

开始自我实践,首先服务器(centos)上安装pv和lz4命令。

  • yum install pv
  • yum install lz4
  • 最后都Complete!

自我小小测试下,200M传输3分钟,其实还是很慢,没办法因为是外网之间传输,如果换成内网,那就so 快了。

root@server05 ~/apps/deploy-serving$ time tar -c 2018-10-31-19-34-10/ |pv|lz4 -B4| ssh server08 "lz4 -d |tar -xC /root/apps/shell"              2 ↵  
tput: No value for $TERM and no -T specified
tput: No value for $TERM and no -T specified
 195MiB 0:03:46 [ 885kiB/s] [                                                                  <=>                                                          ]
tar -c 2018-10-31-19-34-10/  0.04s user 0.33s system 0% cpu 3:46.34 total
pv  0.06s user 0.28s system 0% cpu 3:46.34 total
lz4 -B4  1.02s user 0.14s system 0% cpu 3:46.37 total
ssh picooc08 "lz4 -d |tar -xC /root/apps/shell"  0.81s user 0.27s system 0% cpu 3:49.12 total
root@server05 ~/apps/deploy-serving$

小小总结一下:

  1. 远程传输文件,如果是局域之间能用内网用内网。
  2. 使用lz4压缩方式,本机和远程服务器上都需要安装。
  3. lz4解压的目录必须是已经存在的。比如上面的:/root/apps/shell
  4. 小文件,用scp就够了,不用压缩传输解压,毕竟压缩解压也是耗费cpu的。

你可能感兴趣的:(Linux)