ksaitoの日記

日々試したことの覚え書き

tar, pax, darのベンチマーク

良く使うアーカイブについて簡単なベンチマークしてみました。
アーカイブの対象は、以下の通り
総サイズ:33,030,144 byte
総ファイル数:5,148個(ファイル=1,946, ディレクトリ=3,186, シンボリックリック=16)

アーカイブ方式 サイズ(byte) アーカイブにかかった時間(s) 圧縮率 単位時間当たりに圧縮できるサイズ(MB/s)
tar 16,281,600 0.25 49% 126.0
targz 9,263,442 1.04 28% 30.3
tarbz2 8,706,244 4.69 26% 6.7
pax 16,281,600 0.78 49% 40.4
paxgz 9,260,991 1.49 28% 21.1
paxbz2 8,717,847 5.18 26% 6.1
dar 13,191,132 1.04 40% 30.3

もう少しアーカイブ対象を変えて結果を検証する必要があります。
paxのアーカイブ形式は、デフォルトではtar形式ですが、tarコマンドと比べてアーカイブに約3倍の時間がかかります。体感でも少し遅いと感じます。
darコマンドは、アーカイブコマンドと言うよりバックアップコマンドなので圧縮率は、比較してもあまり意味がありません。
フル/差分/増分のバックアップが作成できるので、うまく設計すれば大抵のバックアップ要件を満たしてくれます。
paxも差分を作ることができますが、darではファイルの削除についても管理できるところが優れています。
darで3GBのデータをバックアップする予定ですが、予想では、100秒程度の時間がかかり1.7GBに圧縮されるでしょう。

※実際には約7分かかりました。バックアップ対象のファイルがJPEGやMPEG4だったので、まったく圧縮されませんでした。

C:\Users\ksaito>backup-pub.bat
start 2007/12/23 02:47

C:\Users>dar -c backup\pub -R .\Public -g Videos -g Pictures

 --------------------------------------------
 3276 inode(s) saved
 with 0 hard link(s) recorded
 0 inode(s) changed at the moment of the backup
 0 inode(s) not saved (no inode/file change)
 0 inode(s) failed to save (filesystem error)
 14 inode(s) ignored (excluded by filters)
 0 inode(s) recorded as deleted from reference backup
 --------------------------------------------
 Total number of inode considered: 3290
 --------------------------------------------

fin 2007/12/23 02:54

C:\Users>

paxコマンド

tarとcpioをサポートしたコマンドです。
fオプションでアーカイブファイルを指定します。
下記のようにzオプションでtarzip形式のファイルをリストすることができます。

$ sudo apt-get install pax
$ pax -zf apache-lenya-1.2.5-bin.tar.gz | head
apache-lenya-1.2.5-bin
apache-lenya-1.2.5-bin/legal
apache-lenya-1.2.5-bin/tools
apache-lenya-1.2.5-bin/tools/bin
apache-lenya-1.2.5-bin/tools/configure
apache-lenya-1.2.5-bin/tools/configure/lib
apache-lenya-1.2.5-bin/tools/configure/src
apache-lenya-1.2.5-bin/tools/configure/src/java
apache-lenya-1.2.5-bin/tools/configure/src/java/org
apache-lenya-1.2.5-bin/tools/configure/src/java/org/apache
$ 

下記のsオプションを使うとパスの置換ができるので結構使えそうです。

-s/パターン1/パターン2/

こんな感じで"-bin"のような配布側では必要ですが受け取り側では不要なパスを置換したりします。

$ pax -s/-bin// -zf apache-lenya-1.2.5-bin.tar.gz | head
apache-lenya-1.2.5
apache-lenya-1.2.5/legal
apache-lenya-1.2.5/tools
apache-lenya-1.2.5/tools/bin
apache-lenya-1.2.5/tools/configure
apache-lenya-1.2.5/tools/configure/lib
apache-lenya-1.2.5/tools/configure/src
apache-lenya-1.2.5/tools/configure/src/java
apache-lenya-1.2.5/tools/configure/src/java/org
apache-lenya-1.2.5/tools/configure/src/java/org/apache
$ 

パイプを使った入出力が基本でアーカイブする条件の指定も細かくできるので使い慣れればtarより便利そうです。