最近在写一个linux备份的脚本,由于文件较大,导致压缩时间过长。于是简单了解了下几个压缩工具
tar ,bzip2,gzip等都是常用的压缩工具,但是这些命令都只能工作在一个cpu下,即使服务器是多核cpu也无法同时工作在多个cpu上,然而pbzip2 正好解决了这个问题。
下面简单介绍下这个工具
- 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安装,这里我选择源码安装
- 先去下载一个源码包 http://compression.ca/pbzip2/
- 我下载最新的 tar zxf pbzip2-1.1.8.tar.gz
tar zxf pbzip2-1.1.8.tar.gz cd pbzip2-1.1.8 make make install (没有报错的话基本就安装成功)
测试
- 用cat /proc/cpuinfo 先看下cpu核心个数,我这里是4*6=24个核
- 生成一个随机的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的常用方法
- 压缩
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