Top>Linux>サーバー>NFS

機能名
NFS(ネットワークファイルシステム)

説明
外部端末のディスクをローカルマシーンのディスクとして利用する機能。
Windowsでいうところのネットワークドライブのような機能を提供する。
WindowsからでもNFSクライアントとして動作可能なようだがここでの説明は省略する。
必ずネットワーク通信が発生するので、頻繁にアクセスが発生するような利用には不向きかと思われる。
バックアップファイルの保存などには適していいるかと思われる。
ファイバーチャネルなどの専用の高速ネットワークで接続されている場合はDBなどの共有ディスクとしての利用も可能かもしれない。

環境
NFSサーバ端末
ホスト名:sv052
IPアドレス:192.168.1.52
OS:CentOS 7.9
公開ディレクトリ:/opt/share

NFSクライアント端末
ホスト名:sv053
IPアドレス:192.168.1.53
OS:CentOS 7.9
マウントポイント:/opt/share

1.サーバー側の設定
1.1.NFSが利用可能か確認する。
次のコマンドでパッケージがインストールされているか確認する。
インストールされている場合はパッケージが表示される。
[root@sv052 ~]# rpm -qa | grep nfs
nfs-utils-1.3.0-0.68.el7.2.x86_64
nfs4-acl-tools-0.3.3-21.el7.x86_64
libnfsidmap-0.25-19.el7.x86_64
[root@sv052 ~]#

インストールされていない場合はパッケージをインストールする。
[root@sv052 ~]# yum install nfs-utils

1.2.nfsサービスを開始する。
下記のコマンドでサービスを起動する。
[root@sv052 ~]# systemctl start nfs

サービスが起動しているか確認する。
[root@sv052 ~]# systemctl status nfs>

サーバー起動時にサービスも起動するように設定する。
[root@sv052 ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@sv052 ~]#

サーバー起動時にサービスも起動する設定となっているか確認する。
[root@sv052 ~]# systemctl is-enabled nfs
enabled
[root@sv052 ~]#

1.3.公開するディレクトリを準備する。
ここでは /opt/share ディレクトリを公開するものとする。対象ディレクトリを作成する。
[root@sv052 ~]# mkdir /opt/share

パーミッションを設定する。
クライアント側で所有者以外のユーザにディレクトリ操作、ファイルの読み書きを許可するためここではパーミッションとして777を設定する。 なお、ここで設定するパーミッションはそのままクライアント側へ反映される。
[root@sv052 ~]# chmod 777 /opt/share

また、公開確認用にテキストファイル(test.txt)を作成する。
[root@sv052 ~]# echo test > /opt/share/test.txt

1.4.公開設定を行う。
NFS の設定ファイルに公開情報を記載する。
設定ファイル:/etc/exports
書式:<ディレクトリ> <ホスト1>(<オプション1>) <ホスト2>(<オプション2>)...
・<ディレクトリ>:公開対象のディレクトリ。
・<ホスト>:公開先(クライアント)のホスト名、IPアドレス、ネットワークアドレス、ネットグループ名(@mynet など)。
・<オプション>:下記の表のエクスポートオプションを指定する。複数オプションがある場合はカンマ区切りで指定する。

ここでは192.168.1.53のホストからの読み書きを許可するため /etc/exports に下記の内容を設定する。
/opt/share 192.168.1.53(rw)

ファイル属性に関するオプション
オプション 機能 デフォルト
rw 読み書きを許可する。 -
ro 読み取り専用とする。
secure NFSクライアントから受け付けるポート番号を1024未満に制限する。
sync 書き込まれたファイルを直ちにディスクに保存する。 -
wdelay 複数の書込み処理を一回で書き込む操作を有効にする。
no_wdelay 複数の書込み処理を一回で書き込む操作を無効にする。 -
hide 未調査。
nohide 未調査。 -
subtree_check 未調査。 -
no_subtree_check 未調査。 -
noaccess 指定したディレクトリにクライアントからアクセスできなくする。 -
link_relative 絶対パスのシンボリックリンクを相対パスのリンクに変換する。 -
link_absolute シンボリックリンクの変換を行わない。

ユーザ属性に関するオプション
オプション 機能 デフォルト
root_squash rootのリクエストを匿名アカウントの権限で実行する。root権限を無効にする。
no_root_squash ルート権限を有効にする。 -
all_squash すべてのユーザIDとグループIDを匿名アカウントの権限に変換する。 -
squash_uids 指定されたユーザIDを匿名アカウントの権限に変換する。-によって範囲指定が可能となっている。
(例:squash_uids=0-15,20,100-200)
-
squash_gids 指定されたグループIDを匿名アカウントの権限に変換する。 -
no_all_squash ユーザID、グループIDの変換を行わない。
map_daemon 動的にユーザID、グループIDを変換する。 -
map_static 静的にユーザID、グループIDを変換する。ユーザID、グループIDの変換ファイルを指定する。
(例:map_static=/etc/nfs/convert.map)
-
map_identify ユーザID、グループIDを変換しない。
anonuid 匿名アカウントのユーザIDを指定する。 nobody
anongid 匿名アカウントのグループIDを指定する。 nobody
sec NFS接続の認証時に使用するセキュリティのタイプを指定する。(sys,krb5,krb5i)
sec=sys:ローカルのLinux ユーザID、グループIDを使用する。
sec=krb5:ユーザ認証にKerberos V5を利用する。
sec=krb5i:ユーザ認証にKerberos V5を利用しトラフィックの暗号化を行う。
sys

1.5.設定を有効にする。
下記のコマンドで設定を反映する。
[root@sv052 ~]# exportfs -a

反映された内容を確認する。
[root@sv052 ~]# exportfs -v
/opt/share 192.168.1.53(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
[root@sv052 ~]#

1.6.その他-公開情報を削除する。
公開情報を削除する場合は下記のコマンドで公開情報を削除する。
書式:exportfs -u <ホスト>:<公開ディレクトリ>
※このコマンドで削除しても /etc/exports ファイルには反映されない。

[root@sv052 ~]# exportfs -u 192.168.1.53:/opt/share
[root@sv052 ~]# exportfs -v
[root@sv052 ~]#

1.7.その他-NFSマウント状況を確認する。
マウントしているホストを表示する場合は次のコマンドを使用する。
[root@sv052 ~]# showmount

マウントされているディレクトリを表示する場合は次のコマンドを使用する。
[root@sv052 ~]# showmount -d

マウントしているホストとマウントされているディレクトリの両方を表示する場合は次のコマンドを使用する。
[root@sv052 ~]# showmount -a

2.クライアント側の設定
2.1.マウントポイントを作成する。
ここでは (sv052)192.168.1.52の/opt/share ディレクトリをローカルの/opt/share ディレクトリにマウントする。
そのためローカルに /opt/share ディレクトリを作成する。
※作成したディレクトリのパーミッションはマウント時にサーバー側で設定されているパーミッションに変更される。
[root@sv053 ~]# mkdir /opt/share

2.2.手動でマウントする場合。
手動でマウントする場合は mount コマンドを利用する。
書式:mount -t nfs <公開ホスト>:<公開ホストのディレクトリ> <マウントポイント>

ここでは (sv052)192.168.1.52の/opt/share ディレクトリをローカルの/opt/share ディレクトリにマウントする。
[root@sv053 ~]# mount -t nfs 192.168.1.52:/opt/share /opt/share
[root@sv053 ~]# ls /opt/share/
test.txt
[root@sv053 ~]#

2.3.クライアント起動時にマウントする場合。
起動時に自動マウントする場合は /etc/fstab ファイルにマウント情報を記載する。
書式:<公開ホスト>:<公開ホストのディレクトリ> <マウントポイント> nfs <オプション> 0 0

マウントオプション
オプション 機能
rsize=n NFSサーバからの読み込み時に使用するバッファサイズ。 n(バイト) で指定する。
デフォルトは1024バイト。
wsize=n NFSサーバへの書き込み時に使用するバッファサイズ。 n(バイト) で指定する。
デフォルトは1024バイト。
soft NFSのファイル操作がタイムアウトとなった場合にI/Oエラーを返す。
hard NFSのファイル操作がタイムアウトとなった場合もファイル操作を無限に繰り返す。
この時プロセスは中断されないが、復旧したときにプロセスを継続できる。(デフォルト)
intr オプションにhardが指定されていてタイムアウトになった場合、シグナルによるファイル操作の
中断を許可する。

ここでは (sv052)192.168.1.52の/opt/share ディレクトリをローカルの/opt/share ディレクトリにマウントする。
記載内容は次のとおりとなる。
192.168.1.52:/opt/share    /opt/share    nfs    soft    0  0
設定後サーバーを再起動しマウントされるか確認する。
また、ファイルの読み書き、ディレクトリの作成削除などが可能か確認する。

2.4.マウントを解除(アンマウント)する場合。
マウントを解除する場合は umount コマンドを利用する。
書式:umount <マウントポイント>

[root@sv053 ~]# umount /opt/share

3.その他の事項、留意事項等
3.1.ユーザIDとグループIDについて。
Linuxではユーザの識別をユーザID,グループIDで行っているが、端末間でユーザを作成する順番がことなるとそれらIDの整合性が合わなくなるので注意すること。
例えばサーバ側でuser01というユーザを作成し、クライアント側でuser01を作成せずにuser02を作成すると、user02が作成したファイルをサーバー側でみるとuser01が作成したように見えてしまう。

3.2.マウント障害について。
NFSクライアントが起動時にNFSマウントを行うようになっている場合。NFSサーバー側に障害が発生した場合に、設定によってはクライアント側の起動に時間がかかる、もしくは起動しないということが起こりえるので、その点も十分留意して設計、テストを行うこと。

3.3.シンボリックリンクについて。
NFSマウントするディレクトリ内にシンボリックリンクがある場合は、リンク先が実際はどこになるのかよく留意すること。
デフォルトの設定ではリンク先が絶対パスから相対パスに変換されない。

3.4.再帰的マウント
NFSマウントするディレクトリ内のディレクトリを再帰的に別のクライアントへエクスポートするような場合は、デッドロックによって関連する端末全体が起動しないということも発生しかねない。
このような構成は極力避けることが望ましいように思われる。

3.5.オートマウントについて。
オートマウントという機能があるがここでの説明は省略する。

最終更新日:2022/02/09

- Published By MINDKERNEL.COM -