NFS(Network File System)とは、別のコンピュータにあるディレクトリを、手元のコンピュータのファイルシステムへつないで使うためのプロトコルです。マウントした後は、アプリから普通のフォルダに見えますが、ファイルの実体はNFSサーバ側にあります。

まずは、NFSを「ネットワークの向こうにあるフォルダを、手元のフォルダのように見せる仕組み」と捉えてください。
ただし、「手元に見える」ことと「ローカルディスクと同じように動く」ことは別です。読み書きの裏では、NFSクライアント・ネットワーク・NFSサーバが連携しています。
NFSは「別サーバのディレクトリを手元につなぐ」プロトコル
NFSそのものは、ストレージ製品やサーバの名前ではありません。コンピュータ同士がファイルを読み書きするための通信ルールです。
通信ルールという言葉がまだ曖昧な場合は、先にプロトコルとは何かを読むと、NFSの位置づけがつかみやすくなります。
NFSを使う場面には、主に次の2つが登場します。
| 役割 | 何をするか |
|---|---|
| NFSサーバ | 自分が持つディレクトリを、他のコンピュータから使えるように公開する |
| NFSクライアント | 公開されたディレクトリを受け取り、自分のファイルシステムへマウントする |
1枚で見る:NFS上のファイルを読む流れ
ここからは、Webアプリが画像ファイルを読む例で考えます。NFSサーバは /export/share を公開し、Webサーバはそれを /mnt/share にマウントしているとします。

アプリが開くのは /mnt/share/logo.png です。しかし、実際のデータはNFSサーバ上の /export/share/logo.png にあります。
/mnt/share/logo.pngを読むと何が起きるか
- アプリがファイルを開く
アプリは/mnt/share/logo.pngを通常のファイルと同じ方法で開きます。アプリ側に「NFS専用の読み方」を書く必要はありません。 - OSがNFSのマウント先だと判断する
クライアントOSは、/mnt/shareがNFSでマウントされた場所だと把握しています。ここから先の処理をNFSクライアント機能へ渡します。 - NFSクライアントがサーバへ要求を送る
NFSクライアントは、対象ファイルの検索や読み取りに必要な処理をNFSの要求へ変換し、ネットワーク越しに送ります。 - NFSサーバがデータを返す
NFSサーバは公開ディレクトリ内のファイルを読み、結果をクライアントへ返します。アプリは返された内容を、通常のファイルデータとして受け取ります。
マウントすると普通のフォルダとして扱える
マウントとは、別のファイルシステムを、手元のディレクトリツリーの一部へ接続することです。Linuxでは、概念的には次のようなコマンドでNFS共有をマウントします。
sudo mount -t nfs nfs.example.com:/export/share /mnt/share
| 部分 | 意味 |
|---|---|
nfs.example.com |
NFSサーバのホスト名 |
/export/share |
サーバ側で公開されているディレクトリ |
/mnt/share |
クライアント側で見えるマウント先 |
マウント後は、ls、cp、アプリのファイル入出力などから /mnt/share を利用できます。この「要求する側」と「提供する側」の関係は、クライアントサーバシステムの具体例でもあります。
「NFS」という言葉が指すものを整理する
NFSの会話が分かりにくい理由は、プロトコル、サーバ、共有領域をまとめて「NFS」と呼ぶことがあるためです。
| 用語 | 正体 | 今回の例 |
|---|---|---|
| NFS | ファイル操作をやり取りするプロトコル | クライアントとサーバの通信ルール |
| NFSサーバ | NFSでディレクトリを公開する側 | nfs.example.com |
| NFSクライアント | NFS共有を利用する側 | Webアプリが動くサーバ |
| エクスポート | サーバが外部利用を許可した領域 | /export/share |
| マウントポイント | クライアント側で共有が見える場所 | /mnt/share |
| NAS | ネットワーク経由でストレージを提供する製品・仕組み | NFSを提供する装置になることがある |
つまり、NASがNFSを提供することはありますが、NASとNFSは同じ言葉ではありません。LinuxサーバがNFSサーバになる構成もあります。
ローカルディスクと同じに見えても、裏側は違う
NFSのマウント先は普通のディレクトリに見えます。しかし、設計や障害調査ではローカルディスクと区別する必要があります。
| 観点 | ローカルファイルシステム | NFS |
|---|---|---|
| ファイルの実体 | 基本的に同じコンピュータのストレージ | ネットワーク先のNFSサーバ |
| アプリからの見え方 | 通常のパス | マウント後は通常のパス |
| 処理に関わる主な要素 | OS、キャッシュ、ローカルストレージ | 左記に加えてNFSクライアント、ネットワーク、NFSサーバ |
| 性能を左右するもの | ストレージ、キャッシュ、I/O方式など | クライアント・ネットワーク・サーバ処理・サーバ側ストレージ・キャッシュなど |
| 障害時 | 主にそのコンピュータが影響を受ける | 共有経路やサーバが使えないと、複数クライアントが影響を受けることがある |
「NFSは必ず遅い」「ローカルディスクは必ず速い」とは断定できません。構成や負荷、キャッシュの効き方で結果は変わります。確実に言えるのは、NFSでは性能や可用性に関わる部品が増えることです。
NFSを使うときに確認したい4つの点
1. NFSのバージョンとマウントオプション
NFSv3とNFSv4では、利用する補助サービス、ロック、セキュリティ、ファイアウォール設計などに違いがあります。「NFSを使っている」だけで判断せず、実際のバージョンとオプションを確認します。
2. クライアント・ネットワーク・サーバを分けて見る
NFSの応答が遅いとき、原因がネットワークだけとは限りません。クライアント側の待ち、ネットワークの往復、NFSサーバの処理、サーバ側ストレージのI/Oを分けて考える必要があります。前提となる通信経路は、ネットワークとは何かで整理できます。
3. キャッシュと同時更新
NFSには、データや属性のキャッシュ、ファイルロックに関する仕組みがあります。複数クライアントが同じファイルを扱う場合は、「いつ更新が見えるべきか」「同時に書く可能性があるか」をアプリ側の要件と合わせて設計します。
4. 公開範囲・権限・認証
マウントできることと、すべてのファイルを自由に操作できることは同じではありません。サーバ側の公開設定、利用を許可するクライアント、ファイルの所有者・権限、認証方式を確認します。
LinuxでNFSマウントを見分ける
findmnt が利用できるLinux環境では、次のコマンドで現在のNFSマウントを絞り込めます。
findmnt -t nfs,nfs4
たとえば、次のように表示されたとします。
TARGET SOURCE FSTYPE OPTIONS
/mnt/share nfs.example.com:/export/share nfs4 rw,relatime,...
TARGET:クライアント側のマウント先SOURCE:NFSサーバと公開ディレクトリFSTYPE:NFSの種類OPTIONS:読み書きや通信に関するマウント設定
この対応を見れば、「アプリが見ているパスの実体はどこか」をたどれます。コマンド結果が空の場合は、少なくとも現在のマウント名前空間ではNFSマウントが見つかっていません。
まとめ:NFSは見た目と実体をネットワーク越しにつなぐ
NFSとは、別のコンピュータにあるディレクトリを、クライアントのファイルシステムへマウントして使うためのプロトコルです。
最初に覚えるべき一文は、「NFSは、遠隔のファイルを手元のファイルのように見せる。ただし処理はネットワークの向こうまで続いている」です。
