Edited at

SquashFSをマウントするまで

More than 5 years have passed since last update.

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


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の3種類が使用できる

  • ブロックサイズは4K~1MB(デフォルトは128K)

  • ファイルシステムの最大サイズは2^64Byte

  • ファイルの最大サイズは2TiB

  • ファイル数、ディレクトリ数は無制限


導入

Linuxカーネルのバージョン2.6.29にマージされたらしいので、だいたいの環境で使えるはず(適当

以下はrasberian(3.10.25+)で確認した環境となる

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

$ cat /proc/filesystems

nodev sysfs
nodev rootfs
(省略)
nodev autofs
f2fs
nodev mqueue

無い...

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


squashfs-tools

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

# apt-get install squashfs-tools


SquashFSイメージの作成

mksquashfsコマンドを使用してファイルシステムイメージを作成します。

使用方法は以下の通りです(今回オプション等は省略)

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

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

$ 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に圧縮されました。

$ du -sh /usr/share/doc doc.sfs

78M /usr/share/doc
38M doc.sfs

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

$ 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にマウントする

# mount -t squashfs doc.sfs /mnt

mount: warning: /mnt seems to be mounted read-only.

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

$ 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の圧縮形式について書きました