NFS 安装失败并显示 RPC:垃圾

NFS 安装失败并显示 RPC:垃圾

这是关于怀旧的。

我这里有一台运行 SuSE Linux 4.3 和内核 2.2.6 的旧 PC。所有硬件包括。以太网工作正常,我正在尝试安装由最近的 Ubuntu 20.04 托管的 NFS 共享。

两台 PC 都可以互相 ping 通并通过 中的条目解析它们的名称/etc/hosts。例如 FTP 正在运行。

出口是:

/data   192.168.3.0/24(ro,no_subtree_check)

据我了解,这将创建 NFS v2/v3 导出。

尝试安装它会导致:

nostalgy:/root # mount -t nfs linus:/data /data
mount: wrong fs type, bad option, bad superblock on linus:/data,
       or too many mounted file systems

/var/log/messages客户端:

May 10 15:42:18 nostalgy kernel: nfs warning: mount version older than kernel
May 10 15:42:18 nostalgy kernel: call_verify: server accept status: 2
May 10 15:42:18 nostalgy kernel: RPC: garbage, retrying    0
May 10 15:42:18 nostalgy kernel: call_verify: server accept status: 2
May 10 15:42:18 nostalgy kernel: RPC: garbage, retrying    0
May 10 15:42:18 nostalgy kernel: call_verify: server accept status: 2
May 10 15:42:18 nostalgy kernel: RPC: garbage, exit EIO
May 10 15:42:18 nostalgy kernel: nfs_get_root: getattr error = 5
May 10 15:42:18 nostalgy kernel: NFS: cannot create RPC transport.

/var/log/syslog服务器上(使用 启用调试日志记录后rpcdebug -m rpc -s all)每次安装尝试都会记录三次:

Jul 12 19:35:18 linus kernel: [25882.293061] svc: socket 00000000d25fa09a(inet 00000000ad30a7ef), busy=0
Jul 12 19:35:18 linus kernel: [25882.293096] svc: server 000000006bec18a0, pool 0, transport 00000000d25fa09a, inuse=2
Jul 12 19:35:18 linus kernel: [25882.293138] svc: svc_authenticate (1)
Jul 12 19:35:18 linus kernel: [25882.293144] svc: server 00000000ed86c4fe, pool 0, transport 00000000d25fa09a, inuse=3
Jul 12 19:35:18 linus kernel: [25882.293152] svc: server 00000000ed86c4fe waiting for data (to = 900000)
Jul 12 19:35:18 linus kernel: [25882.293173] svc: 192.168.3.4, port=800: unknown version (2 for prog 100003, nfsd)
Jul 12 19:35:18 linus kernel: [25882.293241] svc: socket 00000000d25fa09a sendto([00000000dc11bc2f 32... ], 32) = 32 (addr 192.168.3.4, port=800)
Jul 12 19:35:18 linus kernel: [25882.293245] svc: server 000000006bec18a0 waiting for data (to = 900000)
Jul 12 19:35:18 linus kernel: [25882.295154] svc: socket 00000000d25fa09a(inet 00000000ad30a7ef), write_space busy=0

我想unknown version (2 for prog 100003, nfsd)这可能意味着客户端正在使用 NFSv2,而服务器不再支持它。事实上,在旧客户端中,内核没有配置对 NFSv3 的支持。但即使我这样做并重新编译内核后,仍然出现相同的错误。

在服务器上,nfsstat说:

Server rpc stats:
calls      badcalls   badfmt     badauth    badclnt
0          7          7          0          0

每次安装尝试时,两个计数都会增加 3,并重试 2 次,以便匹配。 badcalls/badfmt 是吗unknown version (2 for prog 100003, nfsd)

rpcinfo -p 的输出:

dode@linus:~$ rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100005    1   udp  59155  mountd
    100005    1   tcp  44609  mountd
    100005    2   udp  56137  mountd
    100005    2   tcp  37447  mountd
    100005    3   udp  56639  mountd
    100005    3   tcp  57329  mountd
    100003    3   tcp   2049  nfs
    100227    3   tcp   2049
    100003    3   udp   2049  nfs
    100227    3   udp   2049
    100021    1   udp  34312  nlockmgr
    100021    3   udp  34312  nlockmgr
    100021    4   udp  34312  nlockmgr
    100021    1   tcp  34245  nlockmgr
    100021    3   tcp  34245  nlockmgr
    100021    4   tcp  34245  nlockmgr

当服务器运行 Ubuntu 14.04(内核 4.4.0)、16.04(内核 4.15)时,挂载导出工作正常,而当运行 18.04(内核 5.3)或更高版本时,导出会失败。

我也尝试过禁用 NFS v4,例如

那么也许内核 5 中相关的东西(RPC?)发生了变化?

答案1

终于我可以让它工作了。

尽管我在支持 NFSv3 的旧 SuSE 机器上编译了内核,但它似乎仍然使用 v2。也许需要一个内核选项来启用 v3?

在 Ubuntu 20.04 服务器上,命令sudo cat /proc/fs/nfsd/versions返回:

-2 +3 -4 -4.0 -4.1 -4.2

所以,不支持 v2。

要启用 v2,需要添加-V 2到:RPCNFSDCOUNT/etc/default/nfs-kernel-server

# Number of servers to start up
RPCNFSDCOUNT="8 -V 2 --no-nfs-version 4"

然后只需重新启动nfs-kernel-server即可使更改生效:

sudo systemctl restart nfs-kernel-server

之后,在旧 SuSE 机器上安装 NFS 导出再次起作用:-)

相关内容