はじめに
LPIC202 のトピック 209「ファイル共有」より、NFS サーバの設定についての学習メモをまとめる。
シラバスは公式サイトを参照。
そもそも NFS って?
NFS(Network File System)。ネットワーク経由でやり取りするファイルシステム。
似たような具体例は「Google ドライブ(パソコン版)をドライブとしてマウントした状態」
(普段のフォルダと同じように開けるけど、中身は手元じゃなくクラウドにある。)
- Linux/Unix 同士でのやり取りを想定。
- RPC(Remote Procedure Call)をベースとしている。
- LPIC202 では NFSv3 の設定が中心。NFSv4 は概要を理解するレベルで OK。
RPC とは
Remote(遠隔の)Procedure(手続き)Call(呼び出し)。
遠くのコンピュータにある “関数(手続き)” を、まるで手元の関数みたいに呼び出す仕組み。
プログラムで result = add(2, 3) と書くと、計算は同じ端末の中で行われる。
RPC の発想は、この add() の中身が実は別のサーバにあって、ネットワーク越しに実行される、というもの。
なお rpcinfo コマンドで稼働している RPC サービスを確認できる。
NFS 確認系コマンド 対応表
| コマンド | 実行する側 | 仕組み | 何がわかるか |
|---|---|---|---|
exportfs(または -v) | サーバ | 自分のエクスポートテーブルを直接参照 | 自サーバの公開設定・状態 |
showmount -e [host] | 任意(主にクライアント) | 対象の rpc.mountd に問い合わせ | サーバの公開一覧(エクスポート) |
showmount [host](オプションなし) | 任意 | 同上 | マウント中のクライアント名一覧 |
showmount -a [host] | 任意 | 同上 | クライアント名:ディレクトリのペア |
showmount -d [host] | 任意 | 同上 | マウントされているディレクトリ一覧 |
exportfs の操作系オプション
| オプション | 動作 |
|---|---|
exportfs -a | /etc/exports の内容を全て公開に反映 |
exportfs -r | /etc/exports を再読み込みして再エクスポート |
exportfs -u | 指定した公開を解除(unexport) |
exportfs -v | 詳細表示(現在の公開状態の確認) |
/etc/exports
/etc/exports とは、サーバ側で「このディレクトリを公開(export)しますよ」と宣言するファイル。
/etc/exports の書式
# 基本構文
共有ディレクトリ クライアント(オプション,オプション,...)
# 具体例
/home 192.168.1.0/24(rw,sync,root_squash)
/public *(ro,all_squash,anonuid=65534,anongid=65534)
/data host1.example.com(rw) host2.example.com(ro)
/etc/exports のオプション
| 分類 | オプション | 意味 | デフォルト |
|---|---|---|---|
| アクセス権限 | rw / ro | 読み書き可 / 読み取り専用 | ro |
| 書き込み同期 | sync / async | ディスク確定後に応答 / 即応答(高速だがリスク) | sync |
| ユーザ権限(squash) | root_squash | root だけを匿名ユーザに押しつぶす | ● デフォルト |
| ユーザ権限(squash) | no_root_squash | root を匿名化しない(クライアント root = サーバ root、危険) | |
| ユーザ権限(squash) | all_squash | 全ユーザを匿名ユーザに押しつぶす(公開共有向け) | |
| ユーザ権限(squash) | no_all_squash | root 以外は匿名化しない | ● デフォルト |
補足説明
- root権限でのアクセスを許可 = root を squash してはいけない =
no_root_squashが必要 - 疑似ルートを指定するオプションは
fsid=0fsidについて、0以外は単なる fsid 値の設定となるため注意
mount コマンド
NFS において、mount コマンドは公開されたものを自分のディレクトリツリーにつなぐ際に使用される。
上記の NFS の例えについて、
Google ドライブ(パソコン版)を「ドライブとして表示」に設定すると、エクスプローラーに G: ドライブが現れて、クラウド上のファイルを手元のフォルダみたいに開ける
と表現したが、あの “クラウドをドライブとして見せる” 作業が、NFS でいう mount。
mount コマンドの基本構文
mount [-t nfs] [-o マウントオプション] NFSサーバ名:エクスポートディレクトリ マウントポイント
NFS の mount オプション
| オプション | 意味 | 備考 |
|---|---|---|
hard | ハードマウント(応答まで無限にリトライ) | デフォルト。プロセスは固まるが安全 |
soft | ソフトマウント(一定回数で諦めてタイムアウト) | プロセスは固まらないが書き込み中は破損リスク |
retrans=n | ソフトマウント時のエラーを返すまでの再送回数 | timeo とセットで動作 |
timeo=n | 1回あたりのタイムアウト時間(デシ秒=1/10秒単位) | retrans の前提となる待ち時間 |
intr | ハードマウント時に割り込み(シグナル)を受け付ける | 新しいカーネル(2.6.25以降)では廃止・無視 |
nolock | ファイルロック(NLM)を使わない | 古いサーバやロック不要時 |
rsize=n | 読み取りのブロックサイズを指定(バイト単位) | 大きいとスループット向上。未指定で自動交渉 |
wsize=n | 書き込みのブロックサイズを指定(バイト単位) | 同上 |
書く場所: mount -o ... の後ろ、または /etc/fstab の4列目(オプション欄)。
NFSデーモン バージョン別早見表(v3 / v4)
デーモン対応表
| デーモン | 役割 | v3 | v4 | 配置 |
|---|---|---|---|---|
nfsd(rpc.nfsd) | 実際のファイルI/Oを処理(NFS本体) | 必要 | 必要 | サーバ |
rpcbind(portmap) | RPCサービスの場所案内(受付) | 必要 | 不要 | サーバ&クライアント |
rpc.mountd | マウント要求の許可判定(/etc/exports参照) | 必要 | 不要 | サーバ |
rpc.idmapd | 名前(user@domain)とUID/GIDの対応付け | 不要 | 必要 | サーバ&クライアント |
rpc.statd(NSM) | 再起動検知・ロック回復 | 必要 | 不要(統合) | サーバ&クライアント |
rpc.lockd(NLM) | ファイルロック管理 | 必要 | 不要(統合) | サーバ&クライアント |
v3 → v4 の構造的な違い(なぜデーモンが入れ替わるか)
- ポート集約: v3はRPCで動的ポートを使うため
rpcbindが必要。v4はポート2049に集約され、案内所(rpcbind)が不要になった。 - マウントの統合: v4はマウント処理をNFSプロトコル自体に統合したため、独立した
rpc.mountdが不要。 - ロックの統合: v4は
statd/lockdの機能もプロトコルに内蔵(ステートフル化)したため不要。 - 識別方式の変更: v3はUID/GIDの数字をそのまま使用。v4は
user@domainの名前ベースになり、対応付け用のrpc.idmapdが新たに必要。idmapdはサーバ・クライアント双方で同じDomain設定(/etc/idmapd.conf)が必須。
変更履歴
- 2026-06-22: LPIC202 209「NFSサーバの設定」の自習メモを整理。