loopデバイスが足りない

PCで大量の情報をダウンロードして、SquashFScramfsで固めてZaurusSL-C3000)で持ち歩く、こんなことを繰り返すと、いつの間にか多数のイメージファイルが溜まってしまう。
斯く言う自分も以下のイメージファイルを持ち歩いている。

内容 ファイル名 FSタイプ
ワークドライブ ext2-1.img ext2
開発環境 dev_img-1.3-2 cramfs
Python 2.4 python24.sqfs squashfs
PHPマニュアル 2009-03-20 php_manual_ja.sqhs squashfs
GM_Lite地図データ gm_lite.sqfs squashfs


ところが、OS起動時に作成されるloopデバイスは2つしかないため、/etc/fstabに登録して起動時にマウントできるのは数が限られている。
そこで、rcスクリプトの仕組みを使ってOS起動時にイメージファイルのマウントを実行するシェルスクリプトを作成し、これをパッケージ化した。

download:boot-mntloop_0.1-1_arm.ipk

パッケージによってインストールされる/etc/rc.d/init.d/mntloopがシェルスクリプトである。
マウント処理は/etc/fstabの「#|」で始まるレコードしたがって実行される。
行頭の「#|」の2文字以降に続く各フィールドの形式は、以下の例のように通常の/etc/fstabと同じである。

# 次の行はOS起動時にマウントされる
/dev/hda2  /hdd2  ext3  rw,noatime  0  2
# 次の行は単なるコメントアウト
#/dev/hdb1  /hdd4  ext3  rw,noatime  0  2
# 次の行はmntloopによってマウントされる
#|/hdd3/dev_img-1.3-2  /mnt/dev  cramfs  loop,ro,noatime  0  0
# 次の行はmntloopによってFSのチェックとマウント
#|/hdd3/ext2-1.img  /mnt/usr  ext2  loop,rw,noatime  0  2


mntloopには以下の4通りの使用方法がある。

  • mntloop start
    /etc/fstabに「#|」で始まる全てのレコードに従ってマウント処理を実行する。
    ただし、4番目のフィールドにnoautoが設定されていると処理をスキップする。
    OS起動時にはこの方法で実行される。
  • mntloop stop
    /etc/fstabに「#|」で始まる全てのレコードに従ってアンマウント処理を実行する。
    ただし、4番目のフィールドにnoautoが設定されていると処理をスキップする。
    OS停止時にはこの方法で実行される。
  • mntloop mount
    指定されたtargetを/etc/fstabの「#|」で始まるレコードの1番目と2番目のフィールドから検索し、一致したレコードに従ってマウント処理を実行する。
  • mntloop umount
    指定されたtargetを/etc/fstabの「#|」で始まるレコードの1番目と2番目のフィールドから検索し、一致したレコードに従ってアンマウント処理を実行する。


ついでにfsckシェルスクリプトも修正した。

download:boot-fsck_0.2-1_arm.ipk