PR

NFSプロトコルとは何か?初心者向けに1からわかりやすく解説

IT-Skills

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

まずは、NFSを「ネットワークの向こうにあるフォルダを、手元のフォルダのように見せる仕組み」と捉えてください。

ただし、「手元に見える」ことと「ローカルディスクと同じように動く」ことは別です。読み書きの裏では、NFSクライアント・ネットワーク・NFSサーバが連携しています。

このページで学べる内容
  • NFSサーバ・NFSクライアント・マウントの関係
  • アプリがNFS上のファイルを読むときの流れ
  • ローカルディスクと同じ感覚で設計してはいけない理由
スポンサーリンク

NFSは「別サーバのディレクトリを手元につなぐ」プロトコル

NFSそのものは、ストレージ製品やサーバの名前ではありません。コンピュータ同士がファイルを読み書きするための通信ルールです。

通信ルールという言葉がまだ曖昧な場合は、先にプロトコルとは何かを読むと、NFSの位置づけがつかみやすくなります。

NFSを使う場面には、主に次の2つが登場します。

役割 何をするか
NFSサーバ 自分が持つディレクトリを、他のコンピュータから使えるように公開する
NFSクライアント 公開されたディレクトリを受け取り、自分のファイルシステムへマウントする

正確には:NFSはIETFで仕様化された分散ファイルシステム用のプロトコルです。NFSv4.1の仕様には、ファイル操作だけでなく、ロック、状態管理、クライアント側キャッシュなども定義されています(RFC 8881)。

1枚で見る:NFS上のファイルを読む流れ

ここからは、Webアプリが画像ファイルを読む例で考えます。NFSサーバは /export/share を公開し、Webサーバはそれを /mnt/share にマウントしているとします。

アプリがクライアント側のマウント先を読み、NFSクライアントがネットワーク経由でNFSサーバへREAD要求を送り、実体ファイルのデータを受け取る流れ
NFSでは、クライアント側に見えるパスと、サーバ側にあるファイルの実体がネットワーク越しにつながります。

アプリが開くのは /mnt/share/logo.png です。しかし、実際のデータはNFSサーバ上の /export/share/logo.png にあります。

/mnt/share/logo.pngを読むと何が起きるか

  1. アプリがファイルを開く
    アプリは /mnt/share/logo.png を通常のファイルと同じ方法で開きます。アプリ側に「NFS専用の読み方」を書く必要はありません。
  2. OSがNFSのマウント先だと判断する
    クライアントOSは、/mnt/share がNFSでマウントされた場所だと把握しています。ここから先の処理をNFSクライアント機能へ渡します。
  3. NFSクライアントがサーバへ要求を送る
    NFSクライアントは、対象ファイルの検索や読み取りに必要な処理をNFSの要求へ変換し、ネットワーク越しに送ります。
  4. NFSサーバがデータを返す
    NFSサーバは公開ディレクトリ内のファイルを読み、結果をクライアントへ返します。アプリは返された内容を、通常のファイルデータとして受け取ります。

「ファイルを1回読んだら、必ずNFS通信も1回」とは限りません。NFSクライアントはデータや属性をキャッシュできるため、キャッシュから読める場合があります。反対に、ファイルを開くまでに複数のNFS操作が必要になる場合もあります。

マウントすると普通のフォルダとして扱える

マウントとは、別のファイルシステムを、手元のディレクトリツリーの一部へ接続することです。Linuxでは、概念的には次のようなコマンドでNFS共有をマウントします。

sudo mount -t nfs nfs.example.com:/export/share /mnt/share
部分 意味
nfs.example.com NFSサーバのホスト名
/export/share サーバ側で公開されているディレクトリ
/mnt/share クライアント側で見えるマウント先

マウント後は、lscp、アプリのファイル入出力などから /mnt/share を利用できます。この「要求する側」と「提供する側」の関係は、クライアントサーバシステムの具体例でもあります。

上のコマンドだけでNFS環境が完成するわけではありません。サーバ側の公開設定、ディレクトリの作成、名前解決、ネットワーク、ファイアウォール、権限などが事前に必要です。また、NFSのバージョンやOSによって指定するオプションが異なります。

「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サーバがディレクトリを公開し、NFSクライアントが利用する
  • マウント後は普通のパスに見えるが、ファイルの実体はサーバ側にある
  • 読み書きの裏では、クライアント・ネットワーク・サーバが連携する
  • 性能や障害は、ネットワークだけでなくサーバ処理・ストレージ・キャッシュまで分けて見る

最初に覚えるべき一文は、「NFSは、遠隔のファイルを手元のファイルのように見せる。ただし処理はネットワークの向こうまで続いている」です。

タイトルとURLをコピーしました