では、ルートファイルシステムをtmpfsでマウントした場合のシステム構成を考えていこう。
tmpfsでRAMディスクをマウントしたばかりの状態では、当然中身は何もないことになる。肝心のシステムはCDやDVDという別ドライブに存在しているのだから、それを利用してなんとかルートファイルシステムを構築していくことになる。
一番簡単なのは、CD上にある全てのファイルをルートのRAMディスクにコピーしてしまうことだ。これで、動作するLinuxシステムがRAMディスク上に構築されることになる。
だが、tmpfsはRAMディスクなので当然メモリを消費する。数十MBならともかく、システムまるごとではPS3のメモリを消費しつくしてしまうだろう。
次に考えられるのは、CDをどこかにマウントしておいて、ルートにそこへのシンボリックリンクを張ることである。
これなら実体はCDの中だし、RAMディスクに作成するのもシンボリックリンクだけなのでほとんどメモリを消費しないですむ。
少々分かりにくいので実際にマウントした場合の例を次の図で示す。
図の中でsquashFSという単語があるが、これはリードオンリーの圧縮ファイルシステムのことである。CD上に/bin
や/usr
といったディレクトリや沢山のファイルを作成しなくてよいし、圧縮でそこそこ小さくなるためCDブートLinuxではよく使われている。初期のKNOPPIXではcloopという圧縮ファイルシステムが使われていたが、最近はsquashFSが主流となっている。
tmpfsでマウントされたルートに/cdrom
というディレクトリを作成し、そこに実際のCD-ROMをマウントしている。
CD-ROMの中にはCLOVERというファイルが存在しており、これを/clover
というディレクトリを作成してそこへsquashFSでループマウントしてやると、目的となるシステムが見えるという仕掛けだ。
後は/bin
、/lib
といった必要なディレクトリをルートに、/clover/bin
へのシンボリックリンクとして作成していく。
これで、見かけ上正常なルートが作成でき、しかも大部分がCD-ROM上に存在するためメモリはほとんど消費していないことになる。
ちなみに「ライブCD」と呼ばれる多くのCDブートLinuxは、多少の差はあれ、大体このような構成を採用している。
今回の構成もKNOPPIXを大いに参考にしたところがある。
後は、このルート作成の手順をinitrd内に作成することでCDブートシステムはほとんどの完成をみることとなる。
ここまでたどり着いてしまえば、後はどういったシステムをCDに焼き込むかといったことだけである。先の図の例でいうとsquashFSの中身を作り込む部分であり、これはまた次の作業ターンとなる。