• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

nfs

date: 2020-06-15 excerpt: nfs

tag: nfs


nfs

nfs-kernel-serverのインストール

$ sudo apt install nfs-kernel-server

サーバ側の設定

/etc/default/nfs-kernel-serverのパラメータ設定

  • nfsd(サーバサイド)の設定
  • 起動時のスレッド数(プロセス数)が8個しかないので、増やす
# Number of servers to start up
# RPCNFSDCOUNT=8
RPCNFSDCOUNT=64

/etc/exportsの設定

  • 公開したいディレクトリ or ディスクをシェアする設定
    • rw
      • 読み込み許可
    • async
      • 非同期許可
    • no_wdelay
      • 書き込み遅延時の待ち時間を設けない
    • fsid=0
      • 疑似ルートとなるディレクトリ
    • crossmnt
      • マウントしたディレクトリが再帰構造を持つことを許可(nestされたマウントを許可)
    • root_squash
      • rootのリクエストを匿名の権限で実行
    • no_root_squash
      • rootのリクエストをrootで実行
    • all_squash
      • すべてのリクエストを匿名の権限で実行(ゲスト権限を期待するときなど)
    • anonuid=1000, anongid=1000
      • 匿名のUIDとGIDはいくつなのかを指定

設定の具体例

/mnt/sdc *(rw,async,no_auth_nlm,no_wdelay,no_subtree_check) # sdcをexport
/mnt/nvme0n1 192.168.0.0/16(rw,async,no_auth_nlm,no_wdelay,no_subtree_check) # nvme0n1をexport, ipアドレスのアクセスを192.168.*.*に限定
/mnt/nvme0n1 58.138.0.0/16(rw,async,no_auth_nlm,no_wdelay,no_subtree_check) # 複数のIPレンジを複数行に分けて記すことができる
/home/user/.mnt *(rw,async,no_auth_nlm,no_wdelay,no_subtree_check,crossmnt,fsid=0,anonuid=1000,anongid=1000,insecure,all_squash) # macosx用のexport

反映(export)

$ sudo exportfs -a

再反映(export)

$ sudo exportfs -r

反映取り消し(unexport)

$ sudo exportfs -au

nfsサーバに接続している情報を表示

$ showmount -a

または

$ showmount

nfsサーバが公開しているディレクトリを表示

$ showmount -e 127.0.0.1
Export list for 127.0.0.1:
/home/<username>/sda *

nfsの統計情報

$ nfsstat

クライアント側の設定

OSXでのマウント例

  • mountオプションとしてresvportが必要. resvportの意味は特権ポートを使用するかというオプションでOSXでは必要であるようである
  • nfsサーバサイドのディスクの設定がanonuid=1000,anongid=1000,insecure,all_squashが入っている必要がある(uid,gidは適宜サーバのユーザに変更)
# mount -t nfs -o resvport ${IP_ADDR}:${SEVER_DIR_PATH} ${TARGET_PATH}

/etc/fstabの設定とマウントオプション

マウントオプション

  • rsize,wsize
    • 読み書きのバイト数、大きいほうが基本的に良い
  • sync
    • asyncのほうが早いがファイルが壊れる可能性がある
  • soft
    • hardはハングアップのリスクがありsoftだとプログラムがタイムアウト等で終了するリスクを許容する
    • retrans
      • softでマウントしたときの試行回数
  • hard
    • intr
      • hardでマウントした時の割り込みを受け付け
  • nordirplus
    • globbing時に投機的にデータを取得する機能をOFFするオプション
  • timeo
    • TCP接続時の応答が帰るまでに許容する時間
  • fsc
    • fs-cacheを有効化したときにつけるオプション
  • nolock
    • ファイルをロックしない
  • ipv6等は早くならない

具体例

# nfs
192.168.50.16:/home/user/sdb /home/user/.mnt/nfs/favs00 nfs nordirplus,rsize=8192,wsize=8192,async,soft,timeo=1  0 0
192.168.50.20:/home/user/nvme0n1 /home/user/.mnt/nfs/favs01 nfs nordirplus,rsize=8192,wsize=8192,async,soft,timeo=1 0 0
192.168.50.12:/home/user/sda /home/user/.mnt/nfs/favs02 nfs nordirplus,rsize=8192,wsize=8192,async,soft,timeo=1 0 0
192.168.50.12:/home/user/sdd /home/user/.mnt/nfs/favs03 nfs nordirplus,rsize=8192,wsize=8192,async,soft,timeo=1 0 0
192.168.50.12:/home/user/sdc /home/user/.mnt/nfs/favs04 nfs nordirplus,rsize=8192,wsize=8192,async,soft,timeo=1 0 0
192.168.50.16:/home/user/nvme0n1 /home/user/.mnt/nfs/favs05 nfs nordirplus,rsize=8192,wsize=8192,async,soft,timeo=1 0 0
192.168.50.12:/home/user/sde /home/user/.mnt/nfs/favs06 nfs nordirplus,rsize=8192,wsize=8192,async,soft,timeo=1 0 0
192.168.50.12:/home/user/sdf /home/user/.mnt/nfs/favs07 nfs nordirplus,rsize=8192,wsize=8192,async,soft,timeo=1 0 0
# cache
192.168.50.16:/home/user/sdc /home/user/.mnt/nfs/cache nfs nordirplus,rsize=8192,wsize=8192,async,soft,timeo=1 0 0

fs-cacheの有効化

キャッシュを利用したほうが基本的に早くなるので入れたほうが良い

2020/10追記:このファイルシステムは壊れやすく、壊れるとリカバリーが大変なので、入れないほうがいい

$ sudo apt install cachefilesd

/etc/default/cachefilesdの編集

RUN=yes

cachefilesdの起動

$ sudo systemctl start cachefilesd

トラブルシューティング

mount.nfs: access denied by server while mounting (null)

  • サーバに問題があるのではなく、クライアントのマウントポイントがマウント不可になっているときに出る
  • 別のファイルシステムがマウントされていないか等確認する

hardオプションでマウントしてしまうと、クライアントのターミナルがハングアップする

  • softオプション無しでマウントしてしまうとハングアップすることがある
  • sudo umount -f -l <mount-point>で強制的にアンマウントすることで操作可能になる

mount_nfs: can’t mount with remote locks when server (..***) is not running rpc.statd: RPC prog. not avail

  • nfsサーバサイドでrpc-statdとrpcbindのサービスが停止している可能性がある
  • osxがクライアントの時、発生することがある
$ sudo systemctl start rpcbind
$ sudo systemctl enable rpcbind
$ sudo systemctl start rpc-statd
$ sudo systemctl enable rpc-statd

参考

  • https://blog.frehi.be/2019/01/03/fs-cache-for-nfs-clients/
  • https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.6-NFS-Client
  • https://unix.stackexchange.com/questions/149014/why-is-ls-command-slow-to-interrupt-on-nfs-directory-with-lots-of-files


nfs Share Tweet