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ではrpcbind
、lockd
および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
ディレクトリに作成したファイルにエクスポートを追加することもできます。
-
まだシステムにない場合は、
nfs-utils
パッケージをインストールします。sudo dnf install nfs-utils
-
/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)
マニュアル・ページを参照してください。 -
-
サーバーがNFSv4クライアントにサービスを提供する場合は、
/etc/idmapd.conf
ファイルで、サーバーのドメイン名を指定してDomainパラメータの定義を編集します。Domain = mydom.com
この設定によって、
all_squash
マウント・オプションが指定されていない場合に、NFSクライアント上で所有者やグループが匿名のユーザーまたはグループ(nobody
またはnogroup
)として想定外にリストされることを防ぎます。 -
ファイアウォールを経由したNFSv4クライアントへのアクセスのみを許可する場合は、次のコマンドを使用します。
sudo firewall-cmd --permanent --zone=zone --add-service=nfs
この構成は、
rpc.nfsd
がデフォルトのTCPポート2049でクライアント・リクエストをリスニングすることを前提としています。 -
ファイアウォール経由でのNFSv3およびNFSv4クライアントへのアクセスのみを許可する場合は、次を実行します。
-
/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
コマンドを使用します。 -
ファイアウォール・サービスを再起動し、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
-
サーバーを再起動します。
sudo systemctl reboot
-
-
nfs-server
サービスを開始し、システムの再起動後にサービスが開始するように構成します。sudo systemctl enable --now nfs-server
-
エクスポートされるファイル・システムを一覧表示します。
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ファイル・システムのマウント
-
まだシステムにない場合は、
nfs-utils
パッケージをインストールします。sudo dnf install nfs-utils
-
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ファイル・システムをエクスポートすることはできます。
-
エクスポートされた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
プログラムを実行して上位の権限を取得できません。 -
起動時にNFSファイル・システムをマウントするようにシステムを構成するには、次の例に示すように、ファイル・システムのエントリを
/etc/fstab
ファイルに追加します:host01.mydoc.com:/usr/local/apps /apps nfs ro,nosuid 0 0
詳細は、mount(8)
、nfs(5)
およびshowmount(8)
の各マニュアル・ページを参照してください。