書式
/usr/sbin/exportfs [-avi] [-o options,..] [client:/path ..]/usr/sbin/exportfs -r [-v]
/usr/sbin/exportfs [-av] -u [client:/path ..]
/usr/sbin/exportfs [-v]
/usr/sbin/exportfs -f
説明
exportfs コマンドは、現在 NFS でエクスポートしているファイルシステムの テーブルを管理するために使うコマンドである。 このリストは /var/lib/nfs/xtab という名前のファイルに保存される。 このファイルは リモートホストからファイルツリーをマウントするアクセス要求があった時に mountd から参照される。 また、このリストのうちアクティブになっているものが カーネルのエクスポートテーブルに保存される。通常この xtab ファイルは、 exportfs -a を実行することにより、 /etc/exports に書かれた全てのファイルシステムのリストで初期化される。
しかし管理者は、 /etc/exports を修正することなく、 exportfs を使って選択的に個々のファイルシステムを追加・削除できる。
exportfs とそのパートナとなるプログラム mountd は 2 つのモードの何れかで動作する。 レガシーモードは Linux カーネル 2.4 以前で利用される。 新しいモードは 2.6 以降で利用され、 /proc/fs/nfsd または /proc/fs/nfs にマウントされる nfsd 仮想ファイルシステムを提供する。 このファイルシステムが 2.6 でマウントされない場合、 レガシーモードが使用される。
新しいモードでは、 exportfs はカーネルには全く情報を提供ぜず、 /var/lib/nfs/xtab ファイルを通して mountd に情報を提供するだけである。 mountd はカーネルからの要求を待ち受け、必要に応じて情報を提供する。
レガシーモードでは、 (サブネットやネットグループなどではなく) 特定のホストを指定したエクスポート要求は、 カーネルのエクスポートテーブルに直接書き込まれるとともに、 /var/lib/nfs/xtab にも書き込まれる。 さらに、ホストを特定しないエクスポート要求が /var/lib/nfs/rmtab にリストされているマウントポイントにマッチすると、 このファイルに書かれているホストに向けたエクスポートエントリが、 カーネルのエクスポートテーブルに入れられる。
オプション
- -a
- 全てのディレクトリをエクスポート・アンエクスポートする。
- -o options,...
- exports(5) と同じ形式でエクスポートオプションのリストを指定する。
- -i
- /etc/exports ファイルを無視する。 デフォルトのオプションとコマンドラインで指定されたオプションのみが使われる。
- -r
- 全てのディレクトリを再エクスポートする。 /var/lib/nfs/xtab を /etc/exports と同期させる。 /etc/exports から削除されたエントリを /var/lib/nfs/xtab からも削除し、 既に無効になったエントリをカーネルのエクスポートテーブルから削除する。
- -u
- 1 つ以上のディレクトリをアンエクスポートする。
- -f
- 「新しい」モードにおいて、カーネルのエクスポートテーブルから全てを書き出す。 アクティブなクライアントは、 mountd によって追加された新しいエントリを、次に要求を行ったときに取得する。
- -v
- 詳細に表示する。 エクスポートまたはアンエクスポートするときに状況を表示する。 現在のエクスポートリストを表示するとともに、 エクスポートオプションも表示する。
議論
ディレクトリのエクスポート
1 番目の書式は、新しいエントリをエクスポートテーブルに追加するための コマンドの呼び出し方である。 exportfs -a を使うと、 exports(5) にある全てのディレクトリが xtab に追加され、結果として得られるリストがカーネルに入れられる。host:/path 引き数は、エクスポートするディレクトリとホストを指定する。 exports(5) に記述されている全てのフォーマットがサポートされている。 全てのホストに対してディレクトリをエクスポートするには、単純に :/path と指定すればよい。
特定のホスト/ディレクトリのペアに対するエクスポートオプションは、 いろいろな方法で指定できる。 デフォルトのオプションがいくつか存在するが、 これらは (-i オプションが指定されない限り) /etc/exports のエントリで変更できる。 さらに、管理者はこれらの方法で指定されたオプションを -o 引き数を使って変更できる。 -o オプションの後には、 exports(5) で指定するのと同じ形式で、コンマで区切ったオプションのリストを置く。 このようにして、 exportfs は既にエクスポートされているディレクトリのオプションを変更することもできる。
nfsd(8) が使うカーネルのエクスポートテーブルを修正すると、 コマンドラインが解析された後すぐに反映され、 xtab ファイルが更新される。
デフォルトのエクスポートオプションは sync,ro,root_squash,no_delay である。
ディレクトリのアンエクスポート
3 番目の書式は、現在エクスポートされているディレクトリを アンエクスポートする方法である。 exportfs -ua を使うと、 xtab にリストされているエントリがカーネルのエクスポートテーブルから削除され、 このファイルはクリアされる。 これにより全ての NFS の動作を効率的にシャットダウンすることができる。個々のエクスポートエントリを削除するためには、 host:/path ペアを指定すればよい。 (このペアがもし存在すれば) 指定されたエントリが xtab から削除され、対応するカーネルエントリも削除される。
エクスポートテーブルのダンプ
exportfs を引き数なしで起動すると、現在エクスポートされている ファイルシステムのリストを表示する。 -v オプションを指定すると、各エクスポートエントリに付属している フラグのリストも表示する。例
次のコマンドは、 /etc/exports にリストされた全てのディレクトリを /var/lib/nfs/xtab に追加し、 結果として得られるエクスポートエントリをカーネルにプッシュする:
# exportfs -a
/usr/tmp ディレクトリをホスト djando にエクスポートし、非同期書き込みを許可する場合は、次のようにすればよい。
# exportfs -o async django:/usr/tmp
依存性
IP ネットワークや DNS ドメイン、NIS ドメインへエクスポートしたときは、 これらのグループに属するクライアントは即座には NFS にアクセスできない。 どちらかというと、このようなエクスポートは mountd(8) がこれらのクライアントからのマウント要求を許可するかどうかに対する ヒントなのである。 既存のマウントポイントはリブートしても rmtab に保存されるので、これは通常は大した問題にはならない。ネットワークエントリやドメインエントリをアンエクスポートする場合、 このグループのメンバに現在エクスポートされているエントリについて、 エクスポートが有効になっているかがチェックされ、 既に有効でない場合は削除される。