SquashFSをマウントするまで

簡単な概要からマウントするまでを説明します。

##SquashFSとは
>SquashFS (.sfs) は Linux 向けの 圧縮された読み込み専用ファイルシステムである。SquashFS はファイル、inode とディレクトリを圧縮し、高圧縮のためブロックサイズを1024KBまでサポートする。SquashFS は SquashFS ファイルシステムにアクセスするための（GPLでライセンスされた）フリーソフトウェアでもある。
SquashFS は一般的な読み込み専用ファイルシステムの使用や低いオーバーヘッドが必要な（組み込みシステムのような）制限されたブロックデバイス/メモリシステム内を対象としている

引用元：SquashFS(http://ja.wikipedia.org/wiki/SquashFS)

要するに、組み込みLinuxやLiveCDにおいて、容量使用量減少や読み込み速度向上を目的として、
読み込み専用のデータやアプリケーションを圧縮したファイルシステムとして利用しよう、というものです。
##squashfsの特徴
https://www.kernel.org/doc/Documentation/filesystems/squashfs.txt より抜粋

* リードオンリー（読み取り専用）のファイルシステム
* 圧縮方法はzlib(標準)/lzo/xzの３種類が使用できる
* ブロックサイズは4K~1MB(デフォルトは128K)
* ファイルシステムの最大サイズは2^64Byte
* ファイルの最大サイズは2TiB
* ファイル数、ディレクトリ数は無制限

##導入
Linuxカーネルのバージョン2.6.29にマージされたらしいので、だいたいの環境で使えるはず（適当
以下はrasberian(3.10.25+)で確認した環境となる

カーネルサポートがsquashfsをサポートしているかを確認する。

```shell-session
$ cat /proc/filesystems
nodev	sysfs
nodev	rootfs
(省略)
nodev	autofs
	f2fs
nodev	mqueue
```

__無い...__

と思ったが、どうやらカーネルコンフィグやらを確認するとカーネルモジュールで提供されているようなので、気にせず進める。

###squashfs-tools
squashfsイメージの作成などに必要なsquashfs-toolsをインストールする

```console
# apt-get install squashfs-tools
```

###SquashFSイメージの作成
mksquashfsコマンドを使用してファイルシステムイメージを作成します。
使用方法は以下の通りです(今回オプション等は省略）

```console
mksquashfs [圧縮対象ファイル] ...  [squshfsイメージ名]
```

今回は/usr/share/docをSquashFSイメージにします(/usr丸ごとは時間がかかったので)

```shell-session
$ mksquashfs /usr/share/doc doc.sfs
Parallel mksquashfs: Using 1 processor
Creating 4.0 filesystem on doc.sfs, block size 131072.
[=============================================================\] 6534/6534 100%
Exportable Squashfs 4.0 filesystem, gzip compressed, data block size 131072
	compressed data, compressed metadata, compressed fragments, compressed xattrs
	duplicates are removed
Filesystem size 38181.01 Kbytes (37.29 Mbytes)
	63.31% of uncompressed filesystem size (60311.59 Kbytes)
Inode table size 83073 bytes (81.13 Kbytes)
	33.04% of uncompressed inode table size (251454 bytes)
Directory table size 76747 bytes (74.95 Kbytes)
	33.55% of uncompressed directory table size (228740 bytes)
Number of duplicate files found 44
Number of inodes 7366
Number of files 6424
Number of fragments 386
Number of symbolic links  68
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 874
Number of ids (unique uids + gids) 3
Number of uids 3
	root (0)
	unknown (2625)
	pi (1000)
Number of gids 3
	root (0)
	unknown (2625)
	pi (1000)
```

容量を確認すると78MBから38MBに圧縮されました。

```shell-session
$ du -sh /usr/share/doc doc.sfs
78M	/usr/share/doc
38M	doc.sfs
```

作成したイメージファイルの中身を取り出す場合はunsquashfsコマンドを使用する。

```shell-session
$ unsquashfs doc.sfs
Parallel unsquashfs: Using 1 processor
7426 inodes (6602 blocks) to write

[=============================================================-] 6602/6602 100%
created 6424 files
created 874 directories
created 68 symlinks
created 0 devices
created 0 fifos
```

###マウント
先ほど作成したイメージを/mntにマウントする

```shell-session
# mount -t squashfs doc.sfs /mnt
mount: warning: /mnt seems to be mounted read-only.
```

リードオンリーなファイルシステムがマウントされたことが確認できました。

```shell-session
$ mount
(省略)
/home/pi/doc.sfs on /mnt type squashfs (ro,relatime)
$ df /mnt
Filesystem     1K-blocks  Used Available Use% Mounted on
/dev/loop0         38272 38272         0 100% /mnt
```

以上
- - -

[SquashFSの圧縮形式について書きました](http://qiita.com/stc1988/items/5a2eb4ba9335840c8fe0)