ここ数日時間が無く、ブログの更新が滞っていたので小ネタでも。タイトルの通り、CentOS 7のNFSマウントでの罠です。
目次
事の発端
CentOS7系でNFSファイルをマウントする為に、/etc/fstabに以下のように記述した。
172.xx.xxx.xx:/vol/contents /nfs/contents nfs rw,rsize=1024,wsize=1024,intr 0 0
CentOS6系の時と同様にこのままmount -aで対象のNFSをマウントした所、以下エラーが発生。。
Job for rpc-statd.service failed because the control process exited with error code. See "systemctl status rpc-statd.service" and "journalctl -xe" for details. mount.nfs: rpc.statd is not running but is required for remote locking. mount.nfs: Either use '-o nolock' to keep locks local, or start statd. mount.nfs: an incorrect mount option was specified
原因調査
マウント出来ずにエラーを吐かれた。とりあえずエラーの指示通りに動いてみる。
#systemctl status rpc-statd * rpc-statd.service - NFS status monitor for NFSv2/3 locking. Loaded: loaded (/usr/lib/systemd/system/rpc-statd.service; static; vendor preset: disabled) Active: failed (Result: exit-code) since Wed 2017-02-15 13:37:56 JST; 41s ago Process: 24067 ExecStart=/usr/sbin/rpc.statd --no-notify $STATDARGS (code=exited, status=1/FAILURE) Feb 15 13:37:56 systemd[1]: Starting NFS status monitor for NFSv2/3 locking.... Feb 15 13:37:56 rpc.statd[24068]: Version 1.3.0 starting Feb 15 13:37:56 rpc.statd[24068]: Flags: TI-RPC Feb 15 13:37:56 rpc.statd[24068]: Failed to register (statd, 1, udp): svc_reg() err: RPC: Remote system error - No route to host Feb 15 13:37:56 rpc.statd[24068]: Failed to register (statd, 1, tcp): svc_reg() err: RPC: Remote system error - No route to host Feb 15 13:37:56 rpc.statd[24068]: Failed to register (statd, 1, udp6): svc_reg() err: RPC: Remote system error - No route to host Feb 15 13:37:56 systemd[1]: rpc-statd.service: control process exited, code=exited status=1 Feb 15 13:37:56 systemd[1]: Failed to start NFS status monitor for NFSv2/3 locking.. Feb 15 13:37:56 systemd[1]: Unit rpc-statd.service entered failed state. Feb 15 13:37:56 systemd[1]: rpc-statd.service failed.
起動しない。とりあえずsystemdのrpc-statd.serviceを覗いてみる。
[Unit] Description=NFS status monitor for NFSv2/3 locking. DefaultDependencies=no Conflicts=umount.target Requires=nss-lookup.target rpcbind.target After=network.target nss-lookup.target rpcbind.service PartOf=nfs-utils.service Wants=nfs-config.service After=nfs-config.service [Service] EnvironmentFile=-/run/sysconfig/nfs-utils Type=forking PIDFile=/var/run/rpc.statd.pid ExecStart=/usr/sbin/rpc.statd --no-notify $STATDARGS
ぐぐってみると、どうやらrpcbind.serviceが起動していない事が原因のような気がするので、systemctlで起動する。
# systemctl start rpcbind.service # mount -a
これで問題なくマウント出来た。以降は自動起動に設定する。
#systemctl enable rpcbind
これでめでたし。
再起動後にrpcbindが自動起動しない
どうやら全然めでたく無く、再起動するとrpcbindが再び無効になっていた。具体的にはこんなエラーがmessagesにあった。
pcbind.socket failed to listen on sockets: Address family not supported by protocol Failed to listen on RPCbind Server Activation Socket. Unit rpcbind.socket entered failed state.
再度rpcbindを試みるが以下エラー。。
# systemctl start rpcbind A dependency job for rpcbind.service failed. See 'journalctl -xe' for details.
rpcbind起動しなくなって藻掻いていると、自環境では以下手順でとりあえず起動出来ることがわかった。(理由不明)
# systemctl enable rpcbind # systemctl start rpcbind # mount -a
暫定的に自動起動させる場合
とりあえずsystemd enableを実行しても起動時に自動起動してくれない。暫定手段としてrc.localに上記の一連のコマンドを記述する事で回避する事にした。
#vi /etc/rc.d/rc.local <末尾に> /bin/systemctl enable rpcbind /bin/systemctl start rpcbind /usr/bin/mount -a # chmod u+x /etc/rc.d/rc.local
とりあえずこれで起動時にfstabに記述したnfsがマウントされていることは確認出来た。暫定的ではあるが、この方法で一旦逃げようと思う。同様の事象で解決方法をご存知の方はご教示下さい。。
結論!!
解消しました。。
上記にある通り、自環境ではipv6無効化が原因でした!!
# sysctl -w net.ipv6.conf.all.disable_ipv6=0 # sysctl -w net.ipv6.conf.default.disable_ipv6=0
上記でIPv6を有効化すれば、解消されると思います。