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でリトルエンディアンとビッグエンディアンの両方のディスクイメージを 作れるようにして置けば十分であろう。

No comments:

Post a Comment

Dell XPS 13 (9300)を修理してもらった

2020年8月16日日曜日 15:30ころ 到着から8日目で起動しなくなってしまい、何度か電源ボタンを押していると、電源ステータスLEDが橙色が2回、白色が3回点滅するのを確認した。マニュアルによると、メモリー異常の場合であるらしい。修理窓口に電話すると、BIOSリカバリーや...