lrzip
Long Range ZIP (別名 Lzma RZIP) は巨大なファイルに最適化された圧縮プログラムです。冗長性を排除する rzip と通常の圧縮 (LZMA, LZO, gzip, bzip2, ZPAQ) を組み合わせることにより、ファイルが巨大になればなるほど、高い圧縮パフォーマンスを得ることができます。特に 100MB 以上のファイルで高い効果があります。サイズを小さくするか圧縮速度を速くするかどちらかを選ぶことが可能です。
インストール
使用方法
圧縮
ディレクトリを (再帰的に) 圧縮するには lrztar が必要です。最初にディレクトリが tar でまとめられてから圧縮されます。tar で gzip や xz を使って圧縮するのと同じです (tar zcf ...
または tar Jcz ...
)。なお、rzip と同様に、事前の圧縮処理の後に圧縮アルゴリズムが適用され、例えば一般的な LZMA 圧縮アーカイブとは異なります。
foo
という名前のディレクトリから LZMA で圧縮されたアーカイブ foo.tar.lrz
を作成するには:
$ lrztar foo
bar
という名前のディレクトリから LZMA 圧縮アーカイブ bar.lrz
を作成するには:
$ lrzip bar
圧縮率を高めたい場合、-z
スイッチを追加することで ZPAQ が有効になりますが LZMA よりも長い時間がかかります:
$ lrztar -z foo
圧縮・展開の時間を高速にしたい場合、-l
スイッチで LZO を使うことができます:
$ lrzip -l bar
展開
圧縮されたディレクトリを展開するには:
$ lrzuntar foo.tar.lrz
bar.lrz
を bar
に展開するには:
$ lrunzip bar.lrz
詳細
Lrzip は rzip の拡張版で、ファーストパスの長距離冗長性削減を行います。lrzip の修正により、メモリサイズに応じてスケールするようになりました。データはその後、次のいずれかになります。
- LZMA (デフォルト) で圧縮されます。これは bzip2 の約2倍の速度で優れた圧縮を行います。
- この他にも、様々な理由で選ばれた圧縮機によって圧縮されます。
- ZPAQ: LZMA よりも 20% も小さい究極の圧縮率を誇るが、圧縮と伸張の両方がとても遅いです。
- LZO: 非常に高速な圧縮・伸長。ほとんどのマシンではディスクへの書き込みよりも速く圧縮されるため、大きなファイルを単にコピーするのと同じ速度 (あるいはそれ以上の速度) で圧縮することができます。
- GZIP: LZO とほぼ同じ速度ですが、より優れた圧縮を行います。
- BZIP2: ある種のデファクト Linux 標準ですが、LZMA と gzip の中間的な存在で、どちらともいえません。
- 非圧縮のままにしておいて rzip を用意します。この形式は、結果となるファイルに対して行われる圧縮を、サイズと速度の両方において、大幅に改善します (rzip 準備の性質上、同様の圧縮可能なデータブロックをマージして、より小さなファイルを作成するため。) 改善することで、圧縮をわずかに損なうことなく非常に遅い圧縮を高速化するか、単純な圧縮アルゴリズムの圧縮を大幅に増加させるかのどちらかになります。
主なデメリットは
- メインの lrzip アプリケーションは単一のファイルに対してのみ動作するので、 完全なアーカイバとして使うには lrztar ラッパーが必要です。
- 最高のパフォーマンスを得るためには多くのメモリを必要とし (圧縮するデータのサイズと同程度のメモリ。ただし、以下のスライディングmmapを参照)、256MB以下では(圧縮に) 本当に使えません。解凍にはより少ないメモリしか必要とせず、より小さいメモリしか持たないマシンでも動作します。オペレーティングシステムが機能するように、これらの低ラムマシンではスワップを有効にする必要があります。
- STDIN/STDOUT は圧縮と伸張の両方でうまく動作するが、 この方法で圧縮された大きなファイルは、結局は効率よく圧縮されない。
lrzip のユニークな特徴は、システムで利用可能な RAM を常に最大限に活用しようとすることです。これはデフォルトで行われ、メモリを使い果たすことなく可能な限り大きなサイズのウィンドウを選択します。また、ユニークな "スライディング mmap" 機能により、 ファイルが大きい場合は RAM サイズより大きな圧縮ウィンドウを使用することも可能です。これは (-U
オプションで) 通常通り1つの大きな mmap バッファを実装し、ファイルのどの部分が現在検査されているかを追跡するために小さな移動バッファを実装し、はるかに大きな単一の mmap バッファをエミュレートすることによって実現されます。残念ながら、このモードは何倍も遅くなることがあります。