Network File System

出典: フリー百科事典『ウィキペディア(Wikipedia)』

Network File SystemNFSは、RFC 1094RFC 1813RFC 3530などによって定義され、UNIXで利用される分散ファイルシステムおよびそのプロトコルである。1984年サン・マイクロシステムズによって実質的な最初の規格となるNFS version 2(NFS v2)が発表された。

目次

[編集] 概要

NFSは、ローカルに接続されたストレージをネットワークを介してリモートの計算機に提供する分散ファイルシステムとそのプロトコルである。マウントされたNFSボリュームは、ネットワーク上にあることを意識せずローカルと同じように利用出来る。NFSのサービスは一般的にUDPまたはTCPの2049番ポートで提供され、ボリュームを提供するNFSサーバとそれを利用するクライアント間のリモートプロシージャコールには、NFSの一部として開発されたONC RPCを利用する。

Network File System#関連プロトコルで述べるように、ファイルロック機能やクォータ管理機能などはNFS本体に含まれず、それぞれ別のプロトコルによって提供される。

[編集] 歴史

[編集] NFS version 1

NFS version 1(NFS v1)は、サン・マイクロシステムズ内の実験にとどまり、対外的なリリースはされなかった。

[編集] NFS version 2

NFS v2の仕様は1984年に発表され、1985年にはNFS v2を初めて実装したSunOS 2.0がリリースされた。その後1989年3月にはRFC 1094が取りまとめられ標準化された。 NFS v2の開発にはRusty Sandberg, Bob Lyon, Bill Joy, Steve Kleimanなどが参加してい:た。元々のNFS v2では通信にUDPのみを利用することになっているが、これはファイルロック機能をNFSの枠組みの外で実装することでプロトコルをステートレスに保つのが目的であった。

[編集] NFS version 3

1995年6月にRFC 1813で定義されたNFS v3では、次の機能が追加された。

  • ファイルサイズおよび読み書き時に指定するオフセットの型を32bitから64bitに拡張し、4GiB以上のファイルをサポートした。
  • 書き込み性能を向上させるため、サーバへの非同期書き込みをサポートした。
  • ファイル属性を別途取得するプロシージャ呼び出しを省くために、多くのプロシージャでその返値にファイル属性を追加した。
  • ディレクトリを走査する時、そこに含まれるファイル名に加えファイルハンドルと属性を一度に取得できるREADDIRPLUSプロシージャを追加した。
  • その他の改良

また、NFS v2の時点ですでにTCPによる転送をサポートするベンダーが複数存在したことから、サン・マイクロシステムズはNFS v3からTCP転送を仕様に追加した。これによりWANを介したNFSがより安定して動作するようになった。

[編集] NFS version 4

AFSCIFSの存在を踏まえ、2000年12月にRFC 3010で、また2003年4月にRFC 3530で改定されたNFS v4では、性能の向上策、Kerberos認証などの強力なセキュリティ、またステートフルなプロトコルを導入した。NFS v4からはその開発主体がInternet Engineering Task Forceへ移動し、サン・マイクロシステムズに加えネットワーク・アプライアンスなども規格策定に携わった。

[編集] 関連プロトコル

NFSに付随するプロトコルは次のようなものがある。

Network Lock Manager
UNIX System Vに追加されたファイルロック機構
クォータ情報の遠隔通知
NFSサーバが管理するクォータの状態をクライアントに通知するもので、rquotaとも呼ばれる。なお、クォータ管理そのものはサーバの役割であり、クライアントはその情報を受け取っているだけである。
WebNFS
ウェブブラウザとNFSを統合し、ファイアーウォールを介した利用を実現するNFS v2, v3の拡張

[編集] アクセスコントロール

NFS v2およびNFS v3では、ユーザーのアクセス権限にUNIXのユーザー識別子およびグループ識別子をそのまま用いている。 デフォルトではクライアント側に設定された識別子番号がそのままNFSサーバに渡され、サーバはそれを見てアクセスを制御する。クライアントとサーバ間でグループ識別子を別々に管理している場合では、管理者が要したサーバ側とクライアント側の識別子対応表を参照するか、クライアントが用意したNISサーバあるいは専用のデーモンugiddをサーバが参照するように設定することでアクセスコントロールを行う。

なお、管理者権限による無制限なアクセスをNFSクライアントに許可することは危険であるため、デフォルトでNFSサーバはUNIXシステムでスーパーユーザを示す識別子0をより権限の低いユーザー識別子に強制的に割り当てるroot_squashという機能を有効にするものが多い。

NFS v4ではそれらに加え、Kerberos認証を利用したユーザ名ベースのアクセスコントロールが可能になっている。

[編集] 利用可能なプラットフォーム

1985年SunOS 2.0に最初に実装された後、多くのUNIX系OSに実装された。その他にもMac OSWindowsNetWareAS/400でも利用できる。Windowsでは、MicrosoftのServices for UNIXがNFSサーバおよびクライアントの機能を提供している。

[編集] 使用されるポートについて

NFSのWANを経由してのマウントについては古くから可能であったが、NFSをマウントするためには、portmap,nfsd,statd,mountd,nlockmgrといった最低限のサービスを起動し、かつそのサービスの使用するポートを開放する必要があった。だが、デフォルトではportmap(111)とnfsd(2049)以外はすべてportmapによって動的にポート割り当てがされており、OSやNFSデーモンを再起動した際に使用されるポート番号が変化してしまう。そのため、デフォルトでWAN経由でのNFSマウントを実現するには、最悪ウェルノウンポート以外すべてのポートを解放する可能性もあった。 そのためver3からは/etc/sysconfig/nfsを編集することで、それぞれのサービスの使用するポート番号を固定することができるようになった。以前のバージョンでもポートの固定自体は可能であったが、設定文書が分散していたため、多少設定が困難であった。ただし、またver4になってからは、クライアントとサーバ間でnfsd(2049)の使用ポートのみを開放することでマウントが可能になった。

[編集] 問題点

バージョン3において、/etc/sysconfig/nfsを編集することでNFSサービスのポートを固定することが可能となったが、rquotaの機能を無効とした場合、nlockmgrのポート固定の設定がOSブート時のみ無効となってしまう。一応OS再起動後にNFSサーバを再起動すると、パラメータ通りの値になる。また、modprobe.confやmodules.confを編集することでカーネルに直接設定を渡すよう個別に設定すれば回避できる。

バージョン4からは、実質クライアントがサーバのnfsd(2049)にアクセスすることができれば、NFSをマウントすることが可能となった。そのため、NFSのプロセスからportmapは不要となったのだが、NFSサーバはportmapサービスが立ち上がっていないと立ち上がらない。

[編集] 関連項目

[編集] 参考文献

[編集] 各プラットフォームに関する情報