10.3. NFSサーバの構築

10.3.1. NFS

NFS(Network File System)はネットワークを介してファイルを共有する仕組み
Unix系OS同士のファイル共有にはNFSが使用される。

NFSサーバが公開したディレクトリはNFSクライアントがマウントすることでリモートファイルシステムをローカルファイルシステム同様に扱うことができる。
NFSサーバを実現するには以下の3つのサービスが必要となる。

サービスサーバクライアント説明
portmap必要必要RPCプログラム番号をTCP/IPポート番号に変換
nfsd必要不要ファイルシステムのエクスポート及びクライアント要求処理
mountd必要不要リモートファイルシステムのマウント/アンマウント

RPC(Remote Proceduce Call)はネットワーク上にあるリモートホストに機能を別のホストから使えるようにする仕組みのこと。
RPCサービスにはRPCプログラム番号が付けられている。対応表は/etc/rpcで確認可能。

RPCサービスが利用するTCP/UDPポートは動的に割り当てられるため、RPCクライアントの利用にはポート番号を確認する必要がある。
portmapはRPCプログラム番号とポート番号のマッピングを行うサービスとなる。

なおportmapはTCP Wrapprでアクセス制御することが可能。
NFSを利用する際の推奨設定(サービス提供範囲の限定)は以下のように行う。

portmap: 192.168.3.

NFSv3/NFSv4

NFSv4の特徴は以下の通り。

  • ポート番号が2049番固定
  • idimapdサービスによりUIDの考慮が不要
  • ルートディレクトリがエクスポートされているように見える

rpcinfoコマンド

RPCサービスの状況を確認するコマンド。

rpcinfo オプション [ホスト名]
オプション説明
-p指定したホストで動作するRPCサービス一覧の表示

10.3.2. NFSサーバの設定

NFSサーバで特定のディレクトリを公開することはエクスポートと呼ばれる。
エクスポートするディレクトリは/etc/exportsに記述する。

記述例は以下の通り。

/share      172.16.0.0/255.255.0.0(rw)
/public     *.local.jp(ro) local(rw,nor_root_squash)

また/etc/exportsのオプションは以下の通り。

オプション説明
ro読み取り専用でエクスポートする
rw読み取り/書き込み属性でエクスポート
no_root_squashrootアクセス時にroot権限で実行
root_squashrootアクセス時に匿名アカウント権限で実行(デフォルト設定)
all_squashすべてのアクセスを匿名アカウント権限で実行

NFSサーバの注意点としてUIDを統一するべき。(UNIXのUIDがそのままNFSサーバでも使用されるため) そうしないと別ユーザとして認識される場合がある。

exportsコマンド

現在のエクスポート状況の表示、/etc/exportsの変更を反映させるコマンド。

exports [オプション] [ホスト:パス]
オプション説明
-aすべてのディレクトリのエクスポート/アンエクスポート
-rすべてのディレクトリの再エクスポート
-Uアンエクスポート
-v詳細に表示

showmountコマンド

NFSサーバのディレクトリをマウントしているNFSクライアントを調べることができるコマンド。

showmount [オプション] [ホスト]
オプション説明
-aクライアントのホスト名とマウントしているディレクトリの表示
-e指定したホストでエクスポートしているディレクトリの表示

nfsstatコマンド

NFSの統計情報を表示するコマンド。

ntfsstat [オプション]
オプション説明
-sNFSサーバ側の統計のみを表示
-cNFSクライアント側の統計のみを表示
-nNFSの統計のみを表示
-rRPCの統計のみを表示
-o netネットワーク層の統計表示

10.3.3. NFSクライアントの設定

NFSを使いリモートファイルシステムをマウントするにはmountコマンドを使用する。
ファイルシステムタイプにはnfsを指定する。

mount -t nfs filerever:/public /mnt/nfs/public

またNFSをマウントする際のオプションは以下の通り。

オプション説明
bgマウント失敗時もバックグラウンドで試行し続ける
fgマウントをフォアグラウンドで行う
softソフトマウントを行う
hardハードマウントを行う
intrハードマウント時の割り込みを許可
retransソフトマウントの場合の再試行回数
rsize=バイト数読み取りのブロックサイズ
wsize=バイト数書き込みのブロックサイズ

ソフトマウントとハードマウントはNFSサーバがクラッシュしたり障害が起きた際のNFSサーバが応答がない場合の動作が異なる

  • ソフトマウント
    • NFSサーバが応答しない場合タイムアウトになる
  • ハードマウント
    • ハングアップしているように見える
    • 応答があるまで要求を再試行し続ける
    • これを設定する場合はinitrオプションも指定する必要ある

起動時に自動マウントするには/etc/fstabに追加しておく。

filesvr:/pub /mnt/nfs/pub nfs rw 0 0