根据这个答案https://serverfault.com/a/1062570/253400有可能安装的软件支持 nfs 版本v4.2
,但如果没有准备好底层内核,该mount
命令将降级为“kenrel 的已知版本”那可能是v4.0
。
根据答案,这似乎不是 nfs 库的问题,而是与mount
命令本身有关。
有没有办法告诉mount
“绕过”挂载“发现”并告诉它绑定v4.2
库中的全部功能而不管底层内核如何?
根据这个答案https://serverfault.com/a/1062570/253400有可能安装的软件支持 nfs 版本v4.2
,但如果没有准备好底层内核,该mount
命令将降级为“kenrel 的已知版本”那可能是v4.0
。
根据答案,这似乎不是 nfs 库的问题,而是与mount
命令本身有关。
有没有办法告诉mount
“绕过”挂载“发现”并告诉它绑定v4.2
库中的全部功能而不管底层内核如何?
我正在使用 NFS 来测试一些客户端选项。
在使用“选项”之前,我只是测试了从几个客户端到给定服务器的“默认”连接,所以稍后我将能够比较选项化行为与默认行为的对比。
但是我观察到客户端的行为不同,即使它们都基于ubuntu:20.04
并且都安装了相同的版本nfs-common
。
这是设置:
暴露 IP 192.168.3.81 的桥接虚拟盒中的 Ubuntu 20.40。Server 是 ubuntu 20.04 的默认包。
这些是已安装的 NFS 软件包:
xavi@iridio:~$ apt list --installed | grep nfs
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
libnfsidmap2/focal,now 0.25-5.1ubuntu1 amd64 [installed,automatic]
nfs-common/focal-updates,focal-security,now 1:1.3.4-2.5ubuntu3.3 amd64 [installed,automatic]
nfs-kernel-server/focal-updates,focal-security,now 1:1.3.4-2.5ubuntu3.3 amd64 [installed]
xavi@iridio:~$
这是导出文件:
xavi@iridio:~$ cat /etc/exports
/files/repos/sharedfolder *(rw,sync,no_subtree_check,no_root_squash,insecure)
xavi@iridio:~$
virtualbox 上的同一台服务器机器可以作为其自身的客户端进行测试。挂载时,它确实使用协议 4.2:
xavi@iridio:~$ sudo mount -vvvv 192.168.3.81:/files/repos/sharedfolder iridio/
mount.nfs: timeout set for Tue May 4 10:41:51 2021
mount.nfs: trying text-based options 'vers=4.2,addr=192.168.3.81,clientaddr=192.168.3.81'
xavi@iridio:~$ echo $?
0
xavi@iridio:~$
这是预期的行为:客户端能够v4.2
,服务器能够v4.2
,然后通过 连接v4.2
。
VBox中的内核是5.4:
xavi@iridio:~$ uname -a
Linux iridio 5.4.0-72-generic #80-Ubuntu SMP Mon Apr 12 17:35:00 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
xavi@iridio:~$
然后从主机启动一个 docker 容器,它也基于 rawubuntu:20.04
和 install nfs-common
。这是完整的会话:
xavi@msi-laptop:~$ # Launch a fresh container from an empty official stock ubuntu image:
xavi@msi-laptop:~$
xavi@msi-laptop:~$ docker run -it --rm --name=nfsclient --hostname=nfsclient --privileged=true ubuntu:20.04
root@nfsclient:/# apt-get update > /dev/null
root@nfsclient:/# apt-get install -y nfs-common > /dev/null
debconf: delaying package configuration, since apt-utils is not installed
root@nfsclient:/#
root@nfsclient:/#
root@nfsclient:/# # Check installed nfs packages. Client is the same than vbox.
root@nfsclient:/#
root@nfsclient:/# apt list --installed | grep nfs
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
libnfsidmap2/focal,now 0.25-5.1ubuntu1 amd64 [installed,automatic]
nfs-common/focal-updates,focal-security,now 1:1.3.4-2.5ubuntu3.3 amd64 [installed]
root@nfsclient:/#
root@nfsclient:/#
root@nfsclient:/# # Now mount, but does tries 4.2, fails, tries 4.1, fails then 4.0 and succeeds.
root@nfsclient:/#
root@nfsclient:/# mkdir iridio
root@nfsclient:/# mount -vvvv 192.168.3.81:/files/repos/sharedfolder iridio/
mount.nfs: timeout set for Tue May 4 10:55:35 2021
mount.nfs: trying text-based options 'vers=4.2,addr=192.168.3.81,clientaddr=172.17.0.10'
mount.nfs: mount(2): Invalid argument
mount.nfs: trying text-based options 'vers=4.1,addr=192.168.3.81,clientaddr=172.17.0.10'
mount.nfs: mount(2): Invalid argument
mount.nfs: trying text-based options 'vers=4.0,addr=192.168.3.81,clientaddr=172.17.0.10'
root@nfsclient:/# echo $?
0
root@nfsclient:/#
docker中的内核是4.19。事实上,docker 引擎在 Windows 10 pro 上的 WSL-2 上的 Ubuntu 20.04 上运行:
root@nfsclient:/# uname -a
Linux nfsclient 4.19.128-microsoft-standard #1 SMP Tue Jun 23 12:58:10 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
root@nfsclient:/#
ubuntu:20.04
,两者都具有非常精确的nfs-common/focal-updates,focal-security,now 1:1.3.4-2.5ubuntu3.3 amd64
行为版本,即一个通过连接到服务器v4.2
,另一个通过连接v4.0
?v4.2
和v4.1
. 我应该通过任何额外的选项来连接v4.2
吗?