2 : 27 高圧縮書庫、とくにbz2

← 2 - 26 p↑ もくじ i 3 - 01 n →

妖精の目――以心伝心

2001年 6月20日
記事ID d10620

90 5F 82 CC 8E 71 83 43 83 47 83 58 81 45 83 4C 神の子イエス・キ
83 8A 83 58 83 67 82 CC 95 9F 89 B9 82 CC 8F 89 リストの福音の初
82 DF 81 42 97 61 8C BE 8E D2 83 43 83 55 83 84 め。預言者イザヤ
82 CC 8F 91 82 C9 82 B1 82 A4 8F 91 82 A2 82 C4 の書にこう書いて
82 A0 82 E9 81 42 81 75 8C A9 82 E6 81 41 82 ED ある。「見よ、わ
82 BD 82 B5 82 CD 82 A0 82 C8 82 BD 82 E6 82 E8 たしはあなたより
90 E6 82 C9 8E 67 8E D2 82 F0 8C AD 82 ED 82 B5 先に使者を遣わし
81 41 82 A0 82 C8 82 BD 82 CC 93 B9 82 F0 8F 80 、あなたの道を準
94 F5 82 B3 82 B9 82 E6 82 A4 81 42 8D 72 82 EA 備させよう。荒れ
96 EC 82 C5 8B A9 82 D4 8E D2 82 CC 90 BA 82 AA 野で叫ぶ者の声が
82 B7 82 E9 81 42 81 77 8E E5 82 CC 93 B9 82 F0 する。『主の道を

91 53 90 67 82 F0 83 56 83 8A 83 52 83 93 82 C5 全身をシリコンで
8D EC 82 E7 82 EA 82 BD 83 49 83 8A 83 47 83 93 作られたオリエン
83 67 82 CC 83 74 83 89 83 62 83 4F 83 56 83 62 トのフラッグシッ
83 76 83 82 83 66 83 8B 81 75 43 61 6E 64 79 47 プモデル「CandyG
69 72 6C 2D 6A 65 77 65 6C 81 76 81 42 0D 0A 91 irl-jewel」。..素
66 8D DE 8A 4A 94 AD 82 C9 82 51 94 4E 82 A9 82 材開発に2年かけ
AF 8F 5D 97 88 82 CC 83 56 83 8A 83 52 83 93 83 従来のシリコンモ
82 83 66 83 8B 82 C5 82 CC 96 E2 91 E8 82 C5 82 デルでの問題であ
A0 82 C1 82 BD 81 41 0D 0A 91 CF 8B 76 90 AB 82 った、..耐久性の
CC 82 C8 82 B3 82 C6 91 66 8D DE 97 F2 89 BB 82 なさと素材劣化の
CC 91 AC 82 B3 82 F0 83 4A 83 6F 81 5B 82 B7 82 速さをカバーする

オンディーヌ
まあ、そんな事までしてくださるなんて、できすぎた恋人ね。
ハンス
ふむ、恋人ができすぎて人員整理が必要か……
ミムナ・エレウェモス
世界の実体を花園に喩えれば、情報とか愛とかいわれるものは「花粉」で、人間は風や虫なのだ。
人間はまた水を湛えた湖のようでもある。湖はじっとそこにあるように思えるが、時間の尺度を替えれば生成してはすぐ消滅する泡にも等しい。ところがじゃ、水はと言えば――常に流転してるようでいて湯気になったり氷になったりするが――その実、水のエレメントというのは滅多に無くならない。であるから、薔薇色の指先の王子よ、どっちにせよいずれ水の時代が来るだろう。その時は今贋物と言われるものが本物となり本物と言われるものが贋物となるから、まるで贋物の時代のように思えるが、どうしてどうして、風もタンポポの綿毛も存外、似た者同士なのじゃ
それにしても、我が名は長すぎる。情報に対する情報発信者識別符号は、完全に冗長ではあるまいか。
ミムナ・エレウェモス
我々は名前の長さを無限に圧縮するようなハフマン符号化を発見するでしょう。実際、発言者が「名無しさん」だけでも情報交換は完全に可能なのに、なにゆえ構造体に author フィールドを残す必要があるのでしょう? 生まれてくる新しい世代の子らのために、空文字列を書き込んだ出生届を役所に提出してごらんなさい。
 
おや、我が輩のうわさをしておるな。
糸くず混入発見装置
Error 1: line 65: <DT> と </DT> の間が空です。
 
失敬な。強調しておくが、というのが我が名。それをエラーとは失礼千万。
糸くず混入発見装置
Error 1: line 72: <STRONG> と </STRONG> の間が空です。
ミムナ・エレウェモス
空文字列の強調。詩とは、そのようなものだ。
名無しさん
……最近のオンディーヌは、水を怖がる。
名無しさん
水の妖精のくせに?
名無しさん
沈黙によって叫んでいるのだ。だが人間には見えない。
 
 

この記事のURL

テキスト版省パケ版XML版


bzip2 と書庫いろいろ

2001年 6月19日
記事ID d10619_1

Table 1: 一般的な圧縮形式
ファイル形式 サイズ 圧縮結果
Original 59529255 100.0%
bzip230596185.1%
sit31526865.3%
gzip50730568.5%
cab52927628.9%
zip55172589.3%
lzh606897710.2%

Unix (Linux) では古くから compress や gzip によるファイルの圧縮が用いられてきましたが、最近では、より圧縮率の高い bzip2 もよく用いられます。Unix で作成された資源をインターネットからダウンロードして利用するためには、Windowsユーザもこうした書庫を扱わなければなりません。Linux のユーザが増えているので、そうした機会は今後ますます増えるでしょう。

これらの書庫は Unix (Linux) ユーザとのやりとりに利用できるほか、bzip2 は圧縮率が高いため、Windows ユーザであっても自分用のバックアップなどに利用することもできます。

Unix の tar, compress, gzip, bzip コマンドで作られた書庫のうち、現在、最も一般的なのは(したがってネット上で最も多く見かけ、扱う機会が多いのは)tar + gzip で作った .tar.gzファイル(.tgzファイル)ですが、以下では、それより新しく、より圧縮率の高い bzip2 について書きます。

bz2ファイルのアイコン(解凍レンジ)

圧縮性能の比較は、多面的で複雑です。どのくらい小さく圧縮できるかという圧縮率ばかりが注目されがちですが、圧縮の目的によっては、処理速度、堅牢性、安定性、普及率、操作性などが重要な要素となるため、単純に圧縮率だけで書庫の優劣を比較することは、できません。また、「圧縮率の比較」というのも単純にできるものでなく、例えばテキストファイルを圧縮する場合にはA書庫よりB書庫のほうが高圧縮だとしても、バイナリファイルの圧縮では逆にB書庫よりA書庫のほうが高圧縮になるかもしれません。さらに、単一のファイルを圧縮する場合と、複数のファイルをひとつの圧縮書庫にまとめる場合でも話が変わってきます。

例えば、圧縮率が高いけれど圧縮処理終了まで10分も待たされるようなアーカイバと、それよりわずかに圧縮率が劣るものの処理が1秒で完了するアーカイバとでは、後者のほうが好まれるかもしれません。また、バックアップ用などの大切な書庫には堅牢性が要求されるでしょう――例えば100個のファイルを書庫にしたとき、ある圧縮形式では、書庫ファイルのごく一部が破損しただけで書庫内の全ファイルが取り出せなくなってしまうかもしれません。他方、破損部分に関係ない99ファイルは依然、復元できるようになっている形式もあります。さらには、ごく一部が破損しても、その破損個所を自動的に修復できる形式もあります。そこまで堅牢だと、当然、破損にそなえた冗長情報を含むので圧縮率は低くなりますが、にもかかわらず、用途によっては、こちらを選択すべきでしょう。

しかし、純粋に数学的な意味では、「冗長度を0に近づける符号化アルゴリズム」がよりすぐれているのであって、くだいていえば、どれだけもとのファイルを小さくできるか?の勝負ということになります。計算量、つまり処理速度も実用上は無視できない要素ですが、とりあえず「純粋」に圧縮率だけ比較してみましょう。純粋な数学の世界では、生成した記号列が「何かの弾み」で壊れるなどということはなく、ファイルが破損する、ディスクが破損する、などいうのは、ぐしゃまらな人間世界の話題ですから、ファイルの破損に対する堅牢性という観点もさしあたっては度外視します。

最も単純に圧縮アルゴリズムの本質を比較するために、以下では単一ファイルの圧縮を考えます(複数のファイルをひとつの書庫にまとめる場合、複数のファイルをどういう順番で格納するかとか、いわゆるsolidモードを使うかといったような、単純な符号化とはべつのレベルのアルゴリズムが関係して話がややこしくなるため)。圧縮する対象のファイルはテキストファイルとし、結果の差がでやすいように大きめのファイル――60 MBytes ほどになってる Apache のアクセスログ――を処理して結果を比較してみます。

まずは「ふつう」の書庫に「ふつう」に圧縮した例。

Table 1: 一般的な圧縮形式(再掲)
ファイル形式 サイズ 圧縮結果
Original 59529255 100.0%
bzip230596185.1%
sit31526865.3%
gzip50730568.5%
cab52927628.9%
zip55172589.3%
lzh606897710.2%

現時点の国際標準である zip と gzip、bzip2(Unix系)、cab(Windows)、sit(Mac)を挙げました。日本のパソコン通信でかつて常用された lzh も、参考として加えてあります。圧縮オプションは、いずれも標準的なものです(詳しくは下の表)。

zip、lzh、gzip は約60メガバイトの巨大ファイルを高速に(手元の環境で10秒オーダ)圧縮できますが、そのぶん圧縮率は低めです。cab(mszip)は zip や lzh より高圧縮ですがかなり処理時間がかかります。bzip2 と sit の圧縮は少し時間がかかりますが、けっこう高速で、結果も高圧縮です。例えば、lzh で圧縮するよりさらに半分のサイズになってます。この例では60メガもある巨大ファイルを使いましたが、もっと小さいファイルを処理するなら、どの圧縮法でも処理時間は通常、気にならない程度でしょう。ただし、sit書庫は、解凍についてはフリーウェアがありますが、圧縮はフリーでないので(試用は可)、Mac ユーザ以外は、わざわざ有料でsit書庫を作成することもないでしょう。

Windows用の多くの解凍ツールは gzip や bzip2 の書庫も解凍できるのに、現状、こうした機能は、あまり用いられていないように思います。自分用のバックアップはもとより、ほかの Windowsユーザに配布する書庫としても、bzip2 などをもっと積極的に使ってみてもおもしろいかもしれません。仮に上のファイルを配布するとして、zip書庫なら5MBになりますが、bzip2だと3MB未満になって、低速の回線の人だとダウンロードに要する時間がかなり節約できるでしょう。

bzip2書庫は、解凍は一瞬(と言ったら大げさだけど、圧縮に比べるとかなり高速)なのも良い点です。

さて、ヘビーユーザのかたは、rarと比べるとどうなのか気になっていることでしょう。このへんで、ほかのもう少し「マニアック」な高圧縮書庫と比較検討してみましょう。

Table 2: 高圧縮の書庫形式の例
ファイル形式 オプション サイズ 圧縮結果
Original (ascii text) 59529255 100.0%
rk-mx321450443.6%
szip-b41o25528708124.8%
zzip-mx29563635.0%
bzip2-930596185.1%
GCA(0.9f)データ解析+ヘッダ圧縮31112525.2%
sitMax31526865.3%
77734611465.8%
aceMax. + 2.0 compr. + Delta36924876.2%
yz2a37551316.3%
rar537905086.4%
cab(LZX)LZX 2138003666.4%
yz138698806.5%
lzh(lh7)Level2 lh7 32K47092287.9%

上の表は圧縮率が高い書庫の例です。まず rk がぬきんでていますが、処理時間も(圧縮、解凍とも)相当、長いです。それにしても、すごいアルゴリズムです。次に szip ですが、これは本当に時間がかかる圧縮です。処理を開始してからコーヒーをわかして、のんびり飲み終わってもまだ圧縮が終わってないという感じです。zzip は比較的、高速で、bzip2 とほぼ同じ圧縮率を出しています。bzip2 は、すでに説明したように、Unix では現在、ごくふつうに用いられる形式です。

bzip2 とほぼ互角なのが、日本の GCA で、処理速度もまあまあ速いです。GCAは圧縮対象によっては世界最高級の圧縮率を出します。まだ開発中のソフトなので、正式版では、さらに性能がアップするかもしれません。777 は、圧縮率は高いですが、時間がかかります。他方、yz1(DeepFreezer)の次期開発版 yz2a ですが、圧縮率がこれだけ高く、しかも処理が高速というすばらしい書庫です。筆者は yz1書庫をバックアップなどに常用しています(DeepFreezerは日本製ソフトなので、日本語圏のかたには使いやすいと思います)。

マニアックといわれる rar そして rar と似た感じの ace は、以上の形式の次あたりに来るのであって、じつは rar は、本当に高圧縮というわけでは、ありません。初心者でも扱いやすいマルチボリュームが作れることと、書庫の破損に対する回復用の冗長情報を含ませられることなど、たしかにすぐれた特質を持つ書庫ですが、シェアウェア登録の料金が高すぎるように思います。

次におなじみ cab書庫ですが、ここに来ているのは cab でもふつうの cab でなく LZX 形式のcabです。圧縮率は高いですが、非常に処理が遅いので、これを常用するくらいなら yz1(cab/LZXとほぼ同じ圧縮率で、たぶん百倍以上、高速)を使うべきでしょう。最後に lzh書庫の非公式最高圧縮のlh7形式。これは標準のlzh書庫でなく、動作保証ができないということか公式には使用禁止だそうですが、昔ながらのlzhのアルゴリズムでも最高にがんばれば、このくらいまで圧縮できるということです。そして、次世代の yz* や GCA は、lzhのこの最高到達点のさらに先を出発点としている、とも言えるかもしれません。

上の表のつづきとして、圧縮率があまり高くない書庫を見てみましょう。あまり高圧縮でないといっても、これでもなるべく最高圧縮になるようにオプション指定した結果です。

Table 3: 圧縮率の高くない書庫
ファイル形式 オプション サイズ 圧縮結果
gzip-950730568.5%
zip950731918.5%
arj-jm -m152417358.8%
cab(標準)MSZIP52927628.9%
zip(標準)655172589.3%
bh6064735 10.2%
lzh(標準)Level2 lh5 16K606897710.2%

ごらんのように、世界的に広く用いられている一般的な書庫(zip、gzip、bzip2、cab)のうち、bzip2 以外は、だいたい「圧縮率が高くない」のです。圧縮率だけで書庫の優劣を語るのが浅薄であることは、最初に述べたとおりですが、普及しているということは、それだけ歴史の長い書庫であって、アルゴリズムも最新の知見に照らせば改善の余地が多いかもしれません。例えば、現状、yz1書庫があまり普及していないのは、決して書庫として価値が低いからでなく、単に新しい形式で、まだ広まってないだけでしょう(この状況は、スケールメリットとのかねあいによってネガティブフィードバックとなり、いっそう普及を遅らせる一方、zip のような古い書庫については「すでに広まっている」という事実そのものによって「広まっている」状態が保たれるポジティブフィードバックがあるようです)。最もすぐれたものというのは、たいてい、あまり知られてないわけです。

こうしてみると、gzip や zip や arj は――広く普及しているメリットは無視できないのですが――圧縮アルゴリズムそのものとしては、斬新といういよりすでに歴史的なものと言わざるを得ません。もっとも、gzip、zip などは、けっこう高速なので、圧縮・解凍の速度が問題になる局面では、なお有用でしょう。日本のパソコン通信で常用された lzh 書庫(標準)も、日本国内だけで流通させる書庫に関する限り(インターネットでは、そういう限定は一般には難しいとしても)、歴史的経緯から解凍ツールが充実しているというメリットがあります。今では lzhを解凍できるツールは、ほぼ間違いなくzipを解凍できるので(逆は真にあらず)、新たに書庫を作る場合、通常あえて zip より lzh を選ぶ必要は、ありませんが、lzhファイルの過去の資産は、ぼうだいなので、lzhのサポートは当分なくならないでしょう。

リンク

この記事のURL

テキスト版省パケ版XML版


bzip2書庫をWindowsで扱う

2001年 6月19日
記事ID d10619_2

現在、ネットで公開されている「Unix系の書庫」は gzip が一般的で、Windows ユーザでもこの形式のファイル(拡張子.tar.gz など)は、よく見かけると思います。解凍したこともあるかもしれません。bzip2 も上記のようにすぐれた形式で Unix(Linux)の世界では使われる機会が増えてるようなので、ネット上でも今後、今より広まるかもしれません。

gzip に比べると Windows ユーザには、なじみの薄い bzip2 ですが、じつは、Windows 用の解凍ソフトの多くでは(ごく初心者向けのものは別にして)bzip2書庫もgzip書庫と同じように扱えます。当サイトの現時点のおすすめソフト「eo」や「解凍レンジ」や「Lhaplus」は、いずれも、自前で gzip書庫、bzip2書庫を解凍できますし、無数にある「統合アーカイバプロジェクト系」のソフトの多くも、外部DLL(TAR32.DLL)をインストールすれば、これらの書庫を扱えるようになります。

TAR32.DLL は、cpio、.rpm、.deb などもサポートしています。

bzip2書庫への圧縮も、いくつかのツールで行うことができます。Lhaplus のコンテキストメニューを使うのが、いちばんべんりでしょう(下図参照)。また、lhmelt の作る「TAR書庫」は、tar+gzip または tar+bzip2 から選べるので、こちらも書庫の設定しだいで bzip2 圧縮も可能です。

Lhaplusを導入すれば、圧縮したいファイルのアイコンを右クリックして「圧縮→.bz2」を選ぶだけ

コマンドライン版で良ければ、本家の The bzip2 and libbzip2 official home pageミラー)からダウンロードできます。Windows版は「bzip2-100-x86-win32.exe」のような名前ですが、これを bzip2.exe にリネームしてパスが通っているところに置けばOKです。

bzip2 コマンドライン版の操作法メモ

例えば「abc.txt」を圧縮するには、
bzip2 abc.txt
とすると、もとの abc.txt は削除され、かわりに圧縮された abc.txt.bz2 が出てきます。もとのファイルを削除せずに残すには、
bzip2 -k abc.txt
とします。圧縮率を最高にするには、
bzip2 -9 abc.txt
とします。数字は、1~9の範囲で、小さいほど圧縮処理が高速なかわり圧縮率が低く、大きいほど時間がかかるかわり高圧縮になります。環境にもよりますが、数十メガ程度のファイルなら -9 で圧縮して問題ありません(それがデフォルトのよう)。大きなファイルを圧縮する場合、ハングアップでなくちゃんと処理中であることを確認したければ、
bzip2 -vv abc.txt
とします。gzip にも同様の -v スイッチがありますが、bzip2 では v をふたつ書くといまどのへんを処理してるのか逐次レポートしてくれます。スイッチは、まとめて、
bzip2 -kvv9 abc.txt
のように指定することができます。なお、これらのコマンドは、Unix(Linux)版でも共通です。

複数のファイルをひとつの bzip2書庫にするには、Unix使いがやってるように、まず tar でまとめてから、bzip2 にかければOKです。

関連記事

この記事のURL

テキスト版省パケ版XML版



webmaster@faireal.net