nfsd(7)

名前
nfsd - Linux NFS を制御する特殊ファイルシステム

書式
mount -t nfsd nfsd /proc/fs/nfsd

説明
nfsd ファイルシステムは Linux NFS サーバーへのアクセスを提供する 特殊ファイルシステムである。 このファイルシステムは複数個のファイルを含む 1 つのディレクトリで構成される。 これらのファイルが実際には NFS サーバーへのゲートウェイになる。 これらのファイルに書き込むことにより、サーバーに影響を及ぼすことができる。 これらのファイルを読み出すことにより、サーバーの情報が提供される。

このファイルシステムは Linux 2.6 以降 (と開発版である 2.5 系の後期から 2.6 まで) のカーネルでのみ利用可能である。 この man ページは 2.4 以前には適用されない。

このファイルシステムだけではなく、 procfs ファイルシステム (通常は /proc にマウントされている) にも NFS サーバーを制御するためのファイル群がある。 この man ページは、これら全てのファイルについて記述している。

exportfs と mountd プログラム (nfs-utils パッケージの一部) は、このファイルシステムが /proc/fs/nfsd または /proc/fs/nfs にマウントされていることを想定している。 マウントされていない場合、これらのプログラムは 2.4 系の機能に戻る。 2.4 系の機能には、システムコール経由で NFS サーバーにアクセスすることが含まれる。 このシステムコールは 2.6 カーネルより後の系列では削除される予定である。

詳細
nfsd ファイルシステムに含まれる 3 つのファイルは、以下の通りである:

exports
    このファイルには、現在エクスポートされているファイルシステムと 各ファイルシステムがエクスポートされている先のクライアントの一覧が、 クライアントとファイルシステムのペア毎のエクスポートオプションの リストと共に含まれている。 これは 2.4 における /proc/fs/nfs/exports ファイルと似ている。 1 つの違いは、1 つのクライアントが 1 つのホストと対応する 必要がないという点である。 これにより同一に扱うべき多くのホストに対して応答できる。

    ファイルの各行には、パス名・クライアント名・ 括弧で括られたオプションが含まれる。 パス名またはクライアント名に含まれる スペース・タブ・改行・バックスラッシュ文字は、 バックスラッシュとそれらの文字の 8 進数 ASCII コードに置き換えられる。

threads
    このファイルは現在実行されている nfsd スレッドの数を表している。 このファイルを読み出すとスレッド数が表示される。 ASCII の 10 進数を書き込むと、その数になるようにスレッド数が変更される (必要に応じて増加または減少させる)。

filehandle
    これは多少変わったファイルで、ファイルから読み出されるものは、 ファイルに書き込まれるものに依存している。 このファイルはトランザクションのインタフェースを提供する。 プログラムはこのインタフェースでファイルのオープン・ リクエストの書き込み・レスポンスの読み出しができる。 2 つの別々のプログラムがオープン・書き込み・読み出しを同時に行った場合でも、 リクエスト同士は混同されない。

    filehandle に書き込まれるリクエストは、クライアント名・パス名・バイト数である。 その後には、改行・空白で区切ったフィールド・ 特殊文字を 8 進数表記したものが続く。

    このファイルに書き込むことにより、プログラムは 指定されたクライアントにエクスポートされるパスに対する ファイルハンドルを読み返すことができる。 ファイルハンドルの長さは、指定されたバイト数以下にされる。

    ファイルハンドルは先頭に '\x' を付けた 16 進数で表現される。

procfs ファイルシステム上のディレクトリ /proc/net/rpc には、いくつかのファイルとディレクトリが含まれる。 ファイルには nfsstat プログラムを使って表示できる統計情報が含まれる。 ディレクトリには NFS サーバが管理するいろいろなキャッシュが含まれる。 これらのキャッシュは、各クライアントがファイルシステム毎に持つ アクセス許可を把握するためのものである。 キャッシュは以下の通り:

auth.domain
    このキャッシュはクライアント (またはドメイン) の名前を 内部データ構造にマップする。 利用可能なアクセスは、キャッシュの書き出し (flush) のみである。

auth.unix.ip
    このキャッシュは IP アドレスから認証されたドメインへのマップを保持する。 認証されたドメインでは、この IP アドレスがドメインの一部として扱われる。

nfsd.export
    このキャッシュはディレクトリとドメインから エクスポートオプションへのマッピングを保持する。

nfsd.fh
    このキャッシュはドメインとファイルシステム識別子から ディレクトリへのマッピングを保持する。 ファイルシステム識別子はファイルハンドルに格納され、 識別子のタイプを表す数値と 識別子の内容を表す 16 進数のバイトの数値で構成される。

キャッシュを表す各ディレクトリは 1 〜 3 個のファイルを保持できる。 ファイルは以下の通り:

flush
    紀元 (epoch, 1970 年 1 月 1 日) からの秒数がこのファイルに書き込まれると、 その時刻より前に更新されたキャッシュ内の全てのエントリが無効化され、 そのエントリはフラッシュされる (書き出される)。 1 を書き込むと全てのエントリが書き出される。 このファイルだけが常に存在するだろう。

content
    このファイルが存在する場合、キャッシュ内の全てのエントリの文字列表現が 1 行に 1 個ずつ含まれる。 エントリがまだキャッシュ内にあり (アクティブで使用中であり)、 かつ期限切れの場合、またはそれ以外でエントリが無効である場合、 そのエントリは (先頭にハッシュ記号を付けた) コメントとして表される。

channel
    このファイルが存在する場合、カーネルベースの NFS サーバーからのリクエストを、 ユーザー空間のプログラムが扱うための受け渡しをするチャンネルとして働く。

    カーネルがキャッシュにない情報を必要とする場合、 情報のキーとなる 1 行を channel ファイルに書き込む。 ユーザー空間プログラムは、これを読み込み、答えを見つけ、 キー・満了時刻・内容を含む行を書き込まなければならない。

    たとえば、カーネルが
    nfsd 127.0.0.1
    を auth.unix.ip/content ファイルに書き込んだ場合、ユーザー空間プログラムは
    nfsd 127.0.0.1 1057206953 localhost
    を書き込んで、少なくとも今のところは 127.0.0.1 を localhost にマップすべきであることを示す。

    プログラムが select(2) または poll(2) を使って channel から読み込めるかを確かめたときに、 ファイルの終わり (end-of-file) は見つからないが、 全てのリクエストに答え終わっているという場合には、 プログラムは他のリクエストが現れるまでブロックする。

/proc ファイルシステムには、nfsd とそれに関連するコードの より詳細なトレースを可能にするための、4 つのファイルがある:
/proc/sys/sunrpc/nfs_debug
/proc/sys/sunrpc/nfsd_debug
/proc/sys/sunrpc/nlm_debug
/proc/sys/sunrpc/rpc_debug
これらのファイルは、それぞれ、 NFS クライアント・NFS サーバー・ネットワークロックマネージャ (lockd)・ 下層の RPC レイヤのトレースを制御する。 これらのファイルに対して 10 進数を読み書きできる。 各数値は特定の種類のトレースを有効にするためのビットのパターンを表す。 どの数値がどのトレースに対応するかを見つけるには、 カーネルのヘッダファイルを調べてほしい。

関連項目
rpc.nfsd(8), exports(5), nfsstat(8), mountd(8) exportfs(8).

著者
NeilBrown