圧縮アルゴリズム

SquashFSですが、3.0からファイルサイズの制限が64bitになるようです。まぁ、そりゃそうですよね。現在でもCVSからダウンロードすれば使えるようです。

SquashFSからcloopに移行しようと思った理由は、

  1. SquashFSのファイルサイズの制限
  2. SquashFSファイルシステムをループバックマウントするので、オーバーヘッドが大きいのでは?という憶測(cloopはブロックデバイスなので、直接cowloopにつなげられる)

に加えて、
この文章に、

cloop では、現在ブロックの圧縮・伸張アルゴリズムにLZ77 を zlib(2.01-5 からは LZMA を AdvanceCOMPの拡張)で実装している.

と書いてあったことです。

LZMAは「圧縮にかなり時間がかかる一方、展開が速くて圧縮率が高い」という圧縮アルゴリズムで、まさにLiveCDにぴったりな圧縮アルゴリズムです。

ではなぜSquashFSや昔のcloopがDeflate(gzipやLZHとほぼ同じ方法)を使っているかと言えば、Linuxカーネル自体(と言うかカーネルに取り込まれているzlib)がDeflateをサポートしているからだと思います。


で、今日cloop-2.02-1のソースを眺めてみたわけです(CC="gcc -m32"を指定するとコンパイルできなかったから)。そうすると、圧縮エンジンにAdvanceCOMPを使っているみたいなんです。AdvanceCOMPをページを見るとものすごくわかりやすく書いてありますけど、圧縮アルゴリズムはDeflate 7-Zipです。おそらく、7-Zipプロジェクトで改良されたDeflateアルゴリズムでしょう。

さらに、cloopのカーネルモジュールは、AdvanceCOMPのライブラリと一切リンクしていません。つまり、圧縮はAdvanceCOMPの改良Deflateを使って、展開はカーネル内蔵(zlib)のDeflateを使っているわけです。

実際、cloopのソースの中身には、zlib_inflate()関数が使われています。


…というわけで、cloopはLZMAではない、合っていますよね?


そんなこんなで、cloopに移行する理由の3つの内2つは消えてしまいました。


…どうしよう。どなたかDevice MapperでLZMA圧縮ターゲット(つまり、dm-compress)を作っていただけませんか?