透過的な圧縮機能を提供し複数の圧縮方式に対応したFuseCompressについて(使い方・注意点・圧縮の対象について)
「透過的な圧縮機能を提供し複数の圧縮方式に対応したFuseCompressについて(概要とディストリのパッケージ)」の続き。
使い方
マウントオプションにfc_c:[圧縮方式]を付けて圧縮ファイルの保存ディレクトリとマウントポイントを指定する。既定の方式はzlib。
(lzo:高速/低圧縮率/読み書きが頻繁な場合) $ fusecompress -o fc_c:lzo [圧縮ファイルの保存ディレクトリ] [マウントポイント] (zlib:やや高速/やや低圧縮率/一般的) $ fusecompress [圧縮ファイルの保存ディレクトリ] [マウントポイント] (bzip2:やや低速/やや高い圧縮率/圧縮率優先の場合) $ fusecompress -o fc_c:bzip2 [圧縮ファイルの保存ディレクトリ] [マウントポイント] (lzma:特に圧縮が非常に低速/非常に高い圧縮率/圧縮率優先・読み込みが多い場合) $ fusecompress -o fc_c:lzma [圧縮ファイルの保存ディレクトリ] [マウントポイント]
コマンドが特にメッセージを出さずに終了すればOKで、マウントポイントのディレクトリ以下にデータを書き込んだときに圧縮ファイルの保存ディレクトリ以下に同名のファイルが圧縮されて保存される。ただし、オプション無しで実行したときに
Files with any of the following mime type will not be compressed: application/ogg application/pdf application/vnd.rn-realmedia application/x-arc application/x-arj application/x-bzip2 application/x-compress application/x-cpio application/x-debian-package application/x-gzip application/x-lharc application/x-quicktime application/x-rar application/x-rpm application/x-shockwave-flash application/x-zip application/x-zoo audio/mp4 audio/mpeg audio/x-mod audio/x-pn-realaudio image/gif image/jp2 image/jpeg image/png image/x-quicktime video/3gpp video/mp2t video/mp4 video/mp4v-es video/mpeg video/mpv video/quicktime
のように注意書きが出るように、上記の「既に圧縮されている」ファイル形式は圧縮しないようになっている。PDFやオーディオのMODなども圧縮形式扱い。*1
マウント解除は「fusermount -u」で行う。
$ fusermount -u [マウントポイント]
デスクトップ環境によってはデスクトップにマウントポイントのアイコンが出るが、GUIでそのまま「マウント解除」の操作を行ってもうまくいかないことが多い?
注意点
lsコマンドに-lオプションを付けたときに一番上に出る「合計」やduコマンドの出力は圧縮後のサイズを示す。また、baobab(ディスク使用量の解析)のようなディスク使用量取得ツールも圧縮後のサイズを返すことがある。
例えば、カーネルのソースツリーをマウントポイント以下に展開してディスク使用量を計測すると下のように見える。
無圧縮のディレクトリでは下のようになる。
一方で、「ls -l」の各ファイルのサイズ部分は元のサイズを正しく表示する。NautilusなどのGUIファイルマネージャでも、各ファイルのサイズは元のサイズで表示される。
下は例としてカーネル(2.6.29.3)ソースツリーのfirmware/acenic/ディレクトリの内容を一覧している。
(無圧縮時) $ ls -lh uncompressed/linux-2.6.29.3/firmware/acenic 合計 412K -rw-r--r-- 1 [ユーザ] [グループ] 197K 2009-05-09 07:47 tg1.bin.ihex -rw-r--r-- 1 [ユーザ] [グループ] 209K 2009-05-09 07:47 tg2.bin.ihex (マウントポイント以下では合計の表示が各ファイルのサイズの合計と一致しない) $ ls -lh fusecompress-bzip2-mp/linux-2.6.29.3/firmware/acenic 合計 112K -rw-r--r-- 1 [ユーザ] [グループ] 197K 2009-05-09 07:47 tg1.bin.ihex -rw-r--r-- 1 [ユーザ] [グループ] 209K 2009-05-09 07:47 tg2.bin.ihex (圧縮ファイルの保存ディレクトリでは各ファイルのサイズも合計も圧縮済みのもの) $ ls -lh bzip2ed/linux-2.6.29.3/firmware/acenic 合計 112K -rw-r--r-- 1 [ユーザ] [グループ] 51K 2009-05-09 07:47 tg1.bin.ihex -rw-r--r-- 1 [ユーザ] [グループ] 57K 2009-05-09 07:47 tg2.bin.ihex
圧縮ファイルシステムの対象に関して再び考える
「読み取るだけのファイルやディレクトリを圧縮しつつ、無圧縮時と同様に扱う(概要と準備)」でも圧縮の対象については扱っているが、書き込みが可能な点も踏まえてこの機会に使いどころについてをもう一度考えてみた。
テキストにはやはり効果大・実行形式は微妙
プレーンテキスト(文字情報のみ)のデータ*2についてはデータの性質上圧縮がしやすいため、かなり小さくなる。上のbaobabのスクリーンショットにもあるが、Linux(カーネル)のバージョン2.6.29.3のソースツリーをbzip2で試したところ、ディスク使用量が364MiBから149MiB(約41%)になっている。
テキストの他、機械語のプログラムの類にも圧縮の余地が残っている場合が結構ある。ただ、実行形式のプログラムに圧縮ファイルシステムを使用すると起動が遅くなることやupxのように実行可能なまま高い圧縮率で縮めるツールがあったりすることなどから、おすすめはできない。
下はupxで実行形式を圧縮(pack)している例。
$ upx -9 cpufreqd-icon Ultimate Packer for eXecutables Copyright (C) 1996 - 2008 UPX 3.03 Markus Oberhumer, Laszlo Molnar & John Reiser Apr 27th 2008 File size Ratio Format Name -------------------- ------ ----------- ----------- 23256 -> 9976 42.90% linux/ElfAMD cpufreqd-icon Packed 1 file.
圧縮後の実行形式は圧縮前と同じように実行できるが、(伸長(unpack)しないと)lddやobjdumpなどの機械語に関するツールを使用することはできない。
圧縮しても直接アプリケーションから開けるものには使う必要がない
GIMPで画面全体(1280x1024)のスクリーンショットを撮ってそのまま保存したものをbzip2圧縮のマウントポイント以下に入れたところ、776KiBが282KiBになった。しかしGIMPでは元々「.xcf.bz2」の拡張子で保存するとbzip2圧縮されるようになっているため、あまり美味しいとは言えない。
ファイル自体が圧縮されているものというと、オフィスアプリケーションのOpenDocument形式などにおいて他にもZip圧縮されているものが結構ある。そういったものも同様に(元々小さなサイズで保存できるため)圧縮の余地がない。
SVG画像などはアプリケーションによっては圧縮をサポートしていることもある(例:Inkscape)が、SVG形式を扱うツールの全体から見ると一部なので、使い方によっては圧縮ファイルシステムが役に立つかもしれない。その他、無圧縮ながら圧縮しての保存ができない形式(例:.bmpファイル)をその形式のまま配置する必要のある場合にも役に立つと考えられる。
無圧縮オーディオでは可逆圧縮エンコードのほうがサイズ的には有利だが多少は小さくもできる
適当に録音した無圧縮wavファイルを用意してbzip2圧縮した場合と(エンコード/デコード時間のバランスの良い)可逆圧縮方式TTAでエンコードした場合とで圧縮率を比べてみた。結果は
のようになり、TTAへのエンコードと比べると圧縮/伸長の時間と圧縮率の両方においてかなり劣ることが分かった。
ただ、.wavファイルのままで扱いたいのであれば使えなくもない(少しはディスク領域の節約になる)。
関連記事:
- 読み取るだけのファイルやディレクトリを圧縮しつつ、無圧縮時と同様に扱う(概要と準備)
- ディスク使用状況を調べて表示するツール
- 透過的な圧縮機能を提供し複数の圧縮方式に対応したFuseCompressについて(概要とディストリのパッケージ)
使用したバージョン:
- FuseCompress 2.5
- gnome-utils(baobabを含むパッケージ) 2.26.0
- upx 3.03
- ttaenc 3.4.1
関連URL: