2 ネットワーク・ファイル・システムの管理

この章では、ネットワーク・ファイル・システム(NFS)の構成、管理および使用に関するタスクなど、Oracle Linux 8でのNFSの管理について説明します。

Oracle Linuxでのローカル・ファイル・システムの管理の詳細は、『Oracle Linux 8: ローカル・ファイル・システムの管理』を参照してください。

NFSについて

NFS (ネットワーク・ファイル・システム)は、クライアント・システムが、ローカル・ストレージにファイルがあるかのようにネットワーク経由でファイルにアクセスできる、分散ファイル・システムです。

NFSサーバーはIPベースのネットワークを経由して、ローカル・ファイル・システム内のディレクトリ階層をリモート・クライアント・システムと共有できます。NFSサーバーでディレクトリがエクスポートされた後、NFSクライアントで、適切な権限がそのクライアントに付与されていれば、このディレクトリがマウントされます。クライアント・システムには、ディレクトリがローカル・ディレクトリであるかのように表示されます。NFSを使用するメリットには、一元化されたストレージ・プロビジョニング、データの整合性の向上、信頼性などがあります。

サポートされるNFSのバージョン

Oracle Linux 8では、次のバージョンのNFSがサポートされています:

  • NFSバージョン3 (NFSv3)、RFC 1813で指定

  • NFSバージョン4 (NFSv4)、RFC 7530で指定

  • RFC 5661で指定されたNFSバージョン4マイナー・バージョン1 (NFSv4.1)。

  • RFC 7862で指定されたNFSバージョン4マイナー・バージョン2 (NFSv4.2)。

ノート:

NFSv2はサポート対象外になりました。

NFSv3は、安全な非同期書込みと効率的なエラー処理を提供します。NFSv3は64ビットのファイル・サイズとオフセットもサポートしています。これにより、クライアントは2GBを超えるファイル・データにアクセスできます。

NFSv3は、rpcbindサービスによって制御されるリモート・プロシージャ・コール(RPC)サービスに依存します。rpcbindサービスはRPCサービスに対するリクエストに応答し、リクエストされたサービスの接続を設定します。さらに、ロックとマウント・プロトコルを処理するために、個別のサービスが使用されます。これらすべてのサービスで使用される様々なポートに対応するようにファイアウォールを設定することが、複雑でエラーが発生しやすいためです。

ノート:

以前のOracle Linuxリリースでは、NFSv3はUser Datagram Protocol (UDP)も使用していました。しかしながら、Oracle Linux 8では、NFS over UDPはサポートされなくなりました。さらに、このリリースでは、NFSサーバーのUDPはデフォルトで無効になっています。

NFSv4は、ファイアウォールおよびインターネットを介して動作できます。また、NFSv4にrpcbindサービスは必要ありません。さらに、NFSv4はアクセス制御リスト(ACL)をサポートし、ステートフルな操作を使用します。

NFSv4には、IPネットワーク経由で実行されるTransmission Control Protocol (TCP)が必要です。前述のように、NFSv4はrpcbindを使用しません。そのため、NFSサーバーはTCPポート2049でサービス・リクエストをリッスンします。マウントのプロトコルとロックのプロトコルもNFSv4プロトコルに統合されているため、これらのプロトコルには個別のサービスも必要ありません。これらの調整により、NFSv4のファイアウォール構成の難度はHTTPなどのサービスと同程度になります。

なお、Oracle Linux 8では、NFSクライアントでNFSv4.2 (デフォルトのバージョン)を使用してマウントされますが、サーバーでNFSv4.2がサポートされていない場合はNFSv4.1にフォール・バックされます。マウントは、後でNFSv4.0、次にNFSv3にフォール・バックします。

NFSサービスについて

Oracle Linux 8では、NFSのバージョンはクライアントとサーバーの間のリモート・プロシージャ・コール(RPC)に依存します。NFSファイル・システムを共有またはマウントするために、実装されているNFSのバージョンに応じて、次の必要なサービスが連携して動作します。これらのサービスはすべて自動的に開始されることに注意してください。

nfsd

共有NFSファイル・システムのリクエストを処理する、サーバーのカーネル・モジュール。

rpcbind

ローカルRPCサービスからポート予約を受け入れるサービス。このサービスが利用可能になるか通知されることにより、対応するリモートRPCサービスがそれらにアクセス可能になり、クライアントもそれにアクセス可能になります。

rpc.mountd

NFSサーバーで、NFSv3クライアントからのマウント・リクエストを処理するために使用されるプロセス。このサービスにより、リクエストされたNFS共有が現在NFSサーバーによってエクスポートされていることが確認されます。

rpc.nfsd

サーバーによって通知される明示的なNFSバージョンおよびプロトコルを、定義できるようにするプロセス。

lockd

クライアントとサーバーの両方で実行されるカーネル・スレッド。lockdプロセスはNetwork Lock Manager (NLM)プロトコルを実装します。これにより、NFSv3クライアントはサーバー上のファイルをロックできるようになります。デーモンは、NFSサーバーが実行され、NFSファイル・システムがマウントされていると、自動的に開始されます。

rpc-statd

ネットワーク・ステータス・モニター(NSM) RPCプロトコルを実装するプロセス。これにより、NFSサーバーが適切に停止されずに再起動されたときにNFSクライアントに通知します。rpc-statdサービスはnfs-serverサービスによって自動的に起動されます。このサービスには、ユーザーによる構成は必要ありません。また、NFSv4では使用されません。

rpc-idmapd

NFSv4クライアントおよびサーバーへのアップコールを提供するプロセス。これにより、ネットワーク上のNFSv4の名前(user@domain形式の文字列)と、ローカルUIDおよびGIDとの間でマップします。idmapdプロセスとNFSv4が連携するようにするには、/etc/idmapd.confファイルを構成する必要があります。NFSv4のみがrpc-idmapdプロセスを使用します。

ノート:

マウントおよびロックプロトコルはNFSv4プロトコルに組み込まれています。また、サーバーはTCPポート2049でリッスンします。このため、NFSv4ではrpcbindlockdおよびrpc-statdサービスとやり取りする必要はありません。NFSサーバーでエクスポートを設定するためにnfs-mountdサービスは引き続き必要ですが、このサービスはネットワーク経由の操作には関与しません。

rpc-idmapdサービスは、カーネルからのアップコールのみを処理し、ネットワーク経由の操作には直接関与しません。ただし、このサービスによってネーミング・サービス・コールが発生し、その結果、ネットワーク経由のルックアップが発生します。

NFSサーバーの構成

Oracle Linux 8では、次の方法でNFSサーバーを構成できます:

  • 手動で/etc/exportsファイルを編集します。

    /etc/exports.dディレクトリに作成したファイルにエクスポートを追加することもできます。

  • exportfsコマンドを使用します。

/etc/exportsファイルの編集によるNFSサーバーの構成

次のステップでは、/etc/exportsファイルを編集することによりNFSサーバーを構成する方法について説明します。

ノート:

同様の方法で、/etc/exports.dディレクトリに作成したファイルにエクスポートを追加することもできます。

  1. まだシステムにない場合は、nfs-utilsパッケージをインストールします。

    sudo dnf install nfs-utils
  2. /etc/exportsファイルを編集して、どのディレクトリをサーバーでクライアントにマウント可能にするかを定義します。次に例を示します:

    /var/folder 192.0.2.102(rw,async)
    /usr/local/apps *(all_squash,anonuid=501,anongid=501,ro)
    /var/projects/proj1 192.168.1.0/24(ro) mgmtpc(rw)

    各エントリには、エクスポートされるディレクトリへのローカル・パス、次に、そのディレクトリをマウントできるクライアントのリスト、そして、カッコで囲まれたクライアント固有エクスポート・オプションが含まれています。クライアント指定子と、そのクライアントに適用されるカッコ付きオプション・リストとの間にはスペースを入れないでください。

    これらのファイル・エントリの詳しい説明を次に示します。

    • IPアドレスが192.0.2.102のクライアント・システムのみが、読取り/書込み権限を使用して/var/folderディレクトリをマウントできます。ディスクへのすべての書込みは非同期で行われます。したがって、サーバーは、書き込みリクエストがディスクに書き込まれるまで待たずに、クライアントからの後続のリクエストに応答します。

    • ワイルドカード(*)で指定されているため、すべてのクライアントが/usr/local/appsディレクトリを読取り専用としてマウントできます。すべての接続ユーザー(rootユーザーを含む)は、UID 501、GID 501のローカルの非特権ユーザーにマップされます。

    • 192.168.1.0/24サブネット上のすべてのクライアントは、/var/projects/proj1ディレクトリを読取り専用としてマウントできます。ただし、mgmtpcという名前のクライアント・システムは、読取り/書込み権限でそのディレクトリをマウントできます。

    詳細は、exports(5)マニュアル・ページを参照してください。

  3. サーバーがNFSv4クライアントにサービスを提供する場合は、/etc/idmapd.confファイルで、サーバーのドメイン名を指定してDomainパラメータの定義を編集します。

    Domain = mydom.com

    この設定によって、all_squashマウント・オプションが指定されていない場合に、NFSクライアント上で所有者やグループが匿名のユーザーまたはグループ(nobodyまたはnogroup)として想定外にリストされることを防ぎます。

  4. ファイアウォールを経由したNFSv4クライアントへのアクセスのみを許可する場合は、次のコマンドを使用します。

    sudo firewall-cmd --permanent --zone=zone --add-service=nfs

    この構成は、rpc.nfsdがデフォルトのTCPポート2049でクライアント・リクエストをリスニングすることを前提としています。

  5. ファイアウォール経由でのNFSv3およびNFSv4クライアントへのアクセスのみを許可する場合は、次を実行します。

    1. /etc/nfs.confファイルを編集して、ネットワーク・マウント・リクエストおよびステータス監視を処理するためのポート設定を作成します。また、ネットワーク・ロック・マネージャによってリスニングする必要がある、TCPポートを設定します。次に例を示します。

      # Ports that various services should listen on.
      
      [mountd]
      port = 892
      
      [statd]
      port = 662
      
      [lockd]
      port = 32803

      いずれかのポートが使用中の場合、NFSの起動は失敗します。lsof -iコマンドを使用して未使用のポートを見つけてから、必要に応じて/etc/nfs.confファイル内の設定を修正します。

      RPCサービスによってリスニングされているポートを確認するには、rpcinfo -pコマンドを使用します。

    2. ファイアウォール・サービスを再起動し、NFSv3接続を許可するようにファイアウォールを構成します。

      sudo firewall-cmd --permanent --zone=zone --add-port=2049/tcp --add-port=111/tcp --add-port=32803/tcp --add-port=892/tcp --add-port=662/tcp
    3. サーバーを再起動します。

      sudo systemctl reboot
  6. nfs-serverサービスを開始し、システムの再起動後にサービスが開始するように構成します。

    sudo systemctl enable --now nfs-server
  7. エクスポートされるファイル・システムを一覧表示します。

    sudo showmount -e
    Export list for host01.mydom.com
    /var/folder 192.0.2.102
    /usr/local/apps *
    /var/projects/proj1 192.168.1.0/24 mgmtpc

    サーバーでのexportfsコマンドでは、showmount -eコマンドと同じ情報が表示されます。

    sudo /usr/sbin/exportfs -v

    showmount - aコマンドでは、現在のすべてのクライアントと、それらのクライアントによってマウントされているすべてのファイル・システムが表示されます。

    ノート:

    NFSv4クライアントからのshowmountコマンドの使用を有効にするには、/etc/nfs.conf内でMOUNTD_PORTパラメータにポート番号を指定します。次に、このTCPポートへのアクセスを有効にするためのファイアウォール・ルールを作成します。

exportfsコマンドを使用したNFSサーバーの構成

exportfsコマンドにより、管理者は、ディレクトリを選択的にエクスポートまたはエクスポート解除できるようになり、NFSサービスを再起動する必要がなくなります。適切なオプションを指定することで、exportfsコマンドはエクスポートされたファイル・システムを/var/lib/nfs/etabファイルに書き込みます。エクスポートされたファイル・システムのリストへの変更は、瞬時に有効になります。これは、nfs-mountdサービスがファイル・システムへのアクセス権限を決定するためにetabファイルを参照しているためです。

オプションなしで使用した場合、exportfsでは、現在エクスポートされているファイル・システムが一覧表示されます。

exportfsコマンドで指定できるオプションは次のとおりです。

-r

/etc/exportsファイル内のリストに加えた変更を組み込むことで、/var/lib/nfs/etabファイル内のエクスポートされたディレクトリのリストをリフレッシュします。

-a

/etc/exportsファイル内で指定されたすべてのファイル・システムをエクスポートします。このオプションは、このコマンドで実行されるアクションを決定する、その他のオプションと組み合せることができます。

-u

すべての共有ディレクトリをエクスポート解除します。

ノート:

exportfs -uaコマンドはNFSファイル共有を一時停止しますが、NFSサービスの実行はすべて継続します。NFS共有を再度有効化するには、exportfs -rコマンドを使用します。

-v

詳細なロギングを指定します。これにより、エクスポートまたはエクスポート解除されているファイル・システムについて、より詳しい情報が表示されます。

詳細は、exportfs(8)exports(5)およびshowmount(8)の各マニュアル・ページを参照してください。

NFSファイル・システムのマウント

  1. まだシステムにない場合は、nfs-utilsパッケージをインストールします。

    sudo dnf install nfs-utils
  2. NFSサーバーによってエクスポートされるファイル・システムを表示します。

    sudo showmount -e host01.mydom.com

    前述のコマンドの出力は、次のようになります。

    Export list for host01.mydom.com
    /var/folder 192.0.2.102
    /usr/local/apps *
    /var/projects/proj1 192.168.1.0/24 mgmtpc

    ノート:

    一部のサーバーでは、この情報の問合せを受け入れませんが、NFSファイル・システムをエクスポートすることはできます。

  3. エクスポートされたNFSファイル・システムを、使用可能なマウント・ポイントにマウントします。

    sudo mount -t nfs -r -o nosuid host01.mydoc.com:/usr/local/apps /apps

    通常、NFSファイル・システムをマウントする場合は、-t NFSオプションを省略できます。

    この例では、読取り専用権限でhost01.mydoc.comによってエクスポートされた/usr/local/appsディレクトリを/appsにマウントします。nosuidオプションによって、リモート・ユーザーは、setuidプログラムを実行して上位の権限を取得できません。

  4. 起動時にNFSファイル・システムをマウントするようにシステムを構成するには、次の例に示すように、ファイル・システムのエントリを/etc/fstabファイルに追加します:

    host01.mydoc.com:/usr/local/apps      /apps      nfs      ro,nosuid  0 0

詳細は、mount(8)nfs(5)およびshowmount(8)の各マニュアル・ページを参照してください。