====== CentOS-NFSサーバ設定 ======
LinuxではおなじみのNFS(Network File System)サーバの構築方法について
===== サーバのインストール =====
まずはNFSサーバ(NFSD)がインストールされているか、確認する
# yum list | grep nfs-utils
nfs-utils.i386 1:1.0.9-47.el5_5 installed
nfs-utils-lib.i386 1.0.8-7.6.el5 installed
・・・以下省略・・・
//nfs-utils//が//installed//になっていればOK\\
//base//などになっている場合はインストールを指示する。
# yum -y install nfs-utils*
===== サーバの設定 =====
- NFSで公開するディレクトリを作成する
# cd /
# mkdir nfs
- 公開の設定を行う
# vi /etc/exports
/nfs *(rw,no_root_squash,sync)
* /etc/exportsでNFSサーバでの公開ルールを設定する。
* **rw**は読み書き許可を示す。読み込みのみでのアクセスを許可する場合は**ro**とする。
* **no_root_squash**はNFSクライアントが公開ディレクトリに対してroot権限にてアクセスできるようにする為のオプション。指定がなければnobodyなどにマッピングされる。
- **sync**は遅延書き込みの拒否を指定する。パフォーマンスは落ちる。**async**にすると遅延書き込みが有効になり、パフォーマンスは向上するが、nfsサーバを停止した際にアクセスされていたデータは欠損する恐れがある。
- サーバを起動する
CentOS 6.xの場合
# /etc/rc.d/init.d/nfs start
CentOS 7.xの場合
# systemctl start rpcbind nfs-server
- OS起動時に自動起動するようにする
CentOS 6.xの場合
# chkconfig --list nfs
nfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
# chkconfig nfs on
# chkconfig --list nfs
nfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off
CentOS 7.xの場合
# systemctl enable rpcbind nfs-server
==== 補足-ファイルシステム毎のエクスポート可否 ====
[[http://nfs.sourceforge.net/#faq_c6|参考 - Linux NFS Overview, FAQ and HOWTO Documents]]
==== エクスポートできるローカルファイルシステムは? ====
* ext2
* ext3
* ext4
* JFS
* ReiserFS
* XFS
==== 気をつけるべきローカルファイルシステムは? ====
* iso9660
* NTFS
* Reiser4
* UDF
これらは多少マイナーな挙動があるとかなんとかゴニョゴニョ書かれていた。\\
英語ドキュメントから読んだので、あやふやですが。\\
ちゃんとテストしてから使おう。
==== エクスポートできない、または難しいローカルファイルシステムは? ====
* procfs
* sysfs
* tmpfs
* FAT
恒久的なinode番号を提供する能力を持っていないファイルシステム等はエクスポートできないとかなんとか。
==== tmpfsをNFSでエクスポートする方法 ====
通常、上にもあるように、tmpfsはNFSサーバでエクスポートできない(一見できているようには見えるが、NFSクライアントからアクセスすると拒否される)が、次に示す方法で擬似的にエクスポートできる。\\
- tmpfsの領域を作る。または既にあるtmpfsの領域を使う。\\ (CentOSの場合は、/dev/shmにtmpfsの領域がマウントされている。本手順でもここを使う事とする。)
- ddコマンドで任意のサイズのファイルを作成する。\\ 下の例は1GBの領域を作成する場合。
# dd if=/dev/zero of=/dev/shm/export bs=1M count=1000
- ddコマンドで作成したファイル上にファイルシステムを構成する\\ 下の例はext3で構成する場合。
# mkfs.ext3 /dev/shm/export
- 作成したファイルシステムを任意の場所にマウントする。
# mount -o loop /dev/shm/export /mnt
- 上でマウントした場所をNFSでエクスポートする
と、簡単に書くとこんな感じ。\\
とりあえず、tmpfsで作成した領域上にブロックデバイスを作成し、そのブロックデバイスをマウントした上でNFSに公開させる。という形です。\\
やる意味としては、tmpfsが物理メモリ内にちゃんと収まるのであれば、パフォーマンスが上がるかも?って事になりますが、実際パフォーマンスの計測は行なっていませんので、なんとも言えません。\\
さらに言うと、tmpfs上にある以上、サーバを再起動するとデータは消えてしまいますので、恒常的に利用する事は出来ません。\\
OSの起動時、シャットダウン時に、それぞれ安全に利用できるようにいろいろ仕込んでやる必要がありそうです。
===== 接続クライアントの確認 =====
NFSの領域をマウントした時、確認するなら**mount**コマンドで…というのはよく見かけるが、サーバ側で「どこからマウントされているか」を確認するには意外に見かけない。\\
サーバ側からの確認方法は大きく2つ。\\
==== showmount ====
**showmount**コマンドで接続してきているクライアントの一覧が見れる。
# showmount
Hosts on nfssrv.nfsdomain:
192.168.1.242
※ただし、これはクライアント側の切断の仕方がマズいと延々と情報が残る為、精度に難がある。
==== netstat/ss ====
**netstat**(RHEL/CentOS 6.x)や**ss**(RHEL/CentOS 7.x以降)コマンドでNFS用ポートの通信状況を確認する方法
# ss -all | grep -i estab | grep nfs
tcp ESTAB 704 1860856 192.168.1.250:nfs 192.168.1.242:740