
圧縮後のファイルサイズ 予測
こんにちは。運用チームのMBです。
掲題の件、どうしても知りたい時があり教わったやり方に感銘をうけたため記事にしてみます。
ログ等の一般的なテキストファイルを想定しています。
結論
サンプル圧縮(試しにやってみる)
実行例
約10GBのテストファイルを作成(実際は対象ファイルが既にあるので不要)
[root@mb-test ~]# dd if=/dev/zero of=/tmp/testfile bs=100M count=100
100+0 レコード入力
100+0 レコード出力
10485760000 bytes (10 GB, 9.8 GiB) copied, 99.6655 s, 105 MB/s
[root@mb-test ~]# ll -h /tmp/testfile
-rw-r–r– 1 root root 9.8G 8月 15 07:26 /tmp/testfile
サンプル圧縮(対象ファイルの先頭1GBを標準出力内で圧縮した場合のサイズを確認)
[root@mb-test ~]# head -c 1073741824 /tmp/testfile | gzip | wc -c
1042069
≒1MB
1GBで1MBなので・・
約10GBのこのファイル全体を圧縮したら恐らく10MB位にはるはず・・!
この時に凄いと思ったのが、ファイルを作成していないのでディスクを消費していない点です。
やってみましょう
[root@mb-test ~]# gzip -k /tmp/testfile
[root@mb-test ~]#
結果は・・
[root@mb-test ~]# ll -h /tmp/testfile*
-rw-r–r– 1 root root 9.8G 8月 15 07:26 /tmp/testfile
-rw-r–r– 1 root root 9.8M 8月 15 07:26 /tmp/testfile.gz
ビンゴ
おわりに
いかがでしたでしょうか。
テスト用に作成した単調なファイルでしたので、そのままズバリすぎましたね。
また今回は /dev/zero から作成した、非常に圧縮しやすい特殊なデータですので、
そのため、一般的なログファイルの圧縮率を再現するテストではなく、
あくまで予測方法の動作確認としてご覧いただけたらと思います。
「テキストファイルならこれくらい圧縮されるだろう」といった一般的な圧縮率から計算すると、
実際の値との乖離が大きくなる場合があります。そこで、実データの一部を実際に圧縮し、
その結果から全体のサイズを予測する方法をご紹介させていただきました。
それでは、本日はこの辺で失礼いたします。





