Squashfs
読み込み専用ですが、高い圧縮率で利用できるファイルシステムです。
kernelビルド
File systems --->
[*] Miscellaneous filesystems --->
<*> SquashFS 4.0 - Squashed file system support
[*] Include support for XZ compressed file systems
SquashFSを有効にしてkernelをビルドすると利用できます。
標準ではXZではなくZLIBが有効になっていますが、ZLIBだとgzip圧縮が利用できますがXZだと高圧縮率の
LZMAが利用できます。
イメージの作成
$ sudo mount rootfs.ext2 /mnt
$ sudo mksquashfs /mnt rootfs.squashfs -comp xz -b 128k
mksquashfsコマンドでファイルシステムのイメージが作成できます。
出力先ファイルが存在する場合はクリーンなイメージが作成できないようなので、存在する場合は削除してから作成する必要があります。
- compで圧縮形式が選択できますが、指定しない場合はgzipになります。xzを指定すると高圧縮ができます。
- bオプションはブロックサイズの指定ですが大きい値にしたほうが高圧縮になります。
- bオプションを指定しない場合は128kの様です。
- bオプションの範囲は4k(4096)から1m(1024k)の範囲です。
- bオプションを最低の4kにした場合でgzと同程度になり、最大の1mにした場合は3割程度容量を削減できます。
無圧縮のファイルシステムと比較して1/3程度はいけます。
bオプションは最大の1mでいいと思いますが、その場合無圧縮の1/4くらいのサイズが期待できます。
読み込み専用なので、Overlayfsなどを利用して書き換え可能にする事例が多いようですが、書き換えしたい箇所は別のパーティションを普通にマウントする方法にしたのでOverlayfsは使用しませんでした。
やり方は
init.sh を参照してください。
initramfsを使用することも考えたのですが、initramfsをxz圧縮で作成した場合とrootfsをxz圧縮のSquashfsで作成した場合でさほどストレージ消費量は変わらないと思われ、initramfsの場合はRAMを消費することになるので使わないことにしました。