AlmaLinux 9でのNFSサーバーとクライアントの設定

はじめに
NFS(Network File System)は、リモートのディスクやディレクトリをローカルのファイルシステムのように扱えるネットワークプロトコルです。Sun Microsystemsが開発し、UNIX系の分散ファイル共有で広く使われる標準プロトコルになりました。中央サーバー上でデータを集約し、複数のクライアントがそのデータを共有・操作する用途でよく利用されます。
このガイドは次を扱います。
- AlmaLinux 9でのNFSサーバーのインストールと基本設定
- 共有ディレクトリの作成とエクスポート設定
- firewalldによるポート/サービスの開放
- クライアント側でのマウントと自動マウント設定(/etc/fstab)
- 権限・SELinux・パフォーマンス・トラブルシューティングの実務的ヒント
対象読者: Linux管理者、インフラエンジニア、中〜上級のシステム運用担当
重要: 本手順はテスト用途や社内ネットワーク向けの基本構成を想定しています。本番環境では追加の認証・暗号化・監査対策を検討してください。
前提条件
- AlmaLinux 9のサーバー(本例: ホスト名 almalinux9-server、IP 192.168.10.15)
- sudo権限を持つ非rootユーザー
- 1台以上のクライアント(RHEL系の任意のディストリビューション可)
NFSサーバーのインストール
NFSの実装はnfs-utilsパッケージで提供されます。サーバーとクライアントの両方にインストールしてください。
サーバーで以下を実行します。
sudo dnf install nfs-utils
idmapdのドメイン設定
NFSv4ではユーザー/グループ名のマッピングにidmapdが使われ、idmapd.confのDomainを正しく設定することが推奨されます。エディタでファイルを開き、DomainをFQDNまたはホスト名に設定します。
sudo nano /etc/idmapd.conf
ファイル内のDomainを編集します。
Domain = almalinux9-server
保存して終了します。
NFSサービスの起動と有効化
sudo systemctl start nfs-server
sudo systemctl enable nfs-server
sudo systemctl status nfs-server
サービスが正常に動作していることを確認してください。
共有ディレクトリの作成とエクスポート設定
まず共有用ディレクトリを作成し、適切な所有権とパーミッションを設定します。本例では/mnt/sharedと/mnt/backupを使用します。
sudo mkdir -p /mnt/shared /mnt/backup
sudo chown -R nobody:nobody /mnt/shared /mnt/backup
sudo chmod 775 /mnt/shared /mnt/backup
次にエクスポート設定ファイルを編集します。
sudo nano /etc/exports
この例では以下のようにエクスポートします。クライアントのアクセス元を限定し、必要なオプションを付与します。
/mnt/backup 192.168.10.21(rw,sync,no_subtree_check)
/home 192.168.10.21(rw,sync,no_root_squash,no_subtree_check)
/mnt/shared 192.168.10.0/24(rw,sync,no_subtree_check)
各オプションの意味(要点):
- rw: 読み書きを許可します。
- sync: データをディスクに同期してからクライアント要求を処理します(安全性優先、速度は低下)。
- no_subtree_check: サブツリー検査を無効化しパフォーマンスを改善します。
- no_root_squash: クライアントのrootがエクスポート先でroot権限を保持します。信頼できるクライアントにのみ設定してください。
設定後、NFSを再起動して反映します。
sudo systemctl restart nfs-server
sudo exportfs -v
exportfs -vでエクスポート状況を確認します。
firewalldによる保護とサービス開放
NFSを利用するクライアントがファイアウォールでブロックされないよう、必要なサービスを許可します。firewalldが動作していることを確認した上で以下を実行します。
sudo firewall-cmd --add-service={nfs,nfs3,mountd,rpc-bind} --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
出力を確認し、NFS関連サービスがゾーンに追加されていることを確認してください。
注意: 内部ネットワークだけに限定する場合はゾーンやリッチルールでアクセス元を限定してください。
クライアントの設定とマウント
クライアント側でもnfs-utilsをインストールします。
sudo dnf install nfs-utils
サーバーがエクスポートしている共有を確認します。
sudo showmount -e 192.168.10.15
期待する共有: /mnt/backup, /mnt/shared, /home
クライアント側でマウント先ディレクトリを作成します。
sudo mkdir -p /data /backup /shared
サーバー上のエクスポートをマウントします。
sudo mount 192.168.10.15:/mnt/backup /backup
sudo mount 192.168.10.15:/mnt/shared /shared
sudo mount 192.168.10.15:/home /data
マウント状況を確認します。
sudo df -h
クライアントからの書き込み確認
クライアント上でファイルを作成し、サーバー側にも反映されることを検証します。
echo "This file from client" > /backup/test-write1.txt
echo "This file from client" > /shared/test-write2.txt
echo "This file from client" > /data/alice/test-write3.txt
サーバー側で内容を確認します。
cat /mnt/backup/test-write1.txt
cat /mnt/shared/test-write2.txt
cat /home/alice/test-write3.txt
/etc/fstabでの自動マウント設定
再起動時に自動でマウントするにはクライアント側の/etc/fstabにエントリを追加します。まず既存のマウントを解除します。
sudo umount /data /backup /shared
sudo df -h
/etc/fstabを編集します。
sudo nano /etc/fstab
次のような行を追加します。マウントオプションはネットワークの安定性や用途に応じて調整してください。
192.168.10.15:/mnt/backup /backup nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
192.168.10.15:/mnt/shared /shared nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
192.168.10.15:/home /data nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
保存後、mount -aで検証します。
sudo mount -a
sudo df -h
運用時のセキュリティとSELinuxの留意点
- no_root_squashやrwの設定は最小権限の原則に従って限定的に使用してください。
- NFSv4はIDマッピングとより良い名前空間分離を提供しますが、認証や暗号化は別途検討が必要です。機密データを扱う場合はVPNやIPsec、stunnel/sshトンネルなどを検討してください。
- SELinuxが有効な環境では、エクスポート対象ディレクトリのコンテキストを確認し、必要ならばブール値やコンテキストを設定します。たとえばエクスポートするホームディレクトリに対して
sudo restorecon -R /home
必要に応じてSELinuxブールを調整します(環境に依存します)。
パフォーマンスとマウントオプションの選び方
- actimeo: 属性キャッシュの有効時間(秒)を決めます。短くすると整合性は上がるがネットワーク負荷が増える。
- rsize/wsize: 読み書きブロックサイズ(大きすぎるとネットワーク機器で断片化される可能性あり)。
- sync vs async: syncは安全だが遅い。バックアップや重要データはsync推奨。
- noatime: アクセス時間更新を抑制しI/Oを削減します。
パフォーマンス調整は実測を基に行ってください。
よくある問題とトラブルシューティング
マウント時にPermission deniedが出る
- /etc/exportsでアクセス元が許可されているか確認
- ディレクトリの所有者とパーミッションを確認
- SELinuxのログ(/var/log/audit/audit.log)を確認
mountがタイムアウトする/接続できない
- firewall-cmdで必要なサービスが開放されているか確認
- サーバー側でrpcbindやnfs-serverが稼働しているか確認
- ネットワークに不整合(DNSやルーティング、IPアドレス)をチェック
stale file handleエラー
- サーバー側でエクスポートやファイルシステムが変更された場合に発生することがあります。クライアントでumountして再マウント、場合によってはプロセスの再起動が必要です。
便利なデバッグコマンド
sudo journalctl -u nfs-server -b
sudo exportfs -v
sudo showmount -e <サーバーIP>
sudo rpcinfo -p <サーバーIP>
いつNFSを選ばないか(代替案)
- 高いレイテンシや不安定なネットワークがある場合: S3互換オブジェクトストレージや分散ファイルシステム(GlusterFS/CephFS)を検討
- 高度なアクセス制御や暗号化が必須のケース: SFTP、SMB over TLS、NFS over Kerberos(NFSv4 + sec=krb5)などの導入を検討
運用向けチェックリスト
管理者準備チェックリスト:
- nfs-utilsがサーバーとクライアントにインストール済み
- /etc/idmapd.confのDomainを設定
- /etc/exportsを最小権限で設定(必要なクライアントだけ許可)
- firewalldでnfs/nfs3/mountd/rpc-bindを許可
- SELinuxコンテキストと必要なブールを確認
- 自動マウント(/etc/fstab)を設定してmount -aで検証
- 定期的にexportfs -vを監視し変更を把握
クライアント利用者チェックリスト:
- マウントポイントのパーミッションを確認
- 書き込みテスト(小さなファイル)を実施
- アプリケーションのログやI/Oパターンを監視
プレイブック: 新しいエクスポートを追加する手順
- サーバーでディレクトリを作成し、パーミッションと所有者を設定
- /etc/exportsにエントリを追加
- sudo exportfs -r でエクスポートを再読み込み
- sudo systemctl restart nfs-server(必要に応じて)
- クライアント側で sudo showmount -e サーバーIP を実行して確認
- クライアントで sudo mount -a を実行して自動マウントを反映
受け入れ基準(Критерии приёмки の日本語版)
- サーバーは systemctl status nfs-server でアクティブ表示
- exportfs -v にて期待する共有が表示される
- クライアントで mount により共有がマウントされ、書き込み・読み取りが可能
- 再起動後も /etc/fstab により自動マウントされる
テストケース(簡易)
- TC1: クライアントからファイル作成 → サーバーで内容確認
- TC2: サーバーでファイル削除 → クライアントで削除反映の確認
- TC3: ネットワーク断をシミュレート → クライアントで再接続後の整合性確認
- TC4: exportを変更 → クライアントでumount/mount後の挙動確認
1行用語集
- NFS: ネットワーク上でファイルを共有するためのプロトコル
- export: サーバーが共有を公開する設定
- mount: クライアントが共有を取り付ける操作
- idmapd: ユーザー/グループ名マッピングを行うデーモン
役割別チェックリスト
システム管理者:
- /etc/exportsのバックアップ管理
- エクスポート変更時の稼働影響評価
- 監視とログの設定(NFS関連のエラー検出)
アプリケーション管理者:
- アプリのファイルI/Oパターンを把握し、NFSの遅延が影響しないか検証
- アクセス権とファイル所有の要件を提示
トラブル緊急時のロールバック手順
- 影響が出ている共有をクライアントでアンマウント
sudo umount /path
- サーバーで/etc/exportsを以前の状態に戻す(バックアップから復元)
- sudo exportfs -r を実行して再公開
- 必要ならnfs-serverを再起動
付録: 参考コマンドまとめ
sudo dnf install nfs-utils
sudo systemctl start|enable|status nfs-server
sudo nano /etc/idmapd.conf
sudo nano /etc/exports
sudo exportfs -v
sudo firewall-cmd --add-service={nfs,nfs3,mountd,rpc-bind} --permanent
sudo firewall-cmd --reload
sudo showmount -e
sudo mount :/export /mnt
sudo umount /mnt
sudo mount -a
sudo journalctl -u nfs-server -b
まとめ
このガイドではAlmaLinux 9でのNFSの基本的な導入から、共有の作成、ファイアウォール設定、クライアントでのマウント、/etc/fstabによる自動マウント、運用上の注意点、トラブルシューティングの手順を網羅しました。運用においては最小権限での公開、SELinuxやネットワーク設定の確認、パフォーマンス試験を行うことが重要です。
次のステップ: NFSv4でのKerberos認証(sec=krb5)や暗号化、監査ログの導入、バックアップ戦略の設計を検討してください。
重要: 本記事のコマンドや設定は環境によって調整が必要です。実運用に適用する前にテスト環境で必ず検証してください。