- ベストアンサー
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
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
サーバ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
その他の回答 (3)
No.3 です。 もう一つ原因となりそうなことがありました。 gzip は環境変数 GZIP でオプションを指定できるのですが、サーバ B か C(あるいは両方)で環境変数 GZIP に異なる compression level を指定していると、圧縮後のファイルサイズに違いがでる原因になります。 サーバ B か C(あるいは両方)で環境変数 GZIP を設定していたりはしませんか?
> この状況になってから、移行する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
お礼
ご回答ありがとうございました。 事象が解決しました。 MRTGデータをwgetを使って、持ってきていましたが 圧縮データとはあまり関係ないので、バージョンはそのままでいましたが wget1.7 → wget1.10.2にしましたら、圧縮データが半分以下になりました。 環境変数やPATHなど勉強になりました。
- notnot
- ベストアンサー率47% (4900/10359)
データが異なると、圧縮率が変わるのは当然ですが、余り違わないとわかっているデータで、それだけの差が出るのは、お考えの通り、調査する価値がありますね。 全く同じデータで、比較できないのでしょうか? あと、gzip には圧縮度のオプションがありますが、tar から呼ばれるときのオプションが異なるのかもしれません。 一旦、tar cvf で tarファイルにして、gzip -9 (圧縮度最高)で圧縮してみてください。
お礼
ご回答ありがとうございました。 事象が解決しました。 MRTGデータをwgetを使って、持ってきていましたが 圧縮データとはあまり関係ないので、バージョンはそのままでいましたが wget1.7 → wget1.10.2にしましたら、圧縮データが半分以下になりました。
お礼
ご回答ありがとうございました。 事象が解決しました。 MRTGデータをwgetを使って、持ってきていましたが 圧縮データとはあまり関係ないので、バージョンはそのままでいましたが wget1.7 → wget1.10.2にしましたら、圧縮データが半分以下になりました。 事象解決の方向性を教えていただきありがとうございました。
補足
ご回答ありがとうございます。 この状況になってから、移行する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