Plan9日記

2006-03-06 なんでもファイルサーバ

ftpfs

FTPクライアントを考えてみよう.UNIXの場合は独立したアプリケーションであり,コマンドラインインタプリタやコマンドはアプリケーションとして作りこむ必要がある.一方,Plan9は,リソースをファイルとして名前空間マッピングするファイルサーバとして作るのが作法だ.このようにネットワーク透過にリソースを扱うことで,FTPサーバ上のリソースに対しても,grepシェルスクリプトを使うことができる.

cpu% ftpfs ftp.ring.gr.jp
220 ring.ip-kyoto.ad.jp FTP server (Version wu-2.6.2(1) Sun Aug 1 15:32:09 JST 2004) ready.
User[default = hoge]: anonymous
331 Guest login ok, send your complete e-mail address as password.
Password: 
230-
230-         ##################################################
230-         #     Welcome to the RingServer FTP service.     #
230-         ##################################################
230-
230- Localtime [Mon Mar  6 22:52:20 2006 JST+0900]
230- Current [26] users / Max [100] users
230-
230-
230 Guest login ok, access restrictions apply.
215 UNIX Type: L8 Version: BSD-199506
257 "/" is current directory.

これで,/n/ftp/ring以下にFTPサーバが見えるようになった.このように名前空間を枝接ぎすることを,Plan9ではbindと呼ぶ.bindがUNIXのmountと違うのは,名前空間プロセス毎に異なる点だ.つまり,(rioを使っているなら)あるウィンドウのプロセスには/n/ftp/ringが見えているが,別ウインドウプロセスには/n/ftp/ringが見えないのだ.

bindを解除するときは,ftpfsをkillすればよい.

cpu% kill ftpfs | rc

webfs,wikifs

ftpfsの他にもwebfsやwikifsなんてのもある.

9Pプロトコル

UNIXではファイルサーバ(ファイルシステム)は,カーネル内に作るのが普通である.最近は,FUSEやv9fsのような,ユーザ空間ファイルシステムがあるけど.一方,Plan9のファイルサーバはユーザ空間に実装され,9Pプロトコルで通信する.つまり,ファイルサーバはファイル名とリソースの対応を管理する.そして,アプリケーションがシステムコールを発行すると,カーネル内で9Pのメッセージに変換されて,ファイルサーバに通知される.

9Pは,認証がしっかりしたNFSプロトコルのようなイメージかな.