Show Table of Contents
第8章 NFS (Network File System)
ネットワークファイルシステム (NFS) を利用すると、リモートのホストはネットワーク経由でファイルシステムをマウントし、そのファイルシステムをローカルにマウントしているファイルシステムと同じように操作することができるようになります。また、システム管理者は、リソースをネットワーク上の中央サーバーに統合することができるようになります。
この章では、基本的な NFS の概念と補足的な情報に焦点を絞って説明します。
8.1. NFS の仕組み
現在、Red Hat Enterprise Linux には 2 つのメジャーバージョンの NFS が含まれています。NFS バージョン 3 (NFSv3) は安全な非同期書き込みに対応し、NFSv2 よりもエラーの処理機能が強化されています。また、64 ビットのファイルサイズおよびオフセットをサポートするため、クライアントは 2 GB を超えるファイルデータにアクセスできます。NFSv4 はファイアウォールを介して動作し、インターネット上でも動作します。さらに、
rpcbind サービスが必要なく、ACL をサポートし、ステートフルな操作を利用します。
Red Hat Enterprise Linux 7 には NFS バージョン 4.1 (NFSv4.1) のサポートが追加され、Parallel NFS (pNFS) のクライアント側サポートを含むパフォーマンスおよびセキュリティーの機能が複数強化されました。NFSv4.1 ではコールバックで個別の TCP 接続が不要になり、(NAT やファイアウォールが妨害する場合など) クライアントと通信できなくても、NFS サーバーは委任を許可できます。さらに、NFSv4.1 では exactly once セマンティックが提供されるようになり (再起動操作を除く)、返答が失われ、操作が 2 度送信された場合に、特定の操作が不正確な結果を返す可能性のあるこれまでの問題が発生しないようになりました。
Red Hat Enterprise Linux 7 は NFSv3、NFSv4.0、および NVSv4.1 クライアントをサポートします。NFS クライアントは、デフォルトでは NFSv4.0 を使用してマウントを試行し、マウント操作に失敗すると NFSv3 にフォールバックします。
注記
NFS バージョン 2 (NFSv2) は、Red Hat のサポート対象外になりました。
NFS の全バージョンで、IP ネットワーク経由で実行する Transmission Control Protocol (TCP) を使用することができ、NFSv4 の場合は TCP が必須になります。NFSv3 では IP ネットワーク経由で実行する User Datagram Protocol (UDP) を使用してクライアントとサーバー間のステートレスなネットワーク接続を提供することができます。
UDP で NFSv3 を使用する場合、(通常の状況では) ステートレスな UDP 接続のプロトコルのオーバーヘッドは TCP より少なくなります。つまり、クリーンで適度なトラフィックのネットワーク上では、UDP の方がパフォーマンスがよくなります。ただし、UDP はステートレスのため、予期しないサーバーダウンなどが発生すると、UDP クライアントはサーバーの要求でネットワークを飽和させ続けます。また、UDP の場合にフレームがなくなると、RPC 要求全体を再転送しなければならなくなります。一方、TCP の場合、再送信が必要なのは失ったフレームのみなります。こうした理由から NFS サーバーへの接続には TCP プロトコルが推奨されます。
マウントおよびロックのプロトコルが NFSv4 プロトコルに組み込まれています。サーバーは、一般的に使用されている TCP ポート 2049 でもリッスンします。このように、NFSv4 では、デーモン
rpcbind[1]、 lockd、 rpc.statd とのやりとりが必要なくなります。rpc.mountd デーモンは、NFS サーバーでエクスポートをセットアップするのに必要ですが、送信オペレーションには関与しません。
注記
Red Hat Enterprise Linux では、TCP が NFS バージョン 2 および 3 のデフォルトの転送プロトコルになります。UDP は互換性に必要となる場合は使用できますが、その使用範囲についてはできるだけ限定することを推奨しています。NFSv4 には TCP が必須となります。
すべての RPC/NFS デーモンには
'-p' コマンドラインオプションがあり、ポートを設定することができるため、ファイアウォールの設定が容易になります。
TCP ラッパーによってクライアントにアクセスが許可されると、NFS サーバーは、
/etc/exports 設定ファイルを参照して、そのクライアントがエクスポート済みファイルシステムへのアクセスできるかどうかを確認します。アクセスが可能なことが確認されると、そのユーザーは、ファイルおよびディレクトリーへの全操作を行えるようになります。
重要
ファイアーウォールを有効にしている Red Hat Enterprise Linux のデフォルトインストールで NFS を正しく動作させるために、IPTables は、デフォルトの TCP ポート 2049 に設定してください。IPTables が正しく設定されていないと、NFS は正常に動作しません。
NFS の初期化スクリプトおよび
rpc.nfsd プロセスでは、システム起動中の指定ポートへのバインドが可能になりました。ただし、このポートが使用できない場合や、別のデーモンと競合してしまう場合は、エラーが発生しやすくなる可能性があります。
8.1.1. 必須サービス
Red Hat Enterprise Linux では、NFS ファイル共有を提供するのに、カーネルベースのサポートとデーモンのプロセスの組み合わせを使用します。NFS のすべてのバージョンは、クライアントとサーバー間の Remote Procedure Call (RPC) に依存します。Red Hat Enterprise Linux 7 での RPC サービスは
rpcbind サービスで制御されます。NFS ファイルシステムの共有やマウントには、実装されている NFS のバージョンに応じて次のようなサービスが連携して動作することになります。
注記
portmap サービスは、Red Hat Enterprise Linux の旧バージョンで、RPC プログラム番号を、IP アドレスとポート番号の組み合わせにマッピングするのに使用されていました。このサービスは、Red Hat Enterprise Linux 7 でIPv6 に対応にするため、rpcbind に置き換えられています。
- nfs
systemctl start nfsにより NFS サーバーおよび該当の RPC プロセスが起動し、共有 NFS ファイルシステムの要求が処理されます。- nfslock
systemctl start nfs-lockは、適切な RPC プロセスを起動する必須サービスをアクティベートし、NFS クライアントがサーバー上のファイルをロックできるようにします。- rpcbind
rpcbindで、ローカルの RPC サービスからポート予約を受け取ると、これらのポートはリモートの RPC サービスによってアクセス可能であることが公開されます。rpcbindは、RPC サービスの要求に応答し、要求された RPC サービスへの接続のセットアップを行います。NFSv4 ではrpcbindは使用されません。
以下の RPC プロセスは NFS サービスと連携して動作します。
- rpc.mountd
- NFS サーバーは、このプロセスを使用して NFSv3 クライアントの
MOUNT要求を処理します。要求されている NFS 共有が現在 NFS サーバーで公開されているか、またその共有へのクライアントのアクセスが許可されているかをチェックします。マウントの要求が許可されると、rpc.mountd サーバーはSuccessステータスで応答し、この NFS 共有用のFile-Handleを NFS クライアントに戻します。 - rpc.nfsd
rpc.nfsdでは、サーバーが公開している明示的な NFS のバージョンとプロトコルを定義できます。NFS クライアントが接続するたびにサーバースレッドを提供するなど、NFS クライアントの動的なデマンドに対応するため、Linux カーネルと連携して動作します。このプロセスはnfsサービスに対応します。- lockd
lockdはクライアントとサーバーの両方で実行されるカーネルスレッドです。Network Lock Manager (NLM) プロトコルを実装し、NFSv3 のクライアントがサーバー上でファイルのロックを行えるようにします。NFS サーバーが実行中で、NFS ファイルシステムがマウントされていれば、このプロセスは常に自動的に起動します。- rpc.statd
- Network Status Monitor (NSM) RPC プロトコルを実装します。NFS サーバーが正常にシャットダウンされず再起動すると、NFS クライアントに通知します。
rpc.statdは、nfslockサービスによって自動的に起動されるため、ユーザー設定を必要としません。このプロセスは NFSv4 では使用されません。 - rpc.rquotad
- リモートユーザーのユーザークォータ情報を提供します。
rpc.rquotadはnfsサービスによって自動的に起動するため、ユーザー設定を必要としません。 - rpc.idmapd
rpc.idmapdは、ネットワーク上の NFSv4 の名前 (user@domain形式の文字列) とローカルの UID および GID とのマッピングを行う NFSv4 クライアントアップコールおよびサーバーアップコールを提供します。idmapdを NFSv4 で正常に動作させるには、/etc/idmapd.confファイルを設定する必要があります。最低でもNFSv4 マッピングドメインを定義する「Domain」パラメーターを指定する必要があります。NFSv4 マッピングドメインが DNS ドメイン名と同じであると、このパラメーターをスキップできます。クライアントとサーバーが ID マッピングの NFSv4 マッピングドメインに一致しないと、適切に動作しません。注記
Red Hat Enterprise Linux 7 では、NFSv4 サーバーのみがrpc.idmapdを使用します。NFSv4 はキーリングベース の idmapper のnfsidmapを使用します。nfsidmapは要求に応じてカーネルによって呼び出され、ID マッピングを実行するスタンドアロンプログラムで、デーモンではありません。nfsidmapに問題がある場合、クライアントはrpc.idmapdを使用してフォールバックします。nfsidmapの詳細は、nfsidmap の man ページを参照してください。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.