这里是普通文章模块栏目内容页
centos搭建NFS服务常见错误

在NFS客户端执行:showmount -e

报这个错误:

clnt_create: RPC: Program not registered 

解决方法

网上大部分都是重启nfs和rpcbind的服务

systemctl restart nfs-utils
systemctl restart rpcbind

操作后并没有正常,后面发现在了一个操作就正常了

systemctl restart rpcbind
systemctl restart nfs-server
systemctl restart nfs-utils

********************************************

mount -t nfs 192.168.16.126:/home/share /home/nfsshare

mount.nfs: Connection refused

解决方案:重启nfs和rpcbind的服务

systemctl restart rpcbind
systemctl restart nfs-server
systemctl restart nfs-utils

********************************************

systemctl stop rpcbind.service

Warning: Stopping rpcbind.service, but it can still be activated by: rpcbind.socket

在此同时查看rpcbind.sock仍然处于活动状态

netstat -anlp | grep -i rpc
unix 2 [ ACC ] STREAM LISTENING 19174 1/systemd /var/run/rpcbind.sock

经过一段时间观察后,发现rpcbind.套接字再次激活 rpcbind 服务。

解决方案

如果希望暂时停止 rpcbind 服务而不被 rpcbind. socket 稍后激活,请先停止 rpcbind.service,然后停止 rpcbind.套接:

systemctl stop rpcbind.service
systemctl stop rpcbind.socket

********************************************

mount -o nolock -t nfs 192.168.16.126:/home/share /home/nfsshare

mount.nfs: access denied by server while mounting 192.168.16.126:/home/share

vi /etc/exports

在里面加入

/home/share 192.168.16.0/24(rw,all_squash)

********************************************

svc: failed to register lockdv1 RPC service (errno 111).

解决方案:

nfs mount 默认选项包括文件锁,依赖于portmap提供的动态端口分配功能。

解决方法:kill 文件锁(lockd)或者mount -o nolock

********************************************

挂载时使用了RW权限挂载,当时读写仍然Permission denied

重启NFS服务以后,在客户机通过

mount -o nolock 192.168.16.126:/home/share /home/nfsshare

命令将网络文件mount到本地。执行完成之后,目录是可以访问了,但无法写入。感觉有点奇怪,明明在命令中指定可以写入了。

于是到网上搜索资料,发现exports目录权限中,有这么一个参数no_root_squash。

其作用是:登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有root 的权限!。

默认情况使用的是相反参数root_squash

在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个身份。

因为我的客户端是使用root登录的,自然权限被压缩为nobody了,难怪无法写入。将配置信息改为:

/home/share 192.168.16.0/24(rw,no_root_squash)

据说有点不安全,但问题是解决了。