よくわからないエンジニア

よく分からないエンジニアの日々の記録

よくわからないエンジニア

CentOS7 起動時のNFSオートマウントにハマる

ここ数日時間が無く、ブログの更新が滞っていたので小ネタでも。タイトルの通り、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がマウントされていることは確認出来た。暫定的ではあるが、この方法で一旦逃げようと思う。同様の事象で解決方法をご存知の方はご教示下さい。。

結論!!

解消しました。。

www.unknownengineer.net

上記にある通り、自環境ではipv6無効化が原因でした!!

# sysctl -w net.ipv6.conf.all.disable_ipv6=0
# sysctl -w net.ipv6.conf.default.disable_ipv6=0

上記でIPv6を有効化すれば、解消されると思います。