centos-nfs-512错误

nfs 错误kernel: NFS: nfs4_discover_server_trunking unhandled error -512. Exiting with error EIO

        很久没挂载过nfs,忘记客户端怎么挂在nfs的了,服务端很早就安装好了,今天一台客户机需要挂载nfs,然后居然报错了,然后找了一圈居然没找到怎么解决,然后又重新看了一次centos nfs的配置。

在客户端挂载nfs的提示很慢,长时间无响应,强行结束看看是什么问题,查看日志

1
2
$ sudo tail -f /var/log/messages
Sep 3 11:23:51 dev-application kernel: NFS: nfs4_discover_server_trunking unhandled error -512. Exiting with error EIO

1、nfs服务端

        登录nfs服务器查看nfs服务正常,查看rpc服务正常,查看服务貌似没有看出异常。查看nfs日志,在日志里面发现比较奇怪的东西。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Nov 13 14:53:41 dev-nfs systemd-logind: New session 11875 of user root.
Nov 13 14:53:41 dev-nfs systemd: Starting Session 11875 of user root.
Nov 13 14:54:28 dev-nfs systemd: Stopping RPC bind service...
Nov 13 14:54:28 dev-nfs systemd: Starting RPC bind service...
Nov 13 14:54:28 dev-nfs systemd: Started RPC bind service.
Nov 13 14:54:31 dev-nfs systemd: Stopping NFS server and services...
Nov 13 14:54:31 dev-nfs kernel: nfsd: last server has exited, flushing export cache
Nov 13 14:54:31 dev-nfs systemd: Stopping NFS Mount Daemon...
Nov 13 14:54:31 dev-nfs systemd: Stopping NFSv4 ID-name mapping service...
Nov 13 14:54:31 dev-nfs rpc.mountd[3533]: Caught signal 15, un-registering and exiting.
Nov 13 14:54:31 dev-nfs systemd: Starting Preprocess NFS configuration...
Nov 13 14:54:31 dev-nfs systemd: Started Preprocess NFS configuration.
Nov 13 14:54:31 dev-nfs systemd: Starting NFSv4 ID-name mapping service...
Nov 13 14:54:31 dev-nfs systemd: Starting NFS Mount Daemon...
Nov 13 14:54:31 dev-nfs systemd: Started NFSv4 ID-name mapping service.
Nov 13 14:54:31 dev-nfs systemd: Started NFS Mount Daemon.
Nov 13 14:54:31 dev-nfs systemd: Starting NFS server and services...
Nov 13 14:54:31 dev-nfs rpc.mountd[11423]: Version 1.3.0 starting
Nov 13 14:54:31 dev-nfs kernel: NFSD: starting 90-second grace period (net ffffffff81ad9d40)

        继续看日志发现一致在这里循环操作,懵逼啊。利用rpcinfo -p localhost | grep nfs和netstat 查看端口看起来工作是正常的。就是日志看出来有问题

1
2
3
4
5
6
7
# rpcinfo -p localhost | grep nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl

2、恢复nfs

        网上看了一下,只能重启nfs、和rpcbind服务才能解决。

2.1、刷新nfs

1
# sudo exportfs -arv

感觉没多大效果

2.2、重启nfs

1
2
# systemctl restart rpcbind.service
# systemctl restart nfs.service

3、客户端挂载

再次来到客户机挂载,可以成功的挂载

4、rpcbind服务介绍

        共享和加载NFS文件系统需要服务,红帽企业Linux使用核心级的支持和守护进程的组合来提供NFS文件共享.NFS依靠远程过程调用(RPC)在客户端和服务器端路由请求。在Linux下RPC服务由portmap服务控制。

4.1、为了共享和加载NFS文件系统,下面的服务要一起工作:

  • nfs - 启动相应RPC服务进程来服务对于NFS文件系统的请求.
  • nfslock - 一个可选的服务,用于启动相应的RPC进程,允许NFS客户端在服务器上对文件加锁.
  • portmap - Linux的RPC服务,它响应RPC服务的请求和与请求的RPC服务建立连接.

4.2、RPC进程在后台一起工作服务于NFS服务

  • rpc.mountd - 这个进程接受来自NFS客户端的加载请求和验证请求的文件系统正在被输出.这个进程由NFS服务自动启动,不需要用户的配置.
  • rpc.nfsd - 这个进程是NFS服务器.它和Linux核心一起工作来满足NFS客户端的动态需求,例如提供为每个NFS客户端的每次请求服务器线程.这个进程对应于nfs服务.
  • rpc.lockd - 一个可选的进程,它允许NFS客户端在服务器上对文件加锁.这个进程对应于nfslock服务.
  • rpc.statd - 这个进程实现了网络状态监控(NSM)RPC协议,通知NFS客户端什么时候一个NFS服务器非正常重启动.这个进程被nfslock服务自动启动,不需要用户的配置.
  • rpc.rquotad - 这个进程对于远程用户提供用户配额信息. 这个进程被nfs服务自动启动,不需要用户的配置.

整体异常现象

        nfs服务异常的时候,客户端会不断的去尝试连接nfs服务器,导致在客户端使用df命令卡死,到挂在目录的上层目录执行ls 也出现卡死。df 卡死可以使用ctrl+c 结束,ls的时候就不行啦,需要在另外一个终端kill 进程。
        在网上看到一篇文章,上门说的是有可能是性能问题。解决办法是

1
2
3
4
5
6
# systemctl stop rpcbind.service
# systemctl stop nfs.service
# rm -rf /var/lib/nfs/sm/*
# rm -rf /var/lib/nfs/sm.bak/*
# systemctl restart rpcbind.service
# systemctl restart nfs.service

        我执行了,结果还在观察中,参考

将持续关注这块和更新

坚持原创技术分享,您的支持将鼓励我继续创作!
0%