NFS

  • 餅は餅屋
    • ファイルはファイルサーバに
    • 処理はwebサーバに

環境

  • ファイルサーバ(サーバ) : Katae.JamFunk.jp
  • webサーバ(クライアント) : Hibaru.JamFunk.jp
    • 共にTurbolinux 10 server

NFS 立ち上げ

  • サービス許可(サーバ側)
    • vi /etc/hosts.allow
      # NFS
      portmap : 172.16.0.0/255.255.0.0
      lockd   : 172.16.0.0/255.255.0.0
      mountd  : 172.16.0.0/255.255.0.0
      rquotad : 172.16.0.0/255.255.0.0
      statd   : 172.16.0.0/255.255.0.0
      • 最近のディストリ(CentOSとか)は書かなくても動いた。
      • TLは書かないと動かなかった。
    • vi /etc/exports
      /home/namazu
        (client_address)/255.255.255.255(rw,anonuid=(namazuUID),anongid=(namazuGID))
      /home 172.16.0.0/255.255.0.0(rw,no_root_squash,async)
      • /home : 公開するディレクトリ
      • 172.16.0.0/255.255.0.0 : アクセスを許可するIPアドレス/マスク
      • rw : 読み書き可能
      • (namazuUID) (namazuGID) はサーバ側のディレクトリ持ち主の UID, GID
      • これを設定すればクライアントは全員その UID, GID の権限を持つ。
      • #ここから ( ) 内のオプション
      • ro : 読み出し専用(default)
      • rw : 読み書き両方
      • no_root_squash : クライアントのユーザ名そのままでアクセスできる
        デフォルトでは全てのユーザが nobody になる。
      • sync: NFS が書き込み処理をファイルシステムに渡した段階で、クライアントに書き込み完了通知を行う。
        デフォルトでは async(書き込みが実際に完了した時点で完了通知)
      • 書き換えたらexportsfsしましょう。
        exportfs -r
      • 確認
        cat /proc/fs/nfs/exports 
      • マウント状況を確認するには
        showmount -e
  • サービス許可(クライアント側)
    • vi /etc/hosts.allow
      portmap: localhost
      lockd: localhost
      mountd: localhost
      rquotad: localhost
      statd: localhost
      • 書かなくても良いと思うけどね。
    • vi /etc/exports
      (改行1つでも入れておく)
      • なぜか NFS デーモンが起動しなかったが、改行を入れたら起動した。(TL10s,TL11s)
  • サービスの起動(両方)
    • /etc/init.d/portmap start
    • /etc/init.d/nfslock start
    • /etc/init.d/nfs start
      • 順番があるみたい
  • マウント(クライアント側)
    • mount -t nfs 172.16.0.2:/home /home -o rw,rsize=1024,wsize=1024,hard,intr

起動時に nfs をマウントする

  • 上の許可したサービスに加えて以下のサービスを自動起動
    • netfs
  • /etc/fstabにマウントを定義
    172.16.0.2:/home  /home  nfs  rw,auto,bg,rsize=1024,wsize=1024,hard,intr 0 0
    • rsize=(num),wsize=(num) : バッファサイズ
      デフォルトは512bytes。倍々で増やしながらddでベンチでもしてみると良い。
    • hard,intr : NFSが落ちると固まり、復活すると再開する。
      intrで固まったプロセスをkillできるようにする。
      逆のオプションにsoftがあるが、壊れたデータを量産するのでおすすめできない。
    • bg : マウント失敗してもマウントを繰り返す。

iptablesなどのためにポート番号を固定する

  • NFS本体はポート番号が固定されているが、関連するいくつかのサービスがポートマッパーを使って動的なポートに割り当てられている。
    • iptablesできない。。。
  • ポート番号を固定する
    • vi /etc/sysconfig/nfs
      • 以下の行があるので、コメントを外す
        RQUOTAD="/usr/sbin/rpc.rquotad"
        RQUOTAD_PORT=875
        LOCKD_TCPPORT=32803
        LOCKD_UDPPORT=32769
        MOUNTD_PORT=892
        STATD_PORT=662
    • /etc/init.d/nfslock stop
    • /etc/init.d/nfs restart
    • /etc/init.d/nfslock start
  • もしnfsのrestartに失敗するときは
    • 他のプロセスがポートを使っているかも
      • サーバ再起動とか lsof -i:(ポート番号) とかで調べてみる

NFSv4

  • mount -t nfs4または -o nfsvers=4
    • サーバ側のexportのオプションにfsid=0を追加
    • 性能はあまり変わらない模様