この章では、「ファイルシステム」という言葉をふたつの違った意味で使用する。 ディスクパーティションやその他のデバイス上のファイルシステムがひとつ、 Linux システムを走らせることで提示されるファイルシステムがひとつである。 Linux では、ディスクのファイルシステムをシステムのファイルシステム上に マウント(mount)している。
前章では、init スクリプトがファイルシステムをチェックしてマウントす
ると述べた。これを実行するコマンドは、それぞれ fsck と
mount である。
ハードディスクは 1 と 0 を書き込める巨大な空間にすぎない。ファイルシステム
がそれにかたち(structure)を与え、ディレクトリ構造をもったファイル群に見えるよ
うにしている。個々のファイルは、i-node によって表わされる。i-node は、誰の
ファイルか、いつ作られたのか、ファイルの中身はどこにあるのかといった情報を伝
える。
ディレクトリも i-node で表現されているが、その i-node は、当該ディレクトリに
あるファイルの i-node がどこにあるかという情報しか伝えない。システムが /home/greg/bigboobs.jpg というファイルを読み込もうとすると、まず最初に
ルートディレクトリである / の i-node を「スーパーブロック(super
block)」から探しだす。次にディレクトリ home の i-node を /
の内容のなかから探す。そして、ディレクトリ greg を /home の
内容から見つけだして、さらに bigboobs.jpg の i-node を見つける。そう
して、その i-node がシステムにどのディスクブロックを読めばいいかを教えるわけ
である。
ファイルの末尾にデータを付け加えた場合、新しいブロックがそのファイルの一部で
あると伝達できる状態にするため、i-node の更新がなされる。しかし、その更新がな
される前に、データが書き込まれてしまうことがあるし、その逆もある。もしその時
点で電源が落ちると、ファイルシステムは整合性を失う。fsck が検出し補
修しようとするのは、この種の事柄である。
マウントコマンドはデバイス上のファイルシステムを把握し、システムを利用する時
に目にするようなファイルの階層構造(hierarchy)にそれを付け加える。カーネルは、
通常ルートファイルシステムを読み込み専用(read-only)でマウントする。マウントコ
マンドは、fsck の検査で問題のないことが分かってからそれを読み書き兼
用(read-write)でマウントし直す。
Linux は他の種類のファイルシステムもサポートしている。msdos,
vfat,minix などである。
具体的なファイルシステム間での区々の相違は、仮想ファイルシステム(VFS)に
よって抽象化される。ここではその詳細については触れない。それについての解説は
"The Linux Kernel" の文中にある。(
Linux カーネル
の章に URL があるのでそこで見てほしい。)
さらに、/proc には完全に種類の異なるファイルシステムがマウントされて
いる。これは、カーネル内の状況を忠実に表すものである。そこには、システム上の
プロセスごとにディレクトリがあり、ディレクトリ名としてプロセス番号が付けられ
ている。また、/proc には interrupts や meminfo と
いったファイルもあり、そこにはハードウェアの利用情報が書かれている。/proc を詳しく調べれば、多くを学ぶことができる。
ext2 ファイルシステムを作る mke2fs というコマンドには複数のパラメー
タがある。それを使えば、ブロックのサイズや i-node の数などを設定できる。
詳細は、mke2fs のマニュアルページを調べてほしい。
ファイルシステム上のどこに何がマウントされるかは、/etc/fstab で
管理されている。このファイルのマニュアルページもある。
非常に小さなファイルシステムを作って、hex ビューワで見てみること。 i-node や スーパーブロック、ファイルの中身がどれなのか見分けること。
ファイルシステムをグラフィカルに見ることができるツールがあるはずだと思う。 それを見つけて試してみたら、その URL と使った感想をわたしにメールで教えて ほしい。(訳注: xcruise というのがあります。)
カーネルの ext2 ファイルシステムのコードをチェックすること。
mount コマンドは util-linux パッケージの一部であり、これに
関するリンクが
Building a Minimal Linux System from Source Code (
日本語訳)からたどれる。
mount, fstab, fsck, mke2fs および、
proc。
Documentation/proc.txt ファイル
(
日本語訳)に、/proc ファイルシステムについての説明がある。
上記では、Unix のファイルシステムで何が起こっていて、なぜそうなのかが述べられ
ている。また、/bin, /sbin などに最低限度入れておくべき
内容について書かれている。もし自分で最小だが完全なシステムを構築しようと
しているなら、これはとても参考になる。