最近在写一个linux备份的脚本,由于文件较大,导致压缩时间过长。于是简单了解了下几个压缩工具

   tar ,bzip2,gzip等都是常用的压缩工具,但是这些命令都只能工作在一个cpu下,即使服务器是多核cpu也无法同时工作在多个cpu上,然而pbzip2 正好解决了这个问题。

下面简单介绍下这个工具


  1. pbzip2 要求 bzip2 的版本在 1.0.5以上,所以在此之前先检查下机器上的bzip2的版本用  bzip2 -V 即可,如果低于这个版本那么需要先升级bzip2,从官方下载即可

http://www.bzip.org/

我下载的是最新版,1.0.6



tar zxf bzip2-1.0.6.tar.gz cd bzip2-1.0.6 make make install PREFIX=/usr  (由于,原来的bzip就安装在/usr/bin 因此我直接覆盖) bzip2 -V  (如果显示版本为1.0.6表示升级成功)

安装pbzip2,可以rpm安装,这里我选择源码安装


  1. 先去下载一个源码包 http://compression.ca/pbzip2/
  2. 我下载最新的 tar zxf pbzip2-1.1.8.tar.gz

tar zxf pbzip2-1.1.8.tar.gz cd pbzip2-1.1.8 make make install (没有报错的话基本就安装成功)

测试


  1. 用cat /proc/cpuinfo 先看下cpu核心个数,我这里是4*6=24个核
  2. 生成一个随机的4GB数据

dd if=/dev/urandom of=testdata.dat bs=4M count=1024

然后用pbzip2进行压缩,并用time命令查看时间





time pbzip2 -k testdata.dat

用bzip2进行压缩 用time命令查看时间


time bzip2 testdata.dat (以下是结果16分5秒) real    16m5.933s user    15m54.647s sys     0m8.081s

查看cpu工作状态(可以看到24个核心都在工作)


Cpu0  : 92.0%us,  4.0%sy,  0.0%ni,  4.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu1  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu2  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu3  : 99.7%us,  0.3%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu4  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu5  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu6  : 98.7%us,  1.3%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu7  : 34.4%us,  7.0%sy,  0.0%ni, 20.9%id, 36.8%wa,  0.3%hi,  0.7%si,  0.0%st

Cpu8  : 99.7%us,  0.3%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu9  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu10 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu11 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu12 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu13 : 96.3%us,  3.7%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu14 : 99.0%us,  1.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu15 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu16 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu17 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu18 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu19 : 99.7%us,  0.3%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu20 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu21 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu22 : 99.7%us,  0.3%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Cpu23 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

对比下时间


同样的文件,bzip2压缩时间是16.5分,pbzip2压缩时间是1.27分,速度有10倍之差

下面介绍下pbzip2的常用方法


  1. 压缩

pbzip2 -k file1 file2

解压缩


pbzip2 -dk file1 file2

tar中调用压缩


tar cf myfile.tar.bz2 -I pbzip2 file1 fileN dir_to_compress/

tar中调用解压缩


tar -xf eclipse.tar.bz2 -I pbzip2

常用选项和命令


  • -d 用于解压缩
  • -k 用于保留源文件
  • -I是–use-compress-prog(指定调用压缩程序)简略写法
  • b#, 块大小,#表示数字,单位是100k(默认900k)
  • -c, 输出到stdout
  • -f, 覆盖已存在的输出文件
  • -h, 输出帮助
  • -l, 最大可用处理器数量
  • -m#, 最大可用内存,单位MB,默认100MB
  • -p#, 处理器数量,默认自动检测,检测失败设置为2
  • -q, 安静模式,不输出处理信息
  • -r, 读取整个输入文件到内存,在各处理器间分开处理
  • -S#, 子线程栈大小
  • -t, 测试压缩文件的完整性
  • -v, 输出详细信息
  • -V, 输出pbzip2版本信息
  • -z, 压缩(默认启用)
  • -1, 设置BWT预处理块大小,单位100k,1压缩速度最快,但是压缩率最低。默认900k
  • –ignore-trailing-garbage=#, 是否忽略文件末尾对齐数据块(1忽略,0禁止)



转载于:https://blog.51cto.com/jesus110/1576421