この章では、NFS 環境の概要について説明します。具体的には、ネットワークの簡単な概要、NFS サービス、NFS システムの把握に必要な概念を説明します。
クライアントとサーバーという用語は、コンピュータがファイルシステムを共有するときの役割を示すものです。ファイルシステムがあるコンピュータのディスク上に存在し、そのコンピュータがこのファイルシステムをネットワーク上の他のコンピュータから使用できるようにしている場合、そのコンピュータをサーバーと呼びます。そのファイルシステムにアクセスしているコンピュータをクライアントと呼びます。 NFS を使用することによって、どのコンピュータからも他のコンピュータのファイルシステムにアクセスでき、それと同時に自分のファイルシステムへのアクセスも可能となります。ネットワーク上では 1 台のコンピュータがクライアントかサーバー、またはその両方の役割として動作することができます。
クライアントは、サーバーの共有ファイルシステムをマウントすることによってサーバーのファイルにアクセスします。クライアントがリモートファイルシステムをマウントしたとき、ファイルシステムがコピーされるのではありません。マウント処理では一連のリモートプロシージャコールによって、クライアントからサーバーのディスク上にあるファイルシステムに透過的にアクセスできるようになります。マウントはローカルマウントのように行われるので、ユーザーはファイルシステムがローカルにあるのと同じようにコマンドを入力します。
サーバーのファイルシステムは、NFS オペレーションによって共有すると、クライアントからアクセスできるようになります。NFS ファイルシステムは、autofs を使用すると自動的にマウントできます。
NFS サービスで共有できるオブジェクトは、ファイル階層の全体、またはその一部です。ファイルを 1 つだけ共有することもできます。すでに共有しているものと重複するファイル階層構造は共有できません。モデムやプリンタなどの周辺機器も共有できません。
多くの UNIX システム環境で共有されるファイル階層構造は、1 つのファイルシステム、またはその一部です。しかし NFS サポートは複数のオペレーティングシステムにまたがって動作しますが、ファイルシステムという考え方は UNIX 以外の環境では通用しません。したがってこのマニュアルでファイルシステムという語を使用する場合、NFS 環境でマウントし共有した、ファイルまたはファイル階層構造を指すことにします。
NFS サービスとは、アーキテクチャが異なり、別のオペレーティングシステムで動作しているコンピュータが、ネットワークを通じてファイルシステムを共有できるようにするサービスのことです。NFS サポートは、MS-DOS から VMS オペレーティングシステムまで多くのプラットフォームに実装されています。
NFS 環境は、異なるオペレーティングシステムで実現できます。アーキテクチャの仕様を定義するのではなく、ファイルシステムの抽象モデルを定義しているためです。それぞれのオペレーティングシステムでは、ファイルシステムセマンティクスに NFS 抽象モデルを適用します。これにより、書き込みや読み出しのようなファイルシステムオペレーションが、ローカルファイルにアクセスするように機能することになります。
複数のコンピュータで同一のファイルを使用するため、ネットワーク上の誰もが同じデータにアクセスできる
各ユーザーアプリケーションがローカルのディスク空間を占めるのではなく、複数のコンピュータでアプリケーションを共有するため、記憶領域を有効利用できる
すべてのユーザーが同一セットのファイルを読み出すので、データの整合性と信頼性が向上する
ファイルシステムをユーザーに透過的な形でマウントできる
リモートファイルに透過的にアクセスできる
様々な環境をサポートする
システム管理の手間を省ける
NFS サービスを使用すると、ファイルシステムの実際の場所をユーザーとは無関係に決めることができます。ユーザーは場所を気にすることなく、すべての適切なファイルにアクセスできるということです。NFS サービスでは、共通して使用するファイルのコピーをすべてのシステムに置くのではなく、コピーを1つのコンピュータのディスクに置き、他のシステムからネットワークを通じてアクセスできるようにします。NFS オペレーションでは、リモートファイルとローカルファイルの区別がありません。
バージョン 2 は、一般に広く使用された初めての NFS プロトコルです。バージョン 2 は、引き続き広範囲のプラットフォームで使用できます。Solaris 2.5 以前のリリースの SunOS では、NFS プロトコルのバージョン 2 が使用できます。
NFS バージョン 3 のプロトコルは、Solaris 2.5 に新機能を追加したものです。相互運用性と性能を向上させるために、いくつかの変更が行われました。これらをすべて有効に利用するには、NFS サーバーとクライアントの両方で、バージョン 3 プロトコルを使用する必要があります。
バージョン 3 では、サーバーで非同期の書き込みが可能になります。サーバーがクライアントの書き込み要求をメモリーに保存するので、効率が向上しました。クライアントは、サーバーが変更内容をディスクに反映させるのを待つ必要がないため、応答時間が短縮されます。サーバーは要求をバッチ処理することもできるので、サーバー上の応答時間も短縮されました。
NFS バージョン 3 では、どの操作でもローカルキャッシュに保存されているファイル属性が返されます。キャッシュの更新頻度が増えたため、ローカルキャッシュのデータを更新する操作を独立して行う必要性が少なくなります。したがってサーバーに対する RPC コールの回数が減少し、性能が向上します。
ファイルアクセス権の確認処理も改善されました。 バージョン 2 では、ユーザーがアクセス権を持っていないリモートファイルをコピーしようとすると、「書き込みエラー」や「読み出しエラー」というメッセージが出力されました。バージョン 3 では、ファイルを開く前に権利がチェックされるので、「オープンエラー」というメッセージが出力されます。
NFS バージョン 3 では、8K バイトの転送サイズ制限が解除されました。 クライアントとサーバーは、バージョン 2 で課せられていた 8K バイト制限を受けず、サポートできる転送サイズならばどのようなものでも処理します。Solaris 2.5 では、転送サイズが 32K バイトにデフォルトで設定されています。
Solaris 2.5 には、アクセス制御リスト (ACL) サポートが追加されました。ACL では、ファイルアクセス権を通常の UNIX よりも正確に設定します。この追加機能では効率は改善されませんが、ファイルへのアクセスがより厳密に制限されるので、セキュリティが向上します。
Solaris 2.5 では、NFS プロトコルのデフォルトのトランスポートプロトコルが TCP に変わりました。このため、低速のネットワークおよび広域ネットワークにおける性能が改善されます。TCP には、トラフィック抑制機能とエラー回復機能があります。TCP を利用した NFS は、バージョン 2 でもバージョン 3 でも動作します。2.5 より前のバージョンでは、NFS のデフォルトプロトコルは UDP (User Datagram Protocol) でした。
Solaris 2.5 には、ネットワークロックマネージャの改良版も含まれています。このため NFS ファイルに対して UNIX のレコードロックと PC のファイル共有が使用できます。NFS ファイルに対するロック機構の信頼性が向上したため、ロックを使用する ksh や mail などのコマンドがハングする可能性が少なくなります。
Solaris 2.6 の NFS バージョン 3 プロトコルでは、2G バイトを超えるサイズのファイルも正しく処理できます。NFS バージョン 2 プロトコル、および Solaris 2.5 に実装されているバージョン 3 プロトコルでは 2G バイトを超えるサイズのファイルは処理できませんでした。
Solaris 2.6 では、読み取り専用ファイルシステムの動的フェイルオーバー機能が追加されました。これによって、マニュアルページ、AnswerBook、共有バイナリなどのあらかじめ複製されている読み取り専用リソースを高度に利用できます。フェイルオーバー機能は、ファイルシステムがマウントされた後ならばいつでも実行可能です。手動マウントでは、今までのリリースのオートマウンタのように複数の複製をリストできるようになりました。オートマウンタは、フェイルオーバーの際にファイルシステムが再マウントされるまで待つ必要がなくなったこと以外は変更されていません。
Solaris 2.0 では、Kerberos V4 クライアントがサポートされていました。Solaris 2.6 では、mount コマンドと share コマンドは、Kerberos V5 認証を使用した NFS マウントをサポートするようになりました。また、share コマンドはクライアントごとに異なる複数の認証方法を指定できるようになりました。
Solaris 2.6 には、NFS プロトコルの拡張機能を使用することによってインターネット上のファイルシステムにファイアウォール経由でアクセスできるようにする機能もあります。この WebNFSTM プロトコルを使用してインターネットにアクセスする利点の 1 つは、NFS バージョン 3 とバージョン 2 プロトコルの拡張機能としてサービスが構築されるということです。今後、この新しいファイルシステムのアクセスプロトコルを使用したアプリケーションがいくつも作成される予定です。また NFS サーバーでは、負荷が大きい状態のときに HTTP (HyperText Transfer Protocol) から Web サーバーへのアクセスよりも高いスループットを確保できます。そのため、ファイルを取得するための時間が短縮されます。さらに、WebNFS ではそうしたファイルを共有しても匿名 ftp サイトを管理するオーバーヘッドが生じません。
Solaris 7 では、新しいセキュリティ方式である RPCSEC_GSS がサポートされています。この方式では、標準的な GSS-API インタフェースを使用して、認証、一貫性、機密性を実現し、複数のセキュリティ機構をサポートしています。現在、これらの新しいセキュリティ方法を使用する機構は、Solaris では、クライアント側だけに組み込まれています。
Solaris 7 では、mount コマンドと automountd コマンドが拡張され、マウント要求で MOUNT プロトコルの代わりに公開ファイルハンドルも使用できるようになりました。これは、WebNFS サービスで使用されているのと同じアクセス方法です。公開ファイルハンドルを使用すると、ファイアウォールを越えたマウントが可能です。さらに、サーバーとクライアント間のトランザクションが少なくて済むため、マウントにかかる時間が短縮されます。
この機能拡張で、標準のパス名の代わりに NFS URL を使用することもできるようになりました。また、mount コマンドとオートマウンタのマップに -public オプションを指定すると、必ず公開ファイルハンドルを使用するようになります。
新しいプロトコルが 1 つ追加されて、WebNFS クライアントで NFS サーバーとセキュリティメカニズムのネゴシエーションが行なえるようになりました。このプロトコルの追加により、WebNFS サービスの使用時に、セキュリティ保護されたトランザクションが使用できます。
NFS サーバーログにより、NFS サーバーはファイルシステム上で実行されるファイル操作の記録を提供することができます。このログには、アクセスされた対象、時間、アクセスした人を追跡するための情報が含まれています。一連の構成オプションを使用して、これらの情報を含むログの場所を指定することができます。また、これらのオプションを使用して、ログにとる操作を選択することもできます。この機能は、NFS クライアントや WebNFS クライアントで anonymous FTP を利用するサイトで特に便利です。
NFS サービスを使用して共有されるファイルシステムは、「自動マウント」と呼ばれる方法によってマウントできます。クライアント側のサービスである autofs は、自動マウントを実現するファイルシステム構造です。autofs のファイルシステムは、automount で作成されます。automount は、システムを起動すると自動的に実行されます。automountd という常駐型の automount デーモンが、必要に応じてリモートディレクトリのマウントとアンマウントを行います。
automountd を実行しているクライアントコンピュータ上のユーザーがリモートのファイルまたはディレクトリにアクセスしようとすると、そのファイルまたはディレクトリが所属するファイルシステムがこのデーモンによってマウントされます。このリモートファイルシステムは、必要な間はマウントされたままです。リモートファイルシステムが一定時間アクセスされないと、自動的にアンマウントされます。
ブート時にはマウントする必要はなく、ユーザーはディレクトリをマウントするためにスーパーユーザーのパスワードを知る必要はありません。ユーザーが mount と umount コマンドを使用する必要もありません。autofs は、ユーザーの介入なしに、必要に応じてファイルシステムをマウントまたはアンマウントします。
automountd によって一部のファイル階層をマウントするということは、mount によって他のファイル階層をマウントしないということではありません。ディスクレスコンピュータは、mount と /etc/vfstab ファイルを使用して / (ルート)、 /usr、および /usr/kvm をマウントしなければなりません。
autofs サービスについては、「autofs 管理作業の概要」と 「autofs のしくみ」で詳しく説明します。
autofs は、ローカルの名前空間に指定したファイルシステムで動作します。この情報は、NIS、NIS+、およびローカルファイルに保存されます。
Solaris 2.6 には、完全にマルチスレッド化された automountd が含まれています。この拡張によって autofs はさらに信頼性が高まりました。また、複数のマウントを同時にサービスできるようになったため、サーバーが使用できないときにサービスが停止することも避けられます。
この新しい automountd には、オンデマンドマウント機能もあります。今までのリリースでは、階層に含まれるすべてのファイルシステムがマウントされていました。これからは、一番上のファイルシステムしかマウントされません。そのマウントポイントに関係する他のファイルシステムは、必要に応じてマウントされます。
autofs サービスで、間接マップを表示できるようになりました。これによりユーザーは、どのディレクトリがマウントできるかを確認するためにファイルシステムを実際に 1 つずつマウントする必要がなくなります。autofs マップに -nobrowse オプションが追加されたので、/net や /home などの大きなファイルが自動的に表示されることはありません。また、automount に対して -n を使用することによって、autofs の表示機能を各クライアントでオフにすることもできます。