客户端无法挂载:“mount.nfs4:不支持协议”

客户端无法挂载:“mount.nfs4:不支持协议”

我在服务器和客户端上都只运行 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,具体来说:

  1. 对于 nfs4,设置以下任何一个都是错误的:

     mounthost
     mountaddr 
     mountvers
     mountproto
    

    进入/etc/nfsmount.conf任何事物(包括设置mountvers=4和设置mountproto=tcp)。

    如果(像我一样)你愚蠢到这么做,代码就会设置errno=EPROTONOSUPPORT并返回错误……就像socket()失败了一样。[错误报告机制似乎没有意识到这一点,并使用 以“默认”方式报告错误strerror()。]

  2. 这也是一种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
    ....
    

    ...我想这是可以预料到的。

好吧,我这几天没什么好做的 :-(

相关内容