カーネルが取り扱うさまざまなファイルシステムは、カーネルとの間でやり取りが行われます。 これらのファイルシステムは仮想的なものであり、ディスクを消費するものではありません。 ファイルシステムの内容はメモリ上に保持されます。
ファイルシステムをマウントするディレクトリを以下のようにして生成します。
mkdir -v $LFS/{dev,proc,sys}
カーネルがシステムを起動する際には、いくつかのデバイスノードの存在が必要です。 特に console
と null
です。
これらのデバイスノードはハードディスク上に生成されていなければなりません。 udevd が起動し、また Linux が起動パラメーター
init=/bin/bash
によって起動されれば利用可能となります。 そこで以下のコマンドによりデバイスノードを生成します。
mknod -m 600 $LFS/dev/console c 5 1 mknod -m 666 $LFS/dev/null c 1 3
各デバイスを /dev
に設定する方法としては、/dev
ディレクトリに対して tmpfs
のような仮想ファイルシステムをマウントすることが推奨されます。
こうすることで各デバイスが検出されアクセスされる際に、その仮想ファイルシステム上にて動的にデバイスを生成する形を取ることができます。
このデバイス生成処理は一般的にはシステム起動時に Udev によって行われます。 今構築中のシステムにはまだ Udev
を導入していませんし、再起動も行っていませんので /dev
のマウントと有効化は手動で行ないます。 これはホストシステムの /dev
ディレクトリに対して、バインドマウントを行うことで実現します。 バインドマウント (bind mount)
は特殊なマウント方法の一つで、ディレクトリのミラーを生成したり、他のディレクトリへのマウントポイントを生成したりします。
以下のコマンドにより実現します。
mount -v --bind /dev $LFS/dev
残りの仮想カーネルファイルシステムを以下のようにしてマウントします。
mount -vt devpts devpts $LFS/dev/pts mount -vt proc proc $LFS/proc mount -vt sysfs sysfs $LFS/sys
ホストシステムによっては /dev/shm
が /run/shm
へのシンボリックリンクになっているものがあります。 chroot
環境内では、一時的なファイルシステムとしてマウントする際には、このシンボリックリンクを通常のディレクトリとして変更しておく必要があります。
if [ -h /dev/shm ]; then rm -f $LFS/dev/shm mkdir $LFS/dev/shm fi mount -vt tmpfs shm $LFS/dev/shm