NFS(Network File System)は、サーバーが公開したディレクトリを、クライアントが自分のディレクトリツリーにマウントして読み書きするファイル共有プロトコルです。Sun Microsystemsが開発し、1989年にNFSv2がRFC 1094として公開されたプロトコルで、いまもLinux/Unixのサーバー間共有で広く使われています。この記事では、NFSv3とNFSv4の違いを「開くポート」「状態管理」「認証」で比較し、Ubuntu 24.04で実際にNFSサーバーを立てて取った出力を根拠に、構築・バージョンの確認・NFSv4専用化の手順と、Samba(SMB)との使い分けを示します。
まとめ:対応環境でのNFSv4.2採用と互換性維持のためのv3併用
ファイアウォール設計でまず確認したい違いは、NFSv3とNFSv4で開けるポートの数です。Ubuntu 24.04の実測では、NFSv3を有効にしたサーバーは2049番に加えて rpcbind の111番、mountd・statd・nlockmgr が起動のたびに変わる動的ポートで待ち受けていました。NFSv4.1以降はTCP 2049番だけで通信し、rpcbindを止めてもマウントできます。v4はさらに、ロックとマウントの手続きをプロトコル本体に取り込んだステートフルな設計で、Kerberos認証(sec=krb5/krb5i/krb5p)の実装を仕様で必須にしています。
Linuxのクライアントはバージョンを指定しなければ4.2から順に下げて交渉するので、クライアントとサーバーの双方が4.2に対応し、その利用を許可していれば vers=4.2 になります。新規構成はNFSv4.2を既定にし、v3は「WindowsのClient for NFS(v2/v3のみ対応)」や古いNAS・ハイパーバイザーがつなぐ場合だけ、ポートを固定して残すのが判断の基準です。Windows端末から部署フォルダを使う共有は、NFSではなくSMB(Linuxで提供するならSamba)を選びます。
NFSの仕組み:ディレクトリの公開・マウントとRPCによるファイル操作
サーバーは公開するディレクトリと許可するクライアントを /etc/exports に書き、クライアントはそれを mount でローカルのパスにつなぎます。アプリケーションは通常のファイル操作APIでアクセスでき、裏でNFSクライアントがファイル操作をRPC(Remote Procedure Call)の要求に変えてサーバーの nfsd へ送ります。前提になるLinuxのサービス管理はLinuxの仕組みとサーバー用途の解説、NFSが生まれたUnixの系譜はUnixとLinuxの違いとPOSIXの解説で扱っています。
NFSを構成するデーモン:nfsd・rpcbind・mountd・statd・lockd
NFSは役割の違う複数のRPCサービスの組み合わせで動き、どれが要るかはバージョンで変わります。
| サービス | 役割 | v3 | v4 |
|---|---|---|---|
| nfsd(RPC 100003) | ファイル操作の本体 | 2049番 | 2049番 |
| rpcbind(RPC 100000) | RPCサービスのポート案内 | 通常使用・111番 | 不要 |
| mountd(RPC 100005) | マウント要求の受付 | 必須・動的 | 通信には不要 |
| statd(RPC 100024) | 再起動時のロック回復 | NLM利用時に必要・動的 | 不要 |
| nlockmgr/lockd(RPC 100021) | ファイルロック | NLM利用時に必要・動的 | 不要(本体に統合) |
v4でも rpc.mountd はサーバー側でexportの設定を管理するために動きますが、v4のマウント処理には関与しません。ただし後述の検証では vers3=n にしてもmountdの待ち受けは残っていたので、ポートまで閉じるには別の設定が要ります。v3のクライアントはまずrpcbindに「mountdは何番か」を問い合わせ、教わった番号へマウント要求を出してから2049番でファイル操作を始めます。この往復と動的ポートが、v3をファイアウォール越しに通しにくくしている理由です。
NFSのバージョン一覧:v2からv4.2までのRFCと主な変更点
NFSの仕様はRFCとして公開されています。v4系は改訂のたびにRFC番号が変わるので、仕様を引くときは現行の番号を使います。
| 版 | 現行のRFC | 公開 | 主な変更点 |
|---|---|---|---|
| NFSv2 | RFC 1094 | 1989年3月 | UDP・32ビットのファイルサイズ |
| NFSv3 | RFC 1813 | 1995年6月 | 64ビット化・非同期書き込み・TCP |
| NFSv4.0 | RFC 7530 | 2015年3月 | ステートフル・COMPOUND・2049番集約 |
| NFSv4.1 | RFC 8881 | 2020年8月 | セッション・pNFS |
| NFSv4.2 | RFC 7862 | 2016年11月 | サーバーサイドコピー・スパースファイル |
NFSv4.0の最初の仕様は2000年12月のRFC 3010で、2003年4月のRFC 3530を経てRFC 7530に置き換わりました。NFSv4.1も2010年1月のRFC 5661がRFC 8881で置き換えられています。4.2のRFCが4.1の改訂版より古い番号なのはこのためで、4.2は4.1の上に追加機能を載せた小改訂という位置づけです。
NFSv3とNFSv4の違い:ポート・状態管理・認証を比較
違いを先に一覧にし、運用に響く3点を実測と仕様で補います。
| 観点 | NFSv3 | NFSv4(4.0〜4.2) |
|---|---|---|
| 開くポート | 111+2049+動的ポート | TCP 2049(4.0はコールバック用も) |
| トランスポート | UDP/TCP | TCP(RDMAも可・UDPは不可) |
| 状態管理 | ステートレス | ステートフル(リース) |
| ロック | 別プロトコル(NLM) | プロトコル本体 |
| マウント | MOUNTプロトコル | 疑似ファイルシステム |
| ユーザーの表現 | 数値のUID/GID | user@domain(sec=sysは数値) |
| ACL | POSIX ACL(拡張) | NFSv4 ACL |
| Windows標準クライアント | 対応 | 非対応 |
開くポートの違い:rpcinfo -p で見るv3の動的ポート
Ubuntu 24.04に nfs-kernel-server を入れ、v3とv4の両方が有効な既定の状態で rpcinfo -p を実行した結果の抜粋です。
$ rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100024 1 tcp 56267 status
100005 3 tcp 60081 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100021 4 tcp 34481 nlockmgr
nfs本体はv3もv4も2049番ですが、status(statd)・mountd・nlockmgr は5桁の動的ポートで、サービスを再起動すると番号が変わりました。v3をファイアウォール越しに通すには、これらを固定してから穴を開ける必要があります(手順は後述)。RFC 7530は、登録済みの2049番を既定の構成にすべき(SHOULD)とし、そうすればクライアントがRPCの番号案内(rpcbind)を使わずにファイアウォールを越えられると書いています。ただしv4.0では、サーバーがクライアントへ委任(delegation)の返却を求めるコールバックを別の接続で張るため、クライアント側のポートも考える必要があります。v4.1以降はコールバックも既存の接続に載るので、Red Hatのファイアウォール手順どおりサーバーのTCP 2049番を開ければ足ります。
状態管理とロックの違い:ステートレスなv3とリースを持つv4
v3のサーバーは、誰がどのファイルを開いているかを覚えません。サーバーが再起動しても、クライアントは同じ要求を投げ直せば続きから処理できます。その代わりロックはNFSの外にあり、NLM(lockd)とNSM(statd)という別プロトコルが担います。statdが止まっているとロックの回復ができず、ロックを使うアプリケーションが固まる原因になります。
v4はOPEN・CLOSE・LOCKをプロトコルの操作として持ち、サーバーがクライアントごとの状態をリース(一定時間ごとに更新しないと失効する貸し出し)で管理します。サーバーが再起動すると猶予期間(grace period)が設けられ、その間にクライアントがロックを取り直します。複数の操作を1回の要求にまとめるCOMPOUNDも4.0で入り、往復の多いWANでの効率を上げています。4.1では要求の重複実行を防ぐセッションと、データを複数のサーバーに分散して並列に読み書きするpNFSが加わりました。
認証とIDマッピングの違い:AUTH_SYSとKerberos・user@domain
既定の認証 sec=sys(AUTH_SYS)は、クライアントが申告するUID/GIDをそのまま信じる方式です。クライアントのroot権限を持つ人なら、任意のUIDを名乗れます。Linuxではv3でもKerberosを使えますが、仕様として実装を必須にしたのはv4です。RFC 7530はKerberos v5を使うRPCSEC_GSSを「実装しなければならない(MUST)」とし、使うかどうかは運用者に任せています。選べるのは sec=krb5(認証のみ)、krb5i(改ざん検知)、krb5p(通信の暗号化)の3段階です。ユーザーの管理をActive DirectoryやLDAPの認証基盤に寄せている組織なら、この仕組みに乗せられます。
もう1つの違いが、ユーザーの表し方です。v4のプロトコルはファイルの所有者を user@domain の文字列で送る設計です。ただしLinuxは、sec=sys のマウントでは数値のUID/GIDをそのまま受け渡すのが既定です(カーネルパラメータ nfs4_disable_idmapping の既定値1)。実測でもv4.2のマウントで作ったファイルはサーバー上でUID 501のままでした。名前での対応付けが効くのはKerberosを使うときと、この既定を外したときで、そのときはサーバーとクライアントの /etc/idmapd.conf の Domain を揃えないと所有者が nobody と表示されます。所有者がnobodyと表示される場合は、NFSv4ドメインの不一致に加え、ユーザー名の解決設定やIDマッピングのキャッシュも確認します。
使っているNFSバージョンを確認する方法:nfsstat -m と /proc
nfs(5)によると、Linuxのクライアントは nfsvers(vers)を指定しないと、まず4.2を試し、サーバーが対応する版まで順に下げて交渉します。v3とv4の両方を有効にしたサーバーへ、版の指定ありとなしで1回ずつマウントした結果が次のとおりです。
$ sudo mount -t nfs -o vers=3 127.0.0.1:/srv/nfs/data /mnt/v3
$ sudo mount -t nfs 127.0.0.1:/srv/nfs/data /mnt/v4
$ nfsstat -m
/mnt/v3 from 127.0.0.1:/srv/nfs/data
Flags: rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=127.0.0.1,mountvers=3,mountport=43297,mountproto=udp,local_lock=none,addr=127.0.0.1
/mnt/v4 from 127.0.0.1:/srv/nfs/data
Flags: rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=127.0.0.1,local_lock=none,addr=127.0.0.1
指定なしのマウントは vers=4.2 に決まりました。v3のマウントにだけ mountport=43297 と mountproto=udp が付いており、mountdの動的ポートへUDPで問い合わせてからマウントしたことが分かります。nfsstat が入っていないクライアントでは、grep nfs /proc/mounts で同じ情報が読めます(ファイルシステム種別もv3は nfs、v4は nfs4 と表示されます)。
サーバー側で有効な版は /proc/fs/nfsd/versions に出ます(root権限が必要)。既定の状態では +3 +4 +4.1 +4.2 でした。先頭の + が有効、- が無効です。
NFSサーバーの構築とマウント手順:Ubuntu 24.04の場合
ここからの手順は、colima上のUbuntu 24.04(nfs-kernel-server 2.6.4)で確認した操作を基に、別ホスト接続用のIPアドレスに置き換えて示しています。実測ログは同一VM内のループバック接続によるものです。RHEL系ではパッケージ名が nfs-utils になり、サービス名は同じ nfs-server です。
/etc/exports の設定と exportfs -ra による共有公開
$ sudo apt-get install -y nfs-kernel-server
$ sudo mkdir -p /srv/nfs/data
$ echo '/srv/nfs/data 192.168.0.0/24(rw,sync,no_subtree_check)' | sudo tee -a /etc/exports
$ sudo exportfs -ra
$ sudo exportfs -v
/srv/nfs/data 192.168.0.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
exportfs -v は、書いていないオプションも既定値込みで表示します。rw,sync,no_subtree_check の3つしか書いていないのに、root_squash・secure・sec=sys が付いているのが分かります。exports(5)では、nfs-utils 1.0.0より後は sync が既定、1.1.0以降は no_subtree_check が既定です。rw を書かなければ読み取り専用になります。ただし、rw だけでは共有ディレクトリへの書き込み権限は付与されません。作成した /srv/nfs/data の所有者・グループとモードを設定し、クライアントの利用者に対応するUID/GIDへ書き込み権限を与える必要があります。ホスト名と括弧の間に空白を入れると、括弧内のオプションが「指定ホスト以外の全員」に適用されるので、192.168.0.0/24 (rw) のような書き方は避けます。exportsの変更は exportfs -ra で反映され、NFSサービスの再起動は要りません。
クライアントのマウント操作と /etc/fstab による永続化
$ sudo apt-get install -y nfs-common
$ sudo mkdir -p /mnt/data
$ showmount -e 192.168.0.10
$ sudo mount -t nfs -o vers=4.2 192.168.0.10:/srv/nfs/data /mnt/data
# /etc/fstab に追記(_netdev でネットワーク起動後にマウント)
192.168.0.10:/srv/nfs/data /mnt/data nfs vers=4.2,hard,_netdev 0 0
showmount -e はmountdに問い合わせるv3系の仕組みなので、後述のNFSv4専用サーバーには使えません。fstabでは版を明記しておくと、サーバー側でv4が無効になったときに黙ってv3へ落ちるのを防げます。hard はサーバーが応答しない間、I/Oを失敗させずに待ち続ける既定の動作で、データの書き込みを扱う共有ではこちらを使います。
ファイアウォール越しにNFSを通す設定:v4専用化とv3のポート固定
サーバーとクライアントの間にファイアウォールやセキュリティグループがあるなら、まずv3が要るかを確認します。要らなければv4専用にし、要るならv3の補助サービスのポートを固定します。
NFSv4専用サーバーにする手順:vers3=n と rpcbind の停止
Red HatのNFSv4専用サーバーの設定と同じ考え方で、/etc/nfs.conf の [nfsd] セクションに vers3=n を書き、rpcbindとstatdを止めます。Ubuntu 24.04では /etc/nfs.conf.d/ に別ファイルとして置けます。以下はサーバー自身で行うループバック検証です。事前に /etc/exports で共有先として 127.0.0.1(rw,sync,no_subtree_check) を許可し、sudo exportfs -ra で反映したうえで、sudo mkdir -p /mnt/v3 /mnt/v4 を実行しておきます。
$ printf '[nfsd]\nvers3=n\n' | sudo tee /etc/nfs.conf.d/v4only.conf
$ sudo systemctl restart nfs-server
$ sudo cat /proc/fs/nfsd/versions
-3 +4 +4.1 +4.2
$ sudo systemctl stop rpcbind.socket rpcbind rpc-statd
$ sudo mount -t nfs -o vers=4.2 127.0.0.1:/srv/nfs/data /mnt/v4 # 成功
$ sudo mount -t nfs -o vers=3 127.0.0.1:/srv/nfs/data /mnt/v3
mount.nfs: requested NFS version or transport protocol is not supported for /mnt/v3
rpcbindが止まった状態でもv4のマウントは成功し、v3は「requested NFS version or transport protocol is not supported」で失敗しました(終了コード32)。v4.1以降のクライアントだけなら、開けるのはTCP 2049番だけです。Red Hatの手順は、さらに rpc.mountd を --no-tcp --no-udp で起動してネットワークで待ち受けないようにしています(mountd自体はexportの管理に必要なので止めません)。検証では systemctl stop で止めたところ、v3のマウントを試した時点でrpc-statdとrpcbindが自動で起動し直しました。本番では sudo systemctl mask --now rpcbind.socket rpcbind rpc-statd で自動起動ごと止めます(Red Hatの手順と同じ。mask後の挙動はこの検証では測っていません)。
v4専用にすると、WindowsのClient for NFSはつながらなくなります。Microsoft Learnの対応表では、WindowsのClient for NFSが対応するのはNFSv2とv3だけで、v4.1に対応しているのはWindows Server側のServer for NFSです。
NFSv3を残す場合にポートを固定する手順:nfs.conf と lockd の sysctl
この手順は、NFSv3が有効で、rpcbindとrpc-statdがマスクされていないサーバーが対象です。直前のv4専用化を試した場合は、sudo rm /etc/nfs.conf.d/v4only.conf と sudo systemctl unmask rpcbind.socket rpcbind rpc-statd で設定を戻してから実行してください。
# /etc/nfs.conf.d/ports.conf
[mountd]
port=20048
[statd]
port=32765
outgoing-port=32766
# lockd はカーネル側の値なので sysctl で固定する
$ sudo sysctl -w fs.nfs.nlm_tcpport=32803 fs.nfs.nlm_udpport=32769
$ sudo systemctl restart nfs-server rpc-statd
$ rpcinfo -p localhost | grep -E 'mountd|status|nlockmgr'
100005 1 tcp 20048 mountd
100024 1 tcp 32765 status
100021 1 tcp 32803 nlockmgr
mountdとstatdは nfs.conf の設定だけで固定されました。nfs.conf(5)には [lockd] の port/udp-port もありますが、今回の環境ではそれを書いて nfs-server を再起動しても動的ポートのままで、sysctlの fs.nfs.nlm_tcpport/nlm_udpport を設定して初めて固定されました(OSの再起動後に [lockd] が効くかは検証していません)。再起動後も保つには /etc/sysctl.d/ に同じ値を書きます。開けるポートは111・2049・20048・32765・32803(UDPも使うなら32769)です。
exportsのセキュリティと性能のオプション:root_squash と sync
root_squash・no_root_squash・all_squash のID写像の実測結果
クライアントのrootと一般ユーザー(UID 501)で同じ共有にファイルを作り、サーバー側で所有者を確かめた結果です。
| exportのオプション | rootが作成 | UID 501が作成 |
|---|---|---|
| 既定(root_squash) | 65534:65534 | 501:1000 |
| no_root_squash | 0:0 | 501:1000 |
| all_squash,anonuid=2000,anongid=2000 | 2000:2000 | 2000:2000 |
既定の root_squash は、クライアントのrootをサーバーの匿名ユーザー(UID/GID 65534=nobody)に置き換えます。v3でもv4でも結果は同じでした。no_root_squash にするとクライアントのrootがサーバー上でもrootとして書き込めるので、クライアントを1台乗っ取られると共有の全ファイルが書き換えられます。exports(5)が「主にディスクレスクライアント向け」と説明しているとおり、使うのはサーバーと同じ管理者が持つ限られたホストだけにします。root_squash が匿名IDへ写像するのはUID 0とGID 0で、sec=sys では他のUIDを名乗ることは防げない点も押さえておきます。共有全体を1つのユーザーに揃えたいときは all_squash と anonuid/anongid を使います。
sync と async の書き込み性能の差
async は、サーバーがディスクへ書き終える前にクライアントへ完了を返すオプションです。速くなる代わりに、サーバーが落ちると完了を返したはずのデータが失われます。同じVM内のループバックで、v4.2のマウント先に2バイトのファイルを2,000個作成し、最後のsyncコマンドの完了までを2回ずつ測りました。sync、async、sync、asyncの順に実行した参考測定で、ストレージやキャッシュの条件を統制した性能比較ではありません。
| export | 小ファイル2,000個 | 512MiB(fsync付きdd) |
|---|---|---|
| sync(1回目/2回目) | 4.96秒/5.17秒 | 0.99秒/1.01秒 |
| async(1回目/2回目) | 2.30秒/1.95秒 | 0.76秒/0.64秒 |
小ファイル作成の平均所要時間はsyncが5.065秒、asyncが2.125秒で、asyncはsyncの約42%の時間で完了しました。512MiBの連続書き込みでは差が縮みました。物理ネットワークを経由しないループバックでの参考値で、ディスク同期の待ち時間を個別に測った結果ではありません。ビルドの中間ファイルのように消えても作り直せるデータならasyncを選ぶ余地があり、業務データやデータベースのファイルはsyncのままにします。共有元のディスク障害には、RAIDの構成と冗長化設計で別に備えます。
NFSとSMB(Samba)の違い:対象OSと権限管理で選び分ける
SMB(Server Message Block)はWindowsが標準で使うファイル共有プロトコルで、SambaはそのSMBをLinux/Unixで提供するソフトウェアです。NFSとSMBはどちらもファイル共有ですが、権限の考え方が違います。
| 観点 | NFS | SMB(Samba) |
|---|---|---|
| 標準のクライアント | Linux/Unix | Windows・macOS |
| ユーザーの識別 | UID/GID(v4はuser@domain) | ユーザー名とパスワード・AD |
| 使うポート | 2049(v3は111ほか) | 445 |
| 向く用途 | サーバー間の共有・コンテナの永続ボリューム | 端末から使う部署フォルダ |
同じストレージをLinuxにはNFS、WindowsにはSMBで見せる併設もできますが、両方から同じファイルを書く場合は、サーバー実装と設定によるロックの連携およびキャッシュの整合性を確認する必要があります。Sambaの構築とActive Directory連携はSambaとは|SMBのLinux実装の仕組みとNFSとの使い分けで解説しています。
NFSの採用・見送り条件とクラウドのマネージドNFSの対応版
NFSが向くのは、UID/GIDを揃えられるLinuxサーバー群が同じファイルを共有する閉じたネットワークです。Webサーバーのアップロード領域、バッチの入出力、コンテナや仮想マシンの永続ボリュームが典型です。
見送るべきなのは次の場面です。Windows端末が主体の共有は、前述のとおり標準クライアントがv3止まりなのでSMBにします。インターネット越しにNFSv3をそのまま公開するのは、ポート開放の数と sec=sys の弱さの両方で避けます。拠点間でどうしても使うなら、v4.2+Kerberos(krb5p)かVPNの中に閉じます。数億個のファイルをHTTPで配る用途は、ファイル共有ではなくオブジェクトストレージの領分です。
クラウドでは、NFSサーバーを自前で立てずにマネージドサービスを使う選択肢があります。対応する版は各社で違い、v4.2を前提にした設定はそのまま持ち込めません。
| サービス | 対応するNFSの版 |
|---|---|
| Amazon EFS | v4.0・v4.1(4.1を推奨) |
| Azure Files(NFS共有) | v4.1 |
| Google Cloud Filestore | v3(全階層)・v4.1(Zonal・Regional・Enterprise) |
EFSのマウント手順は nfsvers=4.1 を推奨し、nconnect には対応していません。fstabの例は nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,_netdev です。Azure Filesは計画ガイドでNFS 4.1、Filestoreは対応プロトコルのページで階層ごとの版を示しています。AWSのEFSの料金とマウント手順はAmazon EFSとは?S3・EBS・FSxとの違いで、オンプレのNFSクライアントからS3へつなぐ構成はAWS Storage Gatewayの使い分けで扱っています。オンプレのNFSからクラウドへの移行や、NFS/SMB混在環境の設計は、AWS・Google Cloud・Azureのインフラ構築支援で承っています。
NFS(Network File System)に関するよくある質問
NFSが使うポート番号は何番ですか?
NFS本体はTCP 2049番で、NFSv4.1以降ならこの1つで済みます。NFSv3はこれに加えてrpcbindの111番と、起動のたびに変わるmountd・statd・lockdのポートが要るため、nfs.conf とsysctlで固定してから開けます。
NFSのバージョンはいくつありますか?
現在使われているのはNFSv3(RFC 1813)とNFSv4の3つのマイナー版、v4.0(RFC 7530)・v4.1(RFC 8881)・v4.2(RFC 7862)です。NFSv2(RFC 1094)は古い版で、RHEL 9はクライアントもサーバーもNFSv2に対応していません。Linuxのクライアントは指定がなければ4.2から順に交渉します。
NFSとSMBはどちらが速いですか?
プロトコル名だけでは決まりません。Linux同士ではNFSが選択肢になり、Windows端末からの共有では標準のSMBが選択肢になります。性能の優劣は、同じ環境と処理内容で比較して判断します。速さを左右するのは、syncとasync、rsize/wsize、ネットワークの遅延、ファイルの大きさと数です。今回のループバック測定では、小ファイル2,000個の作成時間はasync設定でsync設定の半分未満でしたが、改善幅は環境と処理内容に依存します。
NFSはWindowsから使えますか?
使えます。Windowsの「NFS用クライアント」機能を有効にすれば、Linuxの共有をマウントできます。ただし対応するのはNFSv2とv3だけなので、サーバー側でv3を有効にしておく必要があります。UID/GIDの対応付けも要るため、Windows端末が主体ならSMBを選ぶほうが運用は簡単です。
exportsの設定を変えたらNFSサーバーの再起動は必要ですか?
不要です。sudo exportfs -ra で /etc/exports を読み直せば反映されます。ただし /etc/nfs.conf の版やポートの設定を変えたときは、systemctl restart nfs-server が要ります。マウント済みのクライアントは、パスや権限の変更によっては再マウントが必要です。