我有两台机器,一台 NFS 服务器(RHEL)和一台客户端(Debian)。服务器已设置 NFS,导出特定目录:
server:~$ sudo /usr/sbin/rpcinfo -p localhost
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 910 status
100024 1 tcp 913 status
100021 1 udp 53391 nlockmgr
100021 3 udp 53391 nlockmgr
100021 4 udp 53391 nlockmgr
100021 1 tcp 32774 nlockmgr
100021 3 tcp 32774 nlockmgr
100021 4 tcp 32774 nlockmgr
100007 2 udp 830 ypbind
100007 1 udp 830 ypbind
100007 2 tcp 833 ypbind
100007 1 tcp 833 ypbind
100011 1 udp 999 rquotad
100011 2 udp 999 rquotad
100011 1 tcp 1002 rquotad
100011 2 tcp 1002 rquotad
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100005 1 udp 1013 mountd
100005 1 tcp 1016 mountd
100005 2 udp 1013 mountd
100005 2 tcp 1016 mountd
100005 3 udp 1013 mountd
100005 3 tcp 1016 mountd
server$ cat /etc/exports
/dir *.my.domain.com(ro)
client$ grep dir /etc/fstab
server.my.domain.com:/dir /dir nfs tcp,soft,bg,noauto,ro 0 0
一切似乎都很好,但是当我尝试安装时,我看到以下内容:
client$ sudo mount /dir
mount.nfs: access denied by server while mounting server.my.domain.com:/dir
在服务器上我看到:
server$ tail /var/log/messages
Mar 15 13:46:23 server mountd[413]: authenticated mount request from client.my.domain.com:723 for /dir (/dir)
我在这里想念什么?我应该如何调试这个?
如果您的 /etc/hosts.allow 和 /etc/hosts.deny 不正确,我已经看到了这一点;检查这些文件中包含端口映射的行并将其注释掉(如果您不在防火墙后面,则不安全)或将客户端/服务器上的行设置为您的特定子网。
例如,在 /etc/hosts.allow 中:
...并注释掉 /etc/hosts.deny 中的任何内容,以仅使 hosts.allow 处于活动状态。NFS 使用 tcpwrappers 和这些文件来控制访问以及 /etc/exports 中的内容。
您
rpcinfo
表示 NFS 正在尝试通过 UDP 连接。似乎 NFSv4 不再通过 UDP 工作,但期望使用 TCP。例如,Linux 内核正在尝试通过 UDP 挂载 rootfs,即使对于 NFSv4 也是如此,并且需要在
nfsroot
. 例子:nfsroot=192.79.143.131:/diskless/client01,tcp
我在带有 macOS 客户端的 Debian 10.2 服务器上遇到了同样的问题。我的解决方案:
在 NFS 服务器上,将
insecure
选项添加到共享中/etc/exports
并重新运行exportfs -r
来源在这里。
它是从所有机器上坏掉的还是只有一台坏掉的?nfsd 伪文件系统是否安装在
/proc/fs/nfsd
服务器上?不幸的是,重新启动服务器解决了这个问题,所以我仍然不知道它为什么会发生,但它不再是了。
我遇到了同样的问题,我的服务器是 ubuntu 机器,我的客户端是 macbook air。过去的解决方案是重新启动服务器机器,但由于我将其用作媒体中心,这并不总是很有趣。所以,我做了什么来解决它:
在服务器上,编辑 /etc/exports
然后我冲洗它
并添加一个新行,其中包含有问题的客户端的特定 IP(我的正常共享是网络范围的),然后我在客户端上卸载共享,然后再次重新挂载,现在它可以工作了。
PS:但它并没有像往常一样在我的查找器左侧显示为快捷方式,我必须在我的挂载点找到它
通过尝试使用 NetBSD pxeboot 引导加载程序加载内核,我经历了相同且非常具体的场景。它实际上是在谈论 NFSv2。8 年前,这也可能是根本原因,您的 Debian 客户端和 RHEL 服务器没有使用同一种语言。您可以通过将
-V2
作为参数添加到rpc.mountd
. 您最终也可以使用-N3,4
.