我只在服务器和客户端上运行 nfs4。我不确定最近更改了什么,但我无法再挂载以前能够挂载的导出文件系统。我刚刚将客户端计算机从 Fedora 31 升级到 32...但我发誓升级后 nfs 仍然可以立即工作。
在客户端我做:
# mount /foo
mount.nfs4: Protocol not supported
Run Code Online (Sandbox Code Playgroud)
尚未/etc/fstab更改。处尚未安装任何内容/foo。mount.nfs4我手动发出相同的结果。
在客户端使用wireshark,我可以看到绝对没有任何内容发送到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.
Run Code Online (Sandbox Code Playgroud)
在fstab客户端:
foo:/ /foo nfs4 noauto,sec=sys,proto=tcp,clientaddr=xx.xx.xx.xx,port=1001 0 0
Run Code Online (Sandbox Code Playgroud)
客户端有多个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
Run Code Online (Sandbox Code Playgroud)
我以为 nfs4 只需要一个端口...但 systemd 似乎无论如何都会唤醒端口 111。还有rpc.statd。
服务器的配置曾经有效...此外,客户端根本没有在任何端口上向服务器发送任何内容!
以及exports服务器上的:
/ bar(fsid=0,no_subtree_check,sec=sys,rw,no_root_squash,insecure,crossmnt)
Run Code Online (Sandbox Code Playgroud)
bar在服务器文件中的位置\etc\hosts。
我showmount -e foo在客户端做了:
clnt_create: RPC: Program not registered
Run Code Online (Sandbox Code Playgroud)
Wireshark 告诉我,客户端向服务器的端口 111 发出请求MOUNT (100005) Version 3 tcp,但收到“否”响应。戳戳udp得到了同样的答案。由于服务器仅配置了 nfs4,我想这并不奇怪?我注意到这showmount并不要求版本 4...但我不知道您是否希望如此?
好的...所以我下载了源代码并开始研究strace.
问题是我对 过于热情/etc/nfsmount.conf,具体来说:
对于 nfs4,设置以下任何一项都是错误的:
mounthost
mountaddr
mountvers
mountproto
Run Code Online (Sandbox Code Playgroud)
/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
....
Run Code Online (Sandbox Code Playgroud)
...我想这是可以预料的。
啊,好吧,这几天我没什么更好的事可做:-(
| 归档时间: |
|
| 查看次数: |
12952 次 |
| 最近记录: |