こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

tar -zcvfコマンドでの圧縮について

MRTGデータをバックアップするサーバの移行(サーバB→C)をしていますが、
MRTGデータを取得して圧縮した時の容量の差を疑問に思っています。
なぜか2倍になってしまいます。
解凍するとデータは同じ容量です、
データを取得するShellはまったく同じものを使用していますし、
取得するデータの内容も変わらないと思います。
データ圧縮の差はOSの差、tar,gzipパッケージの差、ハードの差?
何が原因なのでしょうか?
勉強不足で申し訳ありませんが、教えて頂けたら幸いです。
よろしくお願いします。

MRTGサーバAのデータをサーバBでバックアップすると約50MB(tar.gzで固める)⇒解凍すると約200MB

MRTGサーバAのデータをサーバCでバックアップすると約100MB(tar.gzで固める))⇒解凍すると約200MB


サーバ情報

サーバA MRTGツールにてデータ取得 Red Hat Enterprise5.3
サーバB MRTGデータバックサーバ SunOS 5.10
サーバC MRTGデータバックサーバ SunOS 5.9 

投稿日時 - 2009-12-27 20:10:48

QNo.5551291

困ってます

質問者が選んだベストアンサー

サーバB と C で使用している gzip および GNU tar のバージョンはどのようになっていますか?

ちなみに手元の環境だと、以下のようになってます。
(どちらも gzip および GNU tar の最新パッチは適用済み)

・Solaris 10 8/07 x86 (SunOS 5.10)
% /usr/bin/gzip -V
gzip 1.3.5
(2002-09-30)
Copyright 2002 Free Software Foundation
Copyright 1992-1993 Jean-loup Gailly
This program comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of this program
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.
Compilation options:
DIRENT UTIME STDC_HEADERS HAVE_UNISTD_H HAVE_MEMORY_H HAVE_STRING_H HAVE_LSTAT ASMV
Written by Jean-loup Gailly.
patched for Sun BugIDs 6294656 6283819
patched for CVE-2006-4334, CVE-2006-4335, CVE-2006-4336, CVE-2006-4337, CVE-2006-4338

% /usr/sfw/bin/gtar --version
tar (GNU tar) 1.17

・Solaris 9 9/05 x86 (SunOS 5.9)
% /usr/bin/gzip -V
gzip 1.3.5
(2002-09-30)
Copyright 2002 Free Software Foundation
Copyright 1992-1993 Jean-loup Gailly
This program comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of this program
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.
Compilation options:
DIRENT UTIME STDC_HEADERS HAVE_UNISTD_H HAVE_MEMORY_H HAVE_STRING_H HAVE_LSTAT ASMV
Written by Jean-loup Gailly.
patched for Sun BugIDs 6294656 6283819
patched for CVE-2006-4334, CVE-2006-4335, CVE-2006-4336, CVE-2006-4337, CVE-2006-4338

% /usr/sfw/bin/gtar --version
tar (GNU tar) 1.17

投稿日時 - 2009-12-27 21:09:15

補足

ご回答ありがとうございます。
この状況になってから、移行するsolaris9のtar、gzipのバージョンは上げました。
バージョンを情報を載せます。
solaris9の方がバージョンは新しくなってます。
原因はハードの差ですか・・・?
圧縮に時間がかかるとかだと思うんですが。

●サーバB Solaris10(最近導入された最新機器 SPARC)


-bash-3.00$ /usr/bin/gzip -V
gzip 1.3.5

-bash-3.00$ /usr/local/bin/gzip -V
gzip 1.3.12


-bash-3.00$ /usr/local/bin/tar --version
tar (GNU tar) 1.21

●サーバC Solaris9(4年落ちの機器 SPARC)

bash-2.05$ /usr/bin/gzip -V
gzip 1.3.5

bash-2.05$ /usr/local/bin/gzip --version
gzip 1.3.13

# /usr/local/bin/tar --version
tar (GNU tar) 1.22

投稿日時 - 2009-12-28 21:08:37

お礼

ご回答ありがとうございました。
事象が解決しました。
MRTGデータをwgetを使って、持ってきていましたが
圧縮データとはあまり関係ないので、バージョンはそのままでいましたが
wget1.7 → wget1.10.2にしましたら、圧縮データが半分以下になりました。

事象解決の方向性を教えていただきありがとうございました。

投稿日時 - 2009-12-29 21:58:56

このQ&Aは役に立ちましたか?

9人が「このQ&Aが役に立った」と投票しています

回答(4)

No.3 です。
もう一つ原因となりそうなことがありました。
gzip は環境変数 GZIP でオプションを指定できるのですが、サーバ B か C(あるいは両方)で環境変数 GZIP に異なる compression level を指定していると、圧縮後のファイルサイズに違いがでる原因になります。

サーバ B か C(あるいは両方)で環境変数 GZIP を設定していたりはしませんか?

投稿日時 - 2009-12-28 22:12:47

> この状況になってから、移行するsolaris9のtar、gzipのバージョンは上げました。
> バージョンを情報を載せます。
> solaris9の方がバージョンは新しくなってます。
> 原因はハードの差ですか・・・?

サーバ B と C で異なるバージョンの gzip がインストールされていますね。
おそらくそれが原因ではないでしょうか?

GNU tar の z オプションを指定すると、tar コマンド内部で gzip コマンドを呼び出すのですが、どの gzip コマンドを呼び出すのかは環境変数 PATH に依存します。

tar -zcvf を実行した際と同じ環境で、サーバ B と C のそれぞれで which gzip をすると GNU tar からどちらの gzip コマンドが実行されたか分かります。
どちらが実行されていますか?

おそらく、サーバ B と C では環境変数 PATH の設定が異なり、異なるバージョンの gzip コマンドが実行されているのではないでしょうか?

また、GNU tar の z オプションを使用せずに、以下の例のように明示的にフルパスで同じバージョンの gzip コマンドを使用するとファイルサイズはどうなりますか?

例) tar cvf - hoge | /usr/bin/gzip - > hoge.tar.gz

投稿日時 - 2009-12-28 21:57:53

お礼

ご回答ありがとうございました。
事象が解決しました。
MRTGデータをwgetを使って、持ってきていましたが
圧縮データとはあまり関係ないので、バージョンはそのままでいましたが
wget1.7 → wget1.10.2にしましたら、圧縮データが半分以下になりました。
環境変数やPATHなど勉強になりました。

投稿日時 - 2009-12-29 21:56:55

ANo.1

データが異なると、圧縮率が変わるのは当然ですが、余り違わないとわかっているデータで、それだけの差が出るのは、お考えの通り、調査する価値がありますね。
全く同じデータで、比較できないのでしょうか?

あと、gzip には圧縮度のオプションがありますが、tar から呼ばれるときのオプションが異なるのかもしれません。
一旦、tar cvf で tarファイルにして、gzip -9 (圧縮度最高)で圧縮してみてください。

投稿日時 - 2009-12-27 20:42:12

お礼

ご回答ありがとうございました。
事象が解決しました。
MRTGデータをwgetを使って、持ってきていましたが
圧縮データとはあまり関係ないので、バージョンはそのままでいましたが
wget1.7 → wget1.10.2にしましたら、圧縮データが半分以下になりました。

投稿日時 - 2009-12-29 21:55:16

あなたにオススメの質問