アーカイバを試してみる

大量のファイルを tar 等でアーカイブすると時間がかかる場合があります。tar の他にアーカイブツールはいくつかありますが、速度に差はあるんでしょうか?ちょっと試してみましょう。

まずはゴミファイルを /tmp/insane に作りましょう。このための ruby スクリプトを書いてみました。

#!/usr/local/ruby-2.0.0-p353/bin/ruby
# coding: utf-8

# ゴミファイルをぶちまけるディレクトリ
PATH = "/tmp/insane"

unless Dir.exist? PATH
  puts "#{PATH} を作成中"
  Dir.mkdir PATH
end

puts "#{PATH} に移動します"
Dir.chdir PATH

200000.times{|i|
  puts "#{i} 個目のゴミを作成中"
  File.open("junk_#{i}", "w"){|f|
    f.puts i.to_s
  }
}

puts "おしまい!"

実行します。

time ruby /tmp/takeadump.rb
# 実行結果
#中略
#real    1m17.191s
#user    0m7.097s
#sys     0m14.191s

i ノードを浪費しました。ディスクスペースも無駄遣いしてます。

df -i /tmp
# 実行結果
#ファイルシス   Iノード  I使用 I残り I使用% マウント位置
#/dev/sda6       262144 200022 62122    77% /tmp
du -sh /tmp/insane
# 実行結果
#787M    /tmpinsane

まずは tar (GNU tar) でまとめてみましょう!

cd /tmp
time tar cf insane.tar insane
# 実行結果
#
#real    3m17.056s
#user    0m2.006s
#sys     0m42.312s
ls -lh insane.tar 
# 実行結果
#-rw-r--r-- 1 kozu kozu 196M  1月 17 14:47 insane.tar

次は zip です。公平のため、非圧縮でアーカイビングしました。

time zip -qr0 insane.zip insane
# 実行結果
#
#real    2m7.208s
#user    0m4.507s
#sys     0m46.748s

今度は cpio です。

time (find insane | cpio --quiet -oO insane.cpio)
# 実行結果
#
#real    1m47.770s
#user    0m2.152s
#sys     0m40.612s

dar と xar も試しましたが、十分経っても終わらなかったので中止しました…。

tar, zip, cpio の 3 つをそれぞれ3回連続で実行した時の実行時間 (秒) の平均を出してみました。

tar: 109.51800
zip: 109.01466
cpio: 96.78533

ファイルサイズも興味深いです。

ls -lh insane.*
# 実行結果
#-rw-r--r-- 1 kozu kozu  10M  1月 17 17:59 insane.cpio
#-rw-r--r-- 1 kozu kozu 196M  1月 17 17:46 insane.tar
#-rw-r--r-- 1 kozu kozu  36M  1月 17 17:52 insane.zip
gzip -v insane.*
# 実行結果
#insane.cpio:     79.6% -- replaced with insane.cpio.gz
#insane.tar:      98.1% -- replaced with insane.tar.gz
#insane.zip:      79.3% -- replaced with insane.zip.gz
ls -lh insane.*
# 実行結果
#-rw-r--r-- 1 kozu kozu 2.1M  1月 17 17:59 insane.cpio.gz
#-rw-r--r-- 1 kozu kozu 3.7M  1月 17 17:46 insane.tar.gz
#-rw-r--r-- 1 kozu kozu 7.5M  1月 17 17:52 insane.zip.gz

cpio のアーカイブが妙に小さいですが、展開するとちゃんと 200,000 個のファイルがありました。

zcat insane.cpio.gz | cpio -i
# 実行結果
#20305 blocks
ls -f insane | wc -l
# 実行結果
#200002

cpio バンザイ!

(コウヅ)

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中