Squashfsでどの程度サイズが減るのか確認してみた
Orange pi R1用OSをSPIフラッシュにのせるために16MB未満への容量削減を考えてるが、
一般的な圧縮ファイルシステムは読み込み専用な模様。
読み込み専用のファイルシステムを/に使うなら書き込み可能なファイルシステムを重ねる必要がある。
というわけで、いくつか選択肢はあるようだがカーネルにoverlayfsという重ねるFSはあり、圧縮の方はSquashfsというのがよく使われるぽい。
まず、Squashfsで圧縮した場合、目的が達成できそうか確認のために、Buildrootで作ったext4のrootfsをSquashfsにしてみた。
kernelとかは別なんでこれでは16MBをオーバーしちゃう。
mksquashfs は ソースディレクトリと出力イメージファイルを引数にすればgz圧縮してくれるみたい。
他の圧縮タイプも選べる感じ。
一般的な圧縮ファイルシステムは読み込み専用な模様。
読み込み専用のファイルシステムを/に使うなら書き込み可能なファイルシステムを重ねる必要がある。
というわけで、いくつか選択肢はあるようだがカーネルにoverlayfsという重ねるFSはあり、圧縮の方はSquashfsというのがよく使われるぽい。
まず、Squashfsで圧縮した場合、目的が達成できそうか確認のために、Buildrootで作ったext4のrootfsをSquashfsにしてみた。
$ df
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
.
.
.
/dev/sdg2 55397 13211 37886 26% /home/user/stock/sbc/opi-r1/mnt
ext4のSDカードをマウントしたが13MB強。ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
.
.
.
/dev/sdg2 55397 13211 37886 26% /home/user/stock/sbc/opi-r1/mnt
kernelとかは別なんでこれでは16MBをオーバーしちゃう。
$ sudo mksquashfs mnt squashfs.img
$ sudo umount mnt
$ sudo mount squashfs.img mnt
$ df
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
.
.
.
/dev/loop0 4864 4864 0 100% /home/user/stock/sbc/opi-r1/mnt
4.8MBまで減った!$ sudo umount mnt
$ sudo mount squashfs.img mnt
$ df
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
.
.
.
/dev/loop0 4864 4864 0 100% /home/user/stock/sbc/opi-r1/mnt
mksquashfs は ソースディレクトリと出力イメージファイルを引数にすればgz圧縮してくれるみたい。
他の圧縮タイプも選べる感じ。
この方法で目的達成できそう。
だが、Squashfsはカーネルに組み込めなそうなんで、Squashfsをmountするためにinitramfsかinitrdが必要そう。
中にはSquashfsをmountするためのモジュール、initスクリプトを実行するためのシェル本体とスクリプト。
容量がもったいない気もするが、initrdなら再利用できそうだけどinitramfsは圧縮できることを考えるとinitramfsでいいのかな?
kernelをoverlayfs対応させるためにもう一回作り直す必要があるので、
Buildrootはもう一回やり直してlinux 5.4.11で作り直そうと思う。
だが、Squashfsはカーネルに組み込めなそうなんで、Squashfsをmountするためにinitramfsかinitrdが必要そう。
中にはSquashfsをmountするためのモジュール、initスクリプトを実行するためのシェル本体とスクリプト。
容量がもったいない気もするが、initrdなら再利用できそうだけどinitramfsは圧縮できることを考えるとinitramfsでいいのかな?
kernelをoverlayfs対応させるためにもう一回作り直す必要があるので、
Buildrootはもう一回やり直してlinux 5.4.11で作り直そうと思う。