ルートディレクトリのinode番号

AsiaBSDCon 2007のレポート記事「McKusick氏、FreeBSDを語る」に次のような小話が出てくる.

cd /; ls -ialのようにしてinode番号をチェックするとわかるが、番号は1番からではなく2番からはじまっている。これは0が未使用に使われ、1はバッドブロックを表現するために使われてきたからだ。しかし現在ではバッドブロックはディスクデバイスの方で管理しているので1は使われていない。このため1からはじまりそうなinode番号も、こうした歴史的経緯のために2からはじまっているということである。

これはFFSの話だが,FFSから大きな影響を受けたと思われるLinux ext2系のinode番号も上記の記述通りの実装だ.ext2が出たころにはすでにディスクコントローラがバッドブロックを管理していたと思うけど,FFSを踏襲(コピペ)しているように見えるのはなぜだろうか.grepしてみてもバッドブロック(EXT2_BAD_INO)を参照している感じはしない.ちなみに,procfsやsysfsはバッドブロックなんてありえないので,ルートディレクトリのinode番号は1になっている.つまりinode番号をどう使うかはファイルシステム依存の話だということ.

一方,時代をさかのぼってUNIX v7の時代はどうかと,Lions' Commentary on UNIXを眺めてみたら,0が未使用,1がルートディレクトリとなっていた.1をバッドブロックに割り当てたのはBSD (FFS)が起源なのだろうか?

では,我らがPlan9のファイルサーバ(fs,fs64)はどうなっているかというと.その前にPlan9の場合はinodeではなく,qidと呼ばれるので注意(参照 プロセスグループ).*1

結果は,予想通りだったのだが,UNIX v7と同じく,qid番号1がルートディレクトリを示していた.ベル研のUNIXを本家と考えると,ここでも「UNIXよりUNIXらしいPlan9」と言えるのだろうか.かなり強引な結論.

(追記:20101211)「v7ではルートディレクトリのinode番号は1」というのは嘘でv7から2になったようだ。simhなどを使っているなら、「ls -id /」で確認できる。

Lions’ Commentary on UNIX (Ascii books)

Lions’ Commentary on UNIX (Ascii books)

*1:ちなみにlsもqid番号を表示するときは,ls -iではなく,ls -qになる.