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まで!