我有一个 linux 嵌入式系统(在对其进行主动开发时)将其根文件系统挂载为从我的 ubuntu 盒子导出的 nfs 共享。所以要特别清楚:嵌入式 linux 是 nfs 客户端,我的 ubuntu 机器是 nfs 服务器。我对执行实际 nfs 安装的嵌入式系统没有太多控制权。
当我升级到 ubuntu 17.10 时,我发现这不再起作用。
经过多次调试,我想我将问题确定为协议版本不匹配:在使用wireshark嗅探流量时,我发现嵌入式系统使用旧协议版本2发送NFS数据包,但这是我在运行的ubuntu盒子上得到的
$ rpcinfo -p localhost
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 43512 mountd
100005 1 tcp 39783 mountd
100005 2 udp 35844 mountd
100005 2 tcp 58287 mountd
100005 3 udp 48188 mountd
100005 3 tcp 60599 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049
100003 3 udp 2049 nfs
100227 3 udp 2049
100021 1 udp 44366 nlockmgr
100021 3 udp 44366 nlockmgr
100021 4 udp 44366 nlockmgr
100021 1 tcp 43079 nlockmgr
100021 3 tcp 43079 nlockmgr
100021 4 tcp 43079 nlockmgr
100024 1 udp 50305 status
100024 1 tcp 42983 status
Run Code Online (Sandbox Code Playgroud)
所以没有 nfs 版本 2,只有 3 和 4。
任何人都知道如何向我的 nfs 服务器添加 nfs 版本 2 支持?
小智 10
您需要修改 /etc/default/nfs-kernel-server 以获得这些行:
RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"
# To confirm above mods are in effect after service restart use
# cat /run/sysconfig/nfs-utils
# or
# service nfs-kernel-server status
#
Run Code Online (Sandbox Code Playgroud)
并重启服务
service nfs-kernel-server restart
Run Code Online (Sandbox Code Playgroud)
请注意在服务重启后您可能需要重新启动共享
zfs share -a
Run Code Online (Sandbox Code Playgroud)
最后确认是否支持协议 2(必要时也支持 tcp 和 udp)
rpcinfo -p servername | fgrep nfs
Run Code Online (Sandbox Code Playgroud)
你应该看到这个
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
Run Code Online (Sandbox Code Playgroud)
小智 5
如果升级到Ubuntu 18.04,你会发现,没有任何RPCNFSDOPTS变化了在/etc/default/nfs-kernel-server。
我不得不劫持RPCNFSDCOUNT它才能使用 NFS v2:
RPCNFSDCOUNT="--nfs-version 2 8"
Run Code Online (Sandbox Code Playgroud)
证明它有效:
$ service nfs-kernel-server restart
$ cat /proc/fs/nfsd/versions
+2 +3 +4 +4.1 +4.2
Run Code Online (Sandbox Code Playgroud)
在此之后,我可以从 OpenVMS Alpha 8.2 挂载文件系统(...是的,真的,...)
$ tcpip mount dnfs2:[000000] /host=beauty /path="/exports/home" /struct=5
%TCPIP$DNFSMOUNT-S-MOUNTED, /exports/home mounted on _DNFS2:[000000]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8143 次 |
| 最近记录: |