cramfsの話

NetBSDでのファイルシステムの扱いについて理解したいと考えているのだが、 いろいろなことが分からなくて、先に進まない。 そこで、既存の簡単なファイルシステムのサポートをNetBSDに追加してみることで 学習したいと考えている。

Linuxで最も簡単なファイルシステムは、cramfs (Compressed ROM file system) と言うものであるように見える。 なんで、Compressed ROM file systsmがcramfs と略されるのかというのは疑問ではあるが…。

とりあえず、既存のリトルエンディアンなcramfsのディスクイメージを 手元で作れるようにした。単にSUSE 13.1のutil-linux-2.23.2-34.1.x86_64.rpmを 展開し、NetBSD/amd64のcompat_linuxで動かしただけである。

ドキュメントがgnu-gpl-v2なソースコードを見ろとだけ書いてあって 困っているのだが、基本的には生成されたディスクイメージを見て、 パースするプログラムを書いている。 NetBSDカーネルでサポートする際にも、このコードは役立つものと考えている。

今のところ、ユーザーランドのプログラムであるパーザーでは、 Super blockとinodeをパースできるようにはなった。 後はzlib deflateで圧縮されたファイル本体のデータの取り扱いが できるようになれば良い。

今、イメージできないのは、zlibで圧縮されたデータをいつ展開するか と言う問題である。 例えば、これにはディスクイメージのマウント時に全てをRAMに展開しておく 方法と、個々のファイルにアクセスした際に展開する方法があると思う。 ユーザーランドのパーザーとしては、mmap(3)でイメージファイルを RAMのある範囲に割り当ててパースしてやれば良いのだが、 そもそもこう言う場合のNetBSDカーネルの流儀と言うのが分からない。

コマンドラインのユーティリティープログラムとしては、mount_cramfsと makefsでリトルエンディアンとビッグエンディアンの両方のディスクイメージを 作れるようにして置けば十分であろう。

コメント

このブログの人気の投稿

#5000へCメールを送れないau端末でezweb.ne.jpの電子メールアドレスをIMAP4/SMTPで扱う方法

Vaio Pro 11/13用のサードパーティーのACアダプター

Windows 7 Professional用のNFSクライアントを使う (NFS 4.1のみ)