2002/08/10 改訂
1998/08/08
ここでは Plan9 の DOS ファイルの扱いを解説する。話を簡単にするために話題をフロッピーディスクに限定する。
ls /dev
を実行すると
fd0ctl
fd0disk
が見えるであろう。
fd0disk
はドライブ A のフロッピーディスクであり Plan9 では通常のファイルと同一の扱いを受けている。(fd0ctl
はコントロールの口である。解説は省略する。)
物理フォーマットは
disk/format /dev/fd0disk
で行う。DOSの FAT を入れたい場合には
disk/format -d /dev/fd0disk
を実行すればよい。
またフロッピーディスクの内容をまるごとファイルにコピーしたい場合には
cp /dev/fd0disk foo
を実行すればファイル foo にコピーされる。
UNIX の様に文字型デバイス /dev/rfd0
と、ブロック型デバイス /dev/fd0
の区別が無い事に注意する。従ってフォーマットの場合とマウントの場合にどちらの型のデバイスを指定するのか迷う事はない。
/srv/dos
dossrv は ファイルを DOS ファイルシステムとして解釈してくれるサービスプログラムである。dossrv が実行されていると /srv/dos
が見える。(dossrv の実行時オプションによっては dos
ではなく他の名前になっているかも知れない。)
/srv/dos
は dossrv に要求を伝え、結果を聞き取るパイプの口である。そしてこのままではファイルシステムの体裁をとっていない。
dossrv に対象となるファイル(デバイス) を知らせ、Plan9 のファイルシステムの一部として見せかけるのは mount コマンドの役目である。
mount /srv/dos /n/fd0 /dev/fd0disk
を実行すれば、/dev/fd0disk
が DOS ファイルシステムと解釈されて、それが /n/fd0
以下に見える事になる。( ディレクトリ /n/fd0
は前もって作っておく必要がある。)
実際の Plan9 の操作に於ては DOS ファイルシステムを扱うのにユーザが直接 mount コマンドを扱う必要はない。以下の3つのコマンド
a:
b:
c:
が初めから備わっており、これらのコマンドによって各々
/n/a:
/n/b:
/n/c:
にマウントされる(注)。
/n/a
, /n/b
, /n/c
からも参照できる。Plan9 では mount コマンドの対象はディレクトリ /srv
内のファイルである。
そしてマウントとサービスが明確に分離されている。
(読者は FreeBSD などの mount_msdos コマンドと比較すればよい。)
UNIX では mount の実行には root 特権が必要であった。
Plan9 ではサービスの実行は、(それがデバイスを対象としている場合には、)デバイスの所有者のみが許可される。他方 mount は誰にも実行が許される(注)。 そして mount の効果は mount を実行したユーザの範囲に留まる。
Plan9 の mount の役割はとても柔軟であり、デバイスだけではなく普通のファイルをもマウントしてくれる。ファイル foo
を DOS フロッピーディスクのイメージとせよ。その下で、
mount /srv/dos /n/fd0 foo
を実行すれば /n/fd0
以下には foo
の内容が DOS のフロッピーディスクと同じ様に現われる。従って foo
の内容を知る事ができるばかりか編集さえも可能なのである。Plan9 の通常のコマンドやツールを使って。我々はフロッピーディスクを保管する必要は無くなった!