ページへ戻る

− Links

 印刷 

why_sar のバックアップソース(No.5) :: OSASK計画

osaskwiki:why_sar のバックアップソース(No.5)

« Prev[4]  Next »[5]
* sarアーカイブ形式の紹介
-(by [[K]], 2004.10.19)

-(註)
--このページは、OSASKなどをsar形式で公開するときに「sar形式についてはこちら」でリンクされる予定のページです(OSASK ver.4.7からはOSASKの一般公開版は、sarとlzhの両方で公開されます)。
--このページは肝心のsartol0hができてから書くべきなのですが、思いついた文面をどこかに書いておかないと忘れてしまいそうなので、ややフライングして書いています(sartol0hはtek5にも対応したsartolです)。
--この註は、OSASK ver.4.7の公開と同時にコメントアウトします。

-sar形式は、lzhやzipやtar.gzなどのような、書庫形式の一つです。
-展開には「えんやこらsar」を使います(Windowsの場合)。
--えんやこらsar ver.1.4 のダウンロード:(ここにダウンロードURLを書く予定)
--使い方:
---インストールしたらenyasar.exeができますので、解凍したいsarアーカイブをドラック&ドロップしてください。
---展開に関する設定をしたいとき(展開場所など)は、enyasar.exeをダブルクリックで起動してください。設定画面が出ます。
---拡張子sarにenyasar.exeを関連付けさせる場合は次のようにします。まずいきなり適当なsarアーカイブをダブルクリックして「ファイルを開くアプリケーションの選択」ウィンドウを出させて、「その他」ボタンを押してenyasar.exeを選び、「これらのファイルを開くときは、いつもこのアプリケーションを使う」にチェックをつけたままでOKを押してください。これで以降はsarアーカイブをダブルクリックするだけで展開されます。
-UNIX系OSユーザのための展開ツールもあります。→(I.Tak.さんのツールへリンクする予定)

*** なぜsar形式で配布するのか
-多くの人は、こんな面倒な形式で配布などせずに、すなおにzipやlzhで配布すればいいじゃないかと思うでしょう。これには理由があります。
-sar形式は多くの場合でtek圧縮と組み合わされて配布されますが、これによりアーカイブがとても小さくなります。また展開も高速に行われます。
-もともとsarやtekというフォーマットを作ることになったのは、[[K]]がOSASKやKHBIOSで標準的にサポートする圧縮形式を決めるにあたって、既存のアーカイブ形式に強い不満を感じたからです。これらは圧縮率が良くなかったり、どんなにプログラムで工夫しても展開を速くできないようになっていたりしました(これは根底の圧縮アルゴリズムに原因があるのでどうしようもない)。
-常識的な議論として、圧縮率が高い形式は展開時間が長くかかります。逆に展開時間が短いものは、圧縮率があまりよくありません。それは圧縮率を上げるために高度なアルゴリズムを使っているからなので、傾向としては当然のことです。
-しかし同じくらいの圧縮率なのに展開が他のものよりも速い形式というのがあります。もしくは同じくらいの展開速度なのに圧縮率が他よりも良い形式です。そういう形式こそ、真に価値ある形式だと[[K]]は考えます。もちろん展開速度というものは展開プログラムをうまく作るかどうかで大きく左右されるものですが、どんなにうまく作っても圧縮形式(圧縮アルゴリズム)による限界があるのです。圧縮率が同程度なら、その限界速度が速い形式こそ、圧縮形式としては良い形式ではないでしょうか。
-他の観点もあります。それは展開作業のためにたくさんのメモリを要しないことです。実用的な展開速度のためには大量の作業用メモリが必要、という形式がありますが、そういうものはメモリが少ない環境での展開が絶望的になります(メモリが少ない環境というのは、たいてい利用可能なCPUの処理能力もそれほど大きくはない)。自分だけが使う場合は問題がないのですが、不特定多数の人にファイルを渡す場合や、将来携帯用端末で使うときなどにはこれが問題になり、結果的に負の資産になる可能性もあります。
-もちろん、多少のエラーを自動的に修復できることや、暗号化機能を持ったもの、アーカイブファイル分割機能の有無、OSでの標準サポート、それよりなにより使いやすいツール群が揃っていることなどこそ、使いやすいアーカイブ形式に求められる条件だという観点もあります。それはそのとおりです。エラー修復や暗号化や分割機能は、sar形式でも当初より対応を検討していて、かつそのための拡張に速やかに対応できるように準備をしてあります。OSでのサポートやツールの充実は、ユーザが増えれば自然に充実していくことでしょう。
-現在では実に多くのアーカイブ形式が開発されています。しかし圧縮率の割には展開速度が遅いような、そんな形式でCD-RやDVDにバックアップとして残していくべきでしょうか。今までのぶんはしょうがないと思いますが、これからはもっと積極的にどの形式が良いかを考えて、もし使いにくいという問題があれば、使いやすくなるようにツールを充実させていくべきだと[[K]]は思います。その意思の反映として、sar形式での配布を行っているというわけです。

-「これからはコンピュータはもっともっと速くなる、メモリだってジャブジャブつかっていい、だからとにかく圧縮率にこそこだわるべきだ」という人には、PAQARがおすすめです。でも[[K]]はその意見には賛成ではないので、PAQ形式での配布は予定していません。
--PAQARのダウンロード:http://cs.fit.edu/~mmahoney/compression/
-「これからはハードディスクがもっと大容量化して、光ディスクもどんどん大容量化して、ネットワークだって途方もなく速くなるはずだから、圧縮なんて不要だ」という人は、是非無圧縮で暮らしてください。でも[[K]]はこの意見にも賛成ではないので、無圧縮形式での配布は予定していません。配布されているsarアーカイブを展開して保存したのちに、アーカイブを捨てればいいと思います。

*** ベンチマーク
-いくつかのアーカイブ形式について、圧縮能力の例を示します。
|       |lzh|zip|tar.gz|tar.bz2|dgc|7z|''sar''|paq|
|osat45i|RIGHT:532093|RIGHT:524182|RIGHT:522146|RIGHT:546988|RIGHT:529568|RIGHT:503290|RIGHT:''498125''|RIGHT:465714|
|sartol0g|RIGHT:46686|RIGHT:46172|RIGHT:44175|RIGHT:43202|RIGHT:41648|RIGHT:39861|RIGHT:''39017''|RIGHT:32802|
|make46|RIGHT:438752|RIGHT:413707|RIGHT:398232|RIGHT:302464|RIGHT:248784|RIGHT:241575|RIGHT:''238116''|RIGHT:168127|
--単位はバイトです。
-以下は上記の結果について、paqの結果を100として相対指標化したものです。こちらのほうが比較がしやすいです。
|       |lzh|zip|tar.gz|tar.bz2|dgc|7z|''sar''|paq|
|osat45i|114.3|112.6|112.1|117.5|113.7|108.1|''107.0''|100.0|
|sartol0g|142.3|140.8|134.7|131.7|127.0|121.5|''118.9''|100.0|
|make46|261.0|246.1|236.9|179.9|148.0|143.7|''141.6''|100.0|
|展開作業域|8KB未満|8KB未満|8KB未満|2.3MB|不明|28KB|''32KB''|120MB|
--sar形式ではtek5圧縮を使っています。
--lzhはlh7形式です。
--dgcはDGCA 1.06です。
--7zはデフォルトのLZMA形式をそのまま使っています。
--paqはPAQAR v1.3でオプション-5を使っています(今はもっとバージョンが進んでいるようです)。
//--PAQAR以外は展開が速すぎて時間を測れませんでした。
//--ブロックソート系(bz2やdgc)は圧縮対象によって得手不得手がかなりあるのですが、どうやらこれらの圧縮対象は不得手のようです。
--展開作業域にはLZのスライド辞書用のための領域は、展開結果と兼ねられるのでカウントしていません(出力バッファを上回る遠方の辞書参照をディスクアクセスなどで参照しても、極端な速度低下がないと思われるため)。
--lzh, zip, gzの展開作業域は8KB未満としていますが、詳細はよく分かりません(静的ハフマンのためにどのくらいが必要なのか詳細不明)。たぶんもっと小さいです。
//--bz2のブロックサイズから作業域の大きさを割り出す方法がわかりません。900KBを4倍すればいいのかな?...分かりました:100KB + (ブロックサイズ x 2.5)
--dgcの展開作業域は不明ですが、おそらくブロックソート系なので、bz2と同程度はありそうな気がします。

* こめんと欄
#comment

« Prev[4]  Next »[5]