Network File System
Network File System、NFSは、RFC 1094、RFC 1813、RFC 3530などによって定義され、UNIXで利用される分散ファイルシステムおよびそのプロトコルである。1984年にサン・マイクロシステムズによって実質的な最初の規格となるNFS version 2(NFS v2)が発表された。
概要
NFSは、ローカルに接続されたストレージをネットワークを介してリモートの計算機に提供する分散ファイルシステムとそのプロトコルである。マウントされたNFSボリュームは、ネットワーク上にあることを意識せずローカルと同じように利用出来る。Network File System#関連プロトコルで述べるように、ファイルロック機能やクォータ管理機能などはNFSプロトコル本体に含まれず、それぞれ別のプロトコルによって提供される。
NFSのサービスは一般的にUDPまたはTCPの2049番ポートで提供される。ボリュームを提供するNFSサーバとそれを利用するクライアント間のリモートプロシージャコールには、NFSの一部として開発されたONC RPCを利用している。NFSv3までは、ファイルロックやマウント要求等のONC RPCに使われるポート番号はポートマッパーによって動的に割り当てられることが一般的であった。そのため、ポート番号を固定するオプションを持たない実装の場合、ファイヤーウォールによるポート番号ベースの通信制御は困難であった。NFSv4からは、同等の機構がNFS本体に組み込まれ、サーバ-クライアント間の通信には2049番ポートのみを利用するようになった。
歴史
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のみを利用することになっているが、これはファイルhttp://www.samba.org/ ロック機能を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
AFSやCIFSの存在を踏まえ、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 v4ではそれらに加え、Kerberos認証を利用したユーザ名ベースのアクセスコントロールを新たにサポートした。
root squash
一般的に、管理者権限による無制限なアクセスをNFSクライアントに許可することは危険である。そのため、UNIXシステムでスーパーユーザを示す識別子0によるクライアントからのアクセスを、NFSサーバ側でより権限の低いユーザー識別子に強制的に割り当てるroot_squashという機能を標準で有効にするものが多い。
利用可能なプラットフォーム
1985年にSunOS 2.0に最初に実装された後、多くのUNIX系OSに実装された。その他にもMac OSやWindows、NetWare、AS/400でも利用できる。Windowsでは、MicrosoftのServices for UNIXがNFSサーバおよびクライアントの機能を提供している。
関連項目
参考文献
- RFC 1085
- RFC 1813
- RFC 3530
- Internet Engineering Task Force (2006年3月24日). “Network File System Version 4 (nfsv4) Charter”. 2007年10月17日閲覧。
- Zadok, Erez (2001). Linux NFS and Automounter Administration. Sybex Inc. ISBN 978-0-7821-2739-3
- イレズ ザドック『NFS & Amd』槌田 浩一、翔泳社、2003年。ISBN 978-4-7981-0104-0。
- Eisler, Mike; Ricardo Labiaga, Hal Stern (2001). Managing NFS and NIS (2nd Edition ed.). O'Reilly Media, Inc.. ISBN 978-1-56592-510-6
- ハル スターン、リカルド ラビアガ、マイク アイスラー『NFS&NIS』砂原 秀樹, 木下 哲也(第二版)、オライリー・ジャパン、2002年。ISBN 978-4-87311-078-3。
各プラットフォームに関する情報
- Linux
- Tavis Barr; Seth Vidal, Tom McNeal (2002年11月16日). “Linux NFS-HOWTO”. 2007年10月17日閲覧。
- FreeBSD
- Swingle, Bill (2000年3月4日). “FreeBSD ハンドブック Chapter 21.4 NFS”. 2007年10月17日閲覧。
- Solaris
- Sun Microsystems, Inc.. “Solaris のシステム管理 (ネットワークサービス)”. 2007年10月17日閲覧。