RaspberryPi nfsサーバでストレージを公開

 2016-09-29
nfsって利用するときはマウントしちゃうだけな感じですが、サービスと提供する側はあんまりやらないので、毎回やりかた忘れちゃってる感じ・・・
 
ミッション: OPi-clster構築のために計算ノード達にストレージを共有せよ!


nfsサーバの構造

nfsを動作させるにはいくつかのモジュールを組みああせる必要がある らしい。 (lock等が要らなければシンプルなのだが・・)
  • rpcbind こいつでイイカンジにネットワークのポートを割り振る
  • nfs-common こいつでファイルのlockしたりいろいろ補助機能を提供する
  • nfs-kernel-server こいつがnfs(server)の本体



必要なパッケージのinstall

rpcbindとnfs-commonはRaspbianではデフォルトでインストール済みっぽい。けどとりあえず必要なものはapt-getで入れるってことです。
raspi$ sudo apt-get install rpcbind nfs-common nfs-kernel-server


設定とか

/etc/exportに共有したいディレクトリ等を書いておく。例えばこんな感じ↓
/tmp/hogehoge 192.168.0.0/24(rw,sync,no_subtree_check)
オプション等は適当にググってください。

とりあえず起動
raspi$ sudo service rpcbind start
raspi$ sudo service nfs-common start
raspi$ sudo service nfs-kernel-server start


起動したらイイカンジにポートを開いているか見てみる
raspi$ rpcinfo -p
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 65500 status
100024 1 tcp 65500 status
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 2 tcp 2049
100227 3 tcp 2049
100003 2 udp 2049 nfs
: : : : :

rapi$ sudo netstat -tlnp|grep rpc
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1201/rpcbind
tcp 0 0 0.0.0.0:65500 0.0.0.0:* LISTEN 1275/rpc.statd
tcp 0 0 0.0.0.0:65502 0.0.0.0:* LISTEN 1340/rpc.mountd
tcp6 0 0 :::111 :::* LISTEN 1201/rpcbind
tcp6 0 0 :::65500 :::* LISTEN 1275/rpc.statd
tcp6 0 0 :::65502 :::* LISTEN 1340/rpc.mountd


問題なければOS起動時にサービスが上がるようにしておく
raspi$ sudo update-rc.d rpcbind enable
raspi$ sudo update-rc.d nfs-common enable
raspi$ sudo update-rc.d nfs-kernel-server enable


ここでちょっと問題が・・

OSを再起動するとrpcbindがなぜか上がってこない。 sudo service rpcbind startして(念のためnfs-common,nfs-kernel-serverをrestartした)やればnfsでマウントできるんだけどなぁ・・
検索すると出てくる例として update-rc.d の引数をenableではなくdefaultsにしてみるというのも試したが、効果はなかった↓
raspi$ sudo update-rc.d rpcbind defaults


昔ながらのchkconfigを試してみたが、効果ないみたい↓
raspi$ sudo apt-get install chkconfig

raspi$ chkconfig --list rpcbind
rpcbind 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on

raspi$ sudo chkconfig rpcbind on

raspi$ chkconfig --list rpcbind
rpcbind 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on


aptでもう一度入れなおしてもダメ↓
raspi$ sudo apt-get purge nfs-common nfs-kernel-server rpcbind

raspi$ sudo apt-get install nfs-common nfs-kernel-server rpcbind

raspi$ sudo nano /etc/default/nfs-common
raspi$ sudo nano /etc/default/nfs-kernel-server


昔ながらの/etc/rc*.dにsymlinkを作ってみた・・けどダメでした↓
raspi$ cd /etc/rc2.d ; sudo ln -s ../init.d/rpcbind ./S01rpcbind
raspi$ cd /etc/rc3.d ; sudo ln -s ../init.d/rpcbind ./S01rpcbind
raspi$ cd /etc/rc4.d ; sudo ln -s ../init.d/rpcbind ./S01rpcbind
raspi$ cd /etc/rc5.d ; sudo ln -s ../init.d/rpcbind ./S01rpcbind

raspi$ chkconfig --list rpcbind
rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off S:on


後ろ向きな対応

面倒なのでrc.localにサービスをrestartさせるコマンドを並べましたとさ・・・ Not coooooool.



rpcが使うポートの固定化

rpcはイイカンジにポートを割り当てるので、使用するポート番号は固定ではない。しかしfirewall等でポート番号を指定して制御したい場合は不便なので、固定のポート番号を使用するようにしておく。 (ちなみに先述のport使用状況の確認では、すでに下記を設定済み。)
  • rpc.statd
    /etc/default/nfs-commonに設定する場所がある
    # Options for rpc.statd.
    # Should rpc.statd listen on a specific port? This is especially useful
    # when you have a port-based firewall. To use a fixed port, set this
    # this variable to a statd argument like: "--port 4000 --outgoing-port 4001".
    # For more information, see rpc.statd(8) or http://wiki.debian.org/SecuringNFS
    STATDOPTS="--port 65500 --outgoing-port 65501"
    とりあえず深い意味はないが65500と65501を指定してみた。
  • rpc.mountd
    /etc/default/nfs-kernel-serverに設定する場所がある
    # Options for rpc.mountd.
    # If you have a port-based firewall, you might want to set up
    # a fixed port here using the --port option. For more information,
    # see rpc.mountd(8) or http://wiki.debian.org/SecuringNFS
    # To disable NFSv4 on the server, specify '--no-nfs-version 4' here
    RPCMOUNTDOPTS="--manage-gids --port 65502"
    とりあえず深い意味はないが65502を指定してみた。

これで使用するポートが固定されて、iptablesでイイカンジに指定できる


 
コメント












管理者にだけ表示を許可する
トラックバック
トラックバックURL:
http://wbbwbb.blog83.fc2.com/tb.php/251-8f1bee00
≪ トップページへこのページの先頭へ  ≫