Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第8章 Network File System (NFS)

ネットワークファイルシステム (NFS)により、リモートホストはネットワーク経由でファイルシステムをマウントでき、そのファイルシステムをローカルにマウントされているかのように対話できます。これにより、システム管理者は、リソースをネットワーク上の集中化サーバーに統合できるようになります。
本章では、基本的な NFS の概念および補足情報について説明します。

8.1. NFS の概要

現在、Red Hat Enterprise Linux には NFS のメジャーバージョンが 2 つあります。
  • NFS バージョン 3(NFSv3)は安全な非同期書き込みに対応し、以前の NFSv2 よりもエラー処理において堅牢です。64 ビットのファイルサイズとオフセットにも対応し、クライアントは 2 GB を超えるファイルデータにアクセスできます。
  • NFS バージョン 4(NFSv4)は、ファイアウォールとインターネットを介して動作し、rpcbind サービスが不要になり、ACL に対応し、ステートフルな操作を利用します。
Red Hat Enterprise Linux 7.4 リリース以降、Red Hat Enterprise Linux 4.2(NFSv4.2)は、NFS バージョン 4.2(NFSv4.2)を完全にサポートします。
以下は、Red Hat Enterprise Linux における NFSv4.2 の機能です。
  • sparse Files: ファイルの領域効率を検証し、プレースホルダーがストレージの効率を向上できるようにします。これは、1 つ以上のホールを持つファイルです。ホールとは、割り当てられていない、またはゼロのみで構成される未初期化データブロックです。lseek() NFSv4.2 の操作は seek_hole() および seek_data() をサポートし、これによりアプリケーションはスパースファイルのホールの場所をマップできます。
  • Space Reservation: ストレージサーバーが空き領域を予約することを許可します。これにより、サーバーで領域が不足することができなくなります。NFSv4.2 は、領域を予約するための allocate() 操作、領域の予約を解除するための deallocate() 操作、およびファイル内の領域の事前割り当てまたは割り当て解除を行う fallocate() 操作に対応します。
  • ラベル付き NFS: データアクセス権を実施し、NFS ファイルシステムの個々のファイルに対して、クライアントとサーバー間の SELinux ラベルを有効にします。
  • レイアウトの機能強化: NFSv4.2 では、クライアントがレイアウトとの通信に関してメタデータサーバーに通知するために使用する新しい操作 layoutstats() が提供されます。
7.4 よりも前のバージョンの Red Hat Enterprise Linux は、バージョン 4.1 まで NFS をサポートします。
NFSv4.1 の機能は次のとおりです。
  • ネットワークのパフォーマンスおよびセキュリティーを強化し、Parallel NFS(pNFS)のクライアント側サポートも含みます。
  • コールバックに個別の TCP 接続を必要としなくなりました。これにより、クライアントと通信できない場合でも NFS サーバーは委任を許可できます。たとえば、NAT またはファイアウォールが干渉する場合などです。
  • これは 1 回のセマンティクスを提供します(再起動操作を除く)。これにより、応答が失われ、操作が 2 回送信された場合に特定の操作が不正確な結果を返す可能性がある以前の問題を防ぐことができます。
NFS クライアントはデフォルトで NFSv4.1 を使用してマウントを試行し、サーバーが NFSv4.1 に対応していない場合は NFSv4.0 にフォールバックします。サーバーが NFSv4.0 に対応していない場合、マウントは後で NFSv3 にフォールバックします。
注記
NFS バージョン 2 (NFSv2) は、Red Hat のサポート対象外になりました。
NFS のすべてのバージョンは、IP ネットワークで実行中のTCP( Transmission Control Protocol )を使用でき、NFSv4 でそれを要求することができます。NFSv3 は、IP ネットワーク上で実行されている UDP( User Datagram Protocol )を使用して、クライアントとサーバー間のステートレスネットワーク接続を提供できます。
UDP で NFSv3 を使用する場合、ステートレス UDP 接続(通常の状態以下)のプロトコルオーバーヘッドは TCP よりも低くなります。これにより、非常にクリーンなネットワークでは、パフォーマンスが良くなります。ただし、UDP はステートレスであるため、サーバーが予期せず停止した場合、UDP クライアントはサーバーの要求でネットワークを特長とし続けます。さらに、UDP でフレームが失われた場合、RPC 要求全体を再送信する必要があります。TCP は、失われたフレームのみを再送する必要があります。このような理由により、TCP は NFS サーバーへの接続時に推奨されるプロトコルです。
NFSv4 プロトコルには、マウントとロックのプロトコルが組み込まれています。サーバーは、既知の TCP ポート 2049 もリッスンします。したがって、NFSv4 は rpcbindと対話する必要はありません。[1]lockd、および rpc.statd デーモン。rpc.mountd デーモンは、エクスポートを設定するために NFS サーバーで引き続き必要ですが、ネットワーク上の操作には関与しません。
注記
TCP は、Red Hat Enterprise Linux 下の NFS バージョン 3 のデフォルトのトランスポートプロトコルです。UDP は必要に応じて互換性の目的で使用できますが、幅広く使用することは推奨されません。NFSv4 には TCP が必要です。
すべての RPC/NFS デーモンには、ポートの設定が可能な 「-p」 コマンドラインオプションがあり、ファイアウォールの設定がより容易になります。
TCP ラッパーがクライアントへのアクセス権限を付与すると、NFS サーバーは /etc/exports 設定ファイルを参照して、エクスポートしたファイルシステムにアクセスできるかどうかを確認します。アクセスが可能なことが確認されると、そのユーザーは、ファイルおよびディレクトリーへの全操作を行えるようになります。
重要
NFS がファイアウォールを有効にして Red Hat Enterprise Linux のデフォルトインストールと連携するには、デフォルトの TCP ポート 2049 で IPTables を設定します。適切な IPTable 設定がないと、NFS が適切に機能しなくなります。
NFS の初期化スクリプトと rpc.nfsd プロセスにより、システムの起動時に、指定したポートにバインドできるようになりました。ただし、これはポートが利用できない場合にはエラーになるか、別のデーモンとの競合が発生する可能性があります。

8.1.1. 必要なサービス

Red Hat Enterprise Linux は、カーネルレベルのサポートとデーモンプロセスの組み合わせを使用して、NFS ファイル共有を提供します。すべての NFS バージョンは、クライアントとサーバー間の Remote Procedure Calls (RPC) に依存します。Red Hat Enterprise Linux 7 での RPC サービスは、rpcbind サービスによって制御されます。NFS ファイルシステムの共有やマウントには、実装されている NFS のバージョンに応じて、次のようなサービスが連携して動作することになります。
注記
Red Hat Enterprise Linux の以前のバージョンにおける RPC プログラム番号を IP アドレスポート番号とマッピングするのに portmap サービスが使用されました。このサービスは、Red Hat Enterprise Linux 7 の rpcbind に置き換え、IPv6 への対応が可能になりました。
nfs
systemctl start nfs は NFS サーバーを起動し、共有 NFS ファイルシステムのリクエストに対応する適切な RPC プロセスを実行します。
nfslock
systemctl start nfs-lock は、該当する RPC プロセスを開始する必須サービスをアクティブにし、NFS クライアントがサーバー上のファイルをロックできるようにします。
rpcbind
rpcbind は、ローカルの RPC サービスからのポート予約を受け入れます。その後、これらのポートは、対応するリモートの RPC サービスによりアクセス可能であることが公開されます。rpcbind は、RPC サービスの要求に応答し、要求された RPC サービスへの接続を設定します。このプロセスは NFSv4 では使用されません。
以下の 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.statdnfslock サービスが自動的に起動するため、ユーザー設定は必要ありません。このプロセスは NFSv4 では使用されません。
rpc.rquotad
このプロセスは、リモートユーザーのユーザークォーター情報を提供します。rpc.rquotadnfs サービスにより自動的に起動するため、ユーザー設定は必要ありません。
rpc.idmapd
rpc.idmapd は NFSv4 クライアントとサーバーのアップコールを提供します。これは、ネットワーク上の NFSv4 名( user@domainの形式の文字列)とローカルの UID と GID 間のマッピング間のマッピングです。NFSv4 で idmapd が機能するには、/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 の詳細は、man ページの nfsidmap を参照してください。


[1] rpcbind サービスは 、以前のバージョンの Red Hat Enterprise Linux で使用されていたポート マップから、RPC プログラム番号の組み合わせを IP アドレスポート番号をマッピングします。詳細は、「必要なサービス」 を参照してください。