目次

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-utilsinstalledになっていればOK
baseなどになっている場合はインストールを指示する。

# yum -y install nfs-utils*

サーバの設定

  1. NFSで公開するディレクトリを作成する
    # cd /
    # mkdir nfs
  2. 公開の設定を行う
    # vi /etc/exports
     /nfs     *(rw,no_root_squash,sync)
    • /etc/exportsでNFSサーバでの公開ルールを設定する。
      • rwは読み書き許可を示す。読み込みのみでのアクセスを許可する場合はroとする。
      • no_root_squashはNFSクライアントが公開ディレクトリに対してroot権限にてアクセスできるようにする為のオプション。指定がなければnobodyなどにマッピングされる。
      1. syncは遅延書き込みの拒否を指定する。パフォーマンスは落ちる。asyncにすると遅延書き込みが有効になり、パフォーマンスは向上するが、nfsサーバを停止した際にアクセスされていたデータは欠損する恐れがある。
  3. サーバを起動する
    CentOS 6.xの場合
    # /etc/rc.d/init.d/nfs start
    CentOS 7.xの場合
    # systemctl start rpcbind nfs-server
  4. 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

補足-ファイルシステム毎のエクスポート可否

参考 - Linux NFS Overview, FAQ and HOWTO Documents

エクスポートできるローカルファイルシステムは?

気をつけるべきローカルファイルシステムは?

これらは多少マイナーな挙動があるとかなんとかゴニョゴニョ書かれていた。
英語ドキュメントから読んだので、あやふやですが。
ちゃんとテストしてから使おう。

エクスポートできない、または難しいローカルファイルシステムは?

恒久的なinode番号を提供する能力を持っていないファイルシステム等はエクスポートできないとかなんとか。

tmpfsをNFSでエクスポートする方法

通常、上にもあるように、tmpfsはNFSサーバでエクスポートできない(一見できているようには見えるが、NFSクライアントからアクセスすると拒否される)が、次に示す方法で擬似的にエクスポートできる。

  1. tmpfsの領域を作る。または既にあるtmpfsの領域を使う。
    (CentOSの場合は、/dev/shmにtmpfsの領域がマウントされている。本手順でもここを使う事とする。)
  2. ddコマンドで任意のサイズのファイルを作成する。
    下の例は1GBの領域を作成する場合。
    # dd if=/dev/zero of=/dev/shm/export bs=1M count=1000
  3. ddコマンドで作成したファイル上にファイルシステムを構成する
    下の例はext3で構成する場合。
    # mkfs.ext3 /dev/shm/export
  4. 作成したファイルシステムを任意の場所にマウントする。
    # mount -o loop /dev/shm/export /mnt
  5. 上でマウントした場所を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