カイワレの大冒険 Third

技術的なことや他愛もないことをたまに書いてます

Tuningathon2でどうしても使いたかった高圧縮ファイルシステム Squashfsのご紹介

「Tuningathon」2に参加してきた:やったことの備忘録と反省 - カイワレの大冒険 Thirdの記事にあるように、昨年Tuningathonに出たんですが、そのときに使おうとして出番なくて使えなかったやつがあるので、せっかくだし紹介します。

Squashfsとは

Squashfsってのは読み込み専用の圧縮ファイルシステムで、readに特化したものを保存するのに向いたファイルシステムのことでございます。

ログとか、カーネルイメージとかね。inode含め色々圧縮してくれて、データ量削減の一手を担ってるとのことで、でかファイル対応のために使いたかったのですが、出番なかったという…

動かしてみた

まず入れてみる。

$ sudo yum install squashfs-tools

シンプルすぎる。 次に圧縮かけたいディレクトリをターゲットに定める。
元の容量はこれぐらい。何が入ってたかは忘れたェ…
多分Mongoのなんか。多分多分。

$ du -sh db/
3.3G    db/

いざ実行。

$ mksquashfs /data /tmp/data-squash -noappend

Creating little endian 3.0 filesystem on /tmp/data-squash, block size 65536.

Little endian filesystem, data block size 65536, compressed data, compressed metadata, compressed fragments
Filesystem size 205650.94 Kbytes (200.83 Mbytes)
        5.98% of uncompressed filesystem size (3439827.66 Kbytes)
Inode table size 47442 bytes (46.33 Kbytes)
        21.96% of uncompressed inode table size (216038 bytes)
Directory table size 361 bytes (0.35 Kbytes)
        62.13% of uncompressed directory table size (581 bytes)
Number of duplicate files found 1
Number of inodes 32
Number of files 28
Number of fragments 0
Number of symbolic links  0
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 4
Number of uids 1
        root (0)
Number of gids 0

このような処理が冷静貫徹に行われます。我々は眺めるだけです。
実行後はこれぐらい。

$ du -sh /tmp/data-squash
202M    /tmp/data-squash

まぁ、圧縮するものにも因るでしょうが、小さくなったじゃないでしょうか。
あとは、使用準備。ループバックデバイスとして使うようです。

$ mkdir -p /mnt/squash
$ mount -t squashfs -o ro,loop,noatime /tmp/data-squash /mnt/squash
$ df -h -T
Filesystem    Type  サイズ  使用  残り 使用% マウント位置
/dev/sda3     ext3     69G   47G   18G  73% /
/dev/sda1     ext3     99M   22M   72M  24% /boot
tmpfs        tmpfs   1010M     0 1010M   0% /dev/shm
/tmp/data-squash
          squashfs    201M  201M     0 100% /mnt/squash


ここまで来たら、ファイルを読み込んでみましょう。

終わりに

Tuningathonでそろそろ巨大ファイル来て、I/O死ぬんじゃねと思って対策したのですが、どうも出番はなかったようです。

とそんな過去は置きつつ、分散環境が難しくて、ログとかで容量辛い時などは使ってもいいかなーと個人的には思った次第。

こんな使い方すればよいんじゃねってご意見・ご指摘等あれば、是非@masudaKまで!