この章では、「ファイルシステム」という言葉をふたつの違った意味で使用する。 ディスクパーティションやその他のデバイス上のファイルシステムがひとつ、 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
などに最低限度入れておくべき
内容について書かれている。もし自分で最小だが完全なシステムを構築しようと
しているなら、これはとても参考になる。