mkuzip: device input patch2006年05月12日 08時04分30秒

さて、なぜここまでしてソースを読んできたかというと、デバイスを圧縮する必要がでてきたからだ。mkuzip ではデバイスは扱えない。だからといって、create_compressed_fs は論外である。5 GB に及ぶメモリをただこれだけの為に買っては来られない。スワップ領域だったら、それぐらい割り当てても大丈夫だか知れないが、一度、swap vnode として、全てを書き出した後に、実メモリ上に読み込み直し、今度はファイルとして、ほぼ同一の内容をディスクに書き出すなど、費やす時間のほとんどが無駄な作業など、やる気にもならない。

そこで mkuzip に -S を加えた。lseek が出来る入力であれば、それで大きさを求めるのが更によい方法である。それは、FreeBSD にパッチが取り込まれたときに考えることにする。加えて、EOF に届いた後は、ゼロで埋められたブロックを一つ追加し、残りの全ての block-index にその位置を記録する。各ブロックが完全に独立しているのを利用している。無駄になる block-index など、高がしれている

パッチは


$ cd /usr/src
$ patch -p1 < mkuzip-S.patch
$ cd usr.bin/mkuzip
$ make install

の様にして当てて、インストールできる。

試してみたところ、問題なく動いている。ファイルからの入力はいままでと全く同じに動いている。デバイスからも -S で十分な大きさを与えることでなんら支障無く圧縮できた。

次回は、mkuzip ですこし、実験してみる。