ログイン新規登録

Qiitaにログインして、便利な機能を使ってみませんか?

あなたにマッチした記事をお届けします

便利な情報をあとから読み返せます

50

この記事は最終更新日から5年以上が経過しています。

マルチコアでgzファイルの圧縮解凍ができるpigzの使い方

最終更新日 投稿日 2015年09月22日

Linux標準の gzip や gunzip だとシングルでの処理(1 CPUだけ)になってしまうので、gzファイルを高速に解凍(圧縮)したい!! という時に残念な気持ちになります。

そこでその残念な気持ちを救うのが pigz というLinuxソフト。
マルチコアを活かして並列処理で圧縮・解凍ができるので、CPUをたくさん積んでいる環境だと爆速に処理することができるようになります。

pigz-howto-install.png

インストール方法

pigzは外部リポジトリのEPELリポジトリを利用してyumインストールすることも可能ですが、僕的にはサクッと簡単安心?なソースインストールをおすすめしています。

まずはインストールディレクトリに移動してソースパッケージをダウンロードしておきます。

$ cd /usr/local/src/
$ wget http://zlib.net/pigz/pigz-2.4.tar.gz

念の為に必要なパッケージを確認して無ければインストール。

# rpm -qa | grep zlib-devel
# yum install zlib-devel

zlib-devel が入っていないと下記のようなエラーが出ますので。

pigz.c:390:70: error: zlib.h: そのようなファイルやディレクトリはありません
pigz.c:397:4: error: #error "Need zlib version 1.2.3 or later"

続いてダウンロードしたソースパッケージを解凍してインストール。
『インストール』といっても make install はせずに、直接実行ファイルをパスの通ったディレクトリへコピーします。

$ tar -xzf pigz-2.4.tar.gz
$ cd pigz-2.4
$ make
$ cp -p pigz unpigz /usr/local/bin/

使い方

pigz の使い方は gzip コマンドや gunzip コマンドとほぼ同じです。
例えば圧縮するときは下記のようにします。

$ pigz -c Accesslog.txt > Accesslog.txt.gz

逆に、解凍するときは unpigz を使います。

$ unpigz -c Accesslog.txt.gz > Accesslog.txt

ちなみに tar と組み合わせて利用することも可能。
tarコマンドの --use-compress-prog オプションを利用します。

追記:2015-12-28
一部環境によっては -z オプションが不要な場合もあるようですので、ご自身の環境でご確認ください。

$ tar -czf HOGEHOGE.tgz --use-compress-prog=pigz HOGEHOGE

オプション

使えるオプションとしては下記の通り。(端折るな)
普段使うことがあるとすれば -c の標準出力ぐらいでしょうか。

オプション 説明
-0 to -9, -11 Compression level (11 is much slower, a few % better)
--fast, --best Compression levels 1 and 9 respectively
-b, --blocksize mmm Set compression block size to mmmK (default 128K)
-c, --stdout Write all processed output to stdout (won't delete)
-d, --decompress Decompress the compressed input
-f, --force Force overwrite, compress .gz, links, and to terminal
-F --first Do iterations first, before block split for -11
-h, --help Display a help screen and quit
-i, --independent Compress blocks independently for damage recovery
-I, --iterations n Number of iterations for -11 optimization
-k, --keep Do not delete original file after processing
-K, --zip Compress to PKWare zip (.zip) single entry format
-l, --list List the contents of the compressed input
-L, --license Display the pigz license and quit
-M, --maxsplits n Maximum number of split blocks for -11
-n, --no-name Do not store or restore file name in/from header
-N, --name Store/restore file name and mod time in/from header
-O --oneblock Do not split into smaller blocks for -11
-p, --processes n Allow up to n compression threads (default is the number of online processors, or 8 if unknown)
-q, --quiet Print no messages, even on error
-r, --recursive Process the contents of all subdirectories
-R, --rsyncable Input-determined block locations for rsync
-S, --suffix .sss Use suffix .sss instead of .gz (for compression)
-t, --test Test the integrity of the compressed input
-T, --no-time Do not store or restore mod time in/from header
-v, --verbose Provide more verbose output
-V --version Show the version of pigz
-z, --zlib Compress to zlib (.zz) instead of gzip format

新規登録して、もっと便利にQiitaを使ってみよう

  1. あなたにマッチした記事をお届けします
  2. 便利な情報をあとで効率的に読み返せます
  3. ダークテーマを利用できます
ログインすると使える機能について
この記事は以下の記事からリンクされています

コメント

yoichi22
@yoichi22(Yoichi Nakayama)

手元では tar に --use-compress-prog を与える場合、 z オプションを外す必要がありました。

1
goemon330
@goemon330

情報ありがとうございます!
環境によっては z オプションが不要なんですね‥。(私の環境では問題なかったもので)
留意しておきたいと思います。

0
matsubo
@matsubo(Yuki Matsukura)

解凍の時はあまり速くならないとのこと。

Decompression can't be parallelized, at least not without specially prepared deflate streams for that purpose. As a result, pigz uses a single thread (the main thread) for decompression, but will create three other threads for reading, writing, and check calculation, which can speed up decompression under some circumstances.

ref: https://linux.die.net/man/1/pigz

1

いいね以上の気持ちはコメントで

Qiita Conference 2024 4月17日(水)~19(金)開催!

Qiita Conferenceは、Qiita最大規模のテックカンファレンスです!

基調講演ゲスト(敬称略)

牛尾剛、 市谷聡啓、 けんすう、 ゆる言語学ラジオ、 田中邦裕、小城久美子、 飯沼亜紀

記事投稿キャンペーン開催中

Qiita×Findy記事投稿キャンペーン 「今の開発組織でトライしたこと・トライしていること・トライしようとしていること」

~
詳細を見る
50

新規登録して、Qiitaをもっと便利に使ってみませんか

この機能を利用するにはログインする必要があります。ログインするとさらに下記の機能が使えます。

  1. ユーザーやタグのフォロー機能であなたにマッチした記事をお届け
  2. ストック機能で便利な情報を後から効率的に読み返せる

ソーシャルアカウントでログイン・新規登録

メールアドレスでログイン・新規登録