AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1062512
Accepted
Xavi Montero
Xavi Montero
Asked: 2021-05-05 03:18:53 +0800 CST2021-05-05 03:18:53 +0800 CST 2021-05-05 03:18:53 +0800 CST

nfs 根据客户端机器从 4.2 降级到 4.0,而理论上可以 4.2 - 为什么?

  • 772

我正在使用 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:~$

客户#1(虚拟盒子)

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:~$

客户#2(码头工人)

然后从主机启动一个 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吗?
nfs ubuntu-20.04 nfs4
  • 1 1 个回答
  • 585 Views

1 个回答

  • Voted
  1. Best Answer
    kofemann
    2021-05-05T12:17:10+08:002021-05-05T12:17:10+08:00

    答案就在问题中...

    默认情况下,现代版本的 nfs utils 将始终尝试使用最高的 nfs 版本,截至目前为 4.2。

    但是,mount 命令本身并不是一个 nfs 客户端。因此它将挂载请求转发给内核。根据内核版本和构建时间选项,不同的内核可以支持不同的 nfs 版本。结果,在某些情况下会立即使用 4.2,而在另一种情况下,内核会简单地说“不支持”并让 mout 命令使用不同的 nfs 版本再次尝试。

    • 2

相关问题

  • 在 NFS 文件服务器上获取不规则时间戳

  • 过时的 NFS 句柄

  • sh 脚本:如果未安装远程文件系统,如何安装它?

  • 分析 Linux NFS 服务器性能

  • NFS 缓存导致间歇性滞后

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve