圧縮アルゴリズム
SquashFSですが、3.0からファイルサイズの制限が64bitになるようです。まぁ、そりゃそうですよね。現在でもCVSからダウンロードすれば使えるようです。
SquashFSからcloopに移行しようと思った理由は、
- SquashFSのファイルサイズの制限
- 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)を作っていただけませんか?