Red Hat Training

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

第8章 ネットワークファイルシステム(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 は 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() を提供します。クライアントは、レイアウトとの通信に関するメタデータサーバーに通知することができます。
Red Hat Enterprise Linux 7.4 よりも前のバージョンの Red Hat Enterprise Linux では、バージョン 4.1 まで NFS がサポートされます。
NFSv4.1 の機能は次のとおりです。
  • ネットワークのパフォーマンスおよびセキュリティーを強化し、Parallel NFS(pNFS)のクライアント側サポートも含まれます。
  • コールバックに個別の TCP 接続を必要としなくなりました。これにより、クライアントと通信できない場合でも NFS サーバーは委任を許可できます。たとえば、NAT またはファイアウォールが干渉する場合などです。
  • 応答が失われ、操作が 2 回送信された場合に特定の操作が不正確な結果を返す可能性がある以前の問題を防ぐため、1 回限りのセマンティクスが提供されます(再起動操作を除く)。
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 では、失われたフレームのみが再送信する必要があります。このため、NFS サーバーへの接続時に TCP が推奨されるプロトコルになります。
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 で IPTable を設定します。適切な IPTable 設定がないと、NFS が適切に機能しません。
NFS の初期化スクリプトと rpc.nfsd プロセスが、システムの起動時に指定したポートへのバインドを許可するようになりました。ただし、ポートが利用できない場合や、別のデーモンとの競合が発生した場合には、これはエラーに対応する可能性があります。

8.1.1. 必要なサービス

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


[1] rpcbind サービスは、以前のバージョンの Red Hat Enterprise Linux で、RPC プログラム番号を IP アドレスのポート番号の組み合わせにマッピングしていたポートマップに置き換わるものです。詳細は、「必要なサービス」

このページには機械翻訳が使用されている場合があります (詳細はこちら)。