我在服务器和客户端上都只运行 nfs4。我不确定我最近做了什么更改,但我无法再挂载以前可以挂载的导出文件系统。我刚刚将客户端计算机从 Fedora 31 升级到 32...但我敢肯定升级后 nfs 仍然正常工作。
在客户端我这样做:
# mount /foo
mount.nfs4: Protocol not supported
尚未/etc/fstab
更改。 上尚未安装任何内容。我手动/foo
发出命令时得到的结果相同。mount.nfs4
在客户端使用 wireshark,我完全看不到任何发送到 nfs 服务器的内容(或从 nfs 服务器接收的内容)。使用 tcpdump,我在服务器端看不到任何内容,从客户端重新启动之前到尝试挂载之后都是如此。所以我猜这是客户端问题?
我在日志中什么也看不到。我找不到任何可以提高客户端安装日志记录级别的信息。
有人能告诉我如何发现客户正在做什么(或没做什么)吗?
按照要求...
dmesg
提及 nfs|NFS:
[ 7.987799] systemd[1]: Starting Preprocess NFS configuration convertion...
[ 7.993220] systemd[1]: nfs-convert.service: Succeeded.
[ 7.993342] systemd[1]: Finished Preprocess NFS configuration convertion.
[ 12.484481] RPC: Registered tcp NFSv4.1 backchannel transport module.
在fstab
客户端上:
foo:/ /foo nfs4 noauto,sec=sys,proto=tcp,clientaddr=xx.xx.xx.xx,port=1001 0 0
客户端有多个 IP。服务器希望隐藏它提供 nfs 的事实。为了方便起见,它只提供 nfs4。netstat
服务器上的 FWIW 给出(为清晰起见进行了编辑):
Prot R-Q S-Q Local Address Foreign Address State PID/Program
tcp 0 0 xx.xx.xx.xx:1001 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:1002 0.0.0.0:* LISTEN 815/rpc.statd
我以为 nfs4 只需要一个端口...但 systemd 似乎无论如何都会唤醒端口 111。还有 rpc.statd。
服务器的配置曾经正常工作...此外,客户端根本没有通过任何端口向服务器发送任何内容!
在exports
服务器上:
/ bar(fsid=0,no_subtree_check,sec=sys,rw,no_root_squash,insecure,crossmnt)
bar
在服务器的文件中哪里\etc\hosts
。
我showmount -e foo
在客户端做了:
clnt_create: RPC: Program not registered
Wireshark 告诉我,客户端在端口 111 上戳了服务器,请求MOUNT (100005) Version 3 tcp
并收到“否”响应。戳了也udp
收到了相同的答案。由于服务器仅配置了 nfs4,我想这并不奇怪?我注意到它showmount
不要求版本 4...但我不知道你是否期望它这样做?
答案1
好的...所以我下载了源代码并开始研究strace
。
问题在于我对 过于热情了/etc/nfsmount.conf
,具体来说:
对于 nfs4,设置以下任何一个都是错误的:
mounthost mountaddr mountvers mountproto
进入
/etc/nfsmount.conf
任何事物(包括设置mountvers=4
和设置mountproto=tcp
)。如果(像我一样)你愚蠢到这么做,代码就会设置
errno=EPROTONOSUPPORT
并返回错误……就像socket()
失败了一样。[错误报告机制似乎没有意识到这一点,并使用 以“默认”方式报告错误strerror()
。]这也是一种
mounvers
错误/etc/nfsmount.conf
。再说一次,如果(像我一样)你愚蠢到拼错
mountvers
并输入mounvers=4
,/etc/nfsmount.conf
你会得到:# mount.nfs4 -v -o noauto,sec=sys,proto=tcp,port=1001 foo:/ /foo mount.nfs4: timeout set for Fri Sep 11 16:24:09 2020 mount.nfs4: trying text-based options 'sec=sys,proto=tcp,port=1001,mounvers=4,vers=4.2,addr=xx,clientaddr=xx' mount.nfs4: mount(2): Invalid argument ....
...我想这是可以预料到的。
好吧,我这几天没什么好做的 :-(