请注意,这是 QNAP NAS 社区中的交叉发布问题:http://forum.qnap.com/viewtopic.php?f=35&t=96526&p=427018#p427018
非常感谢任何评论和建议以及相关信息的提示。
我无法从运行 Ubuntu 14.04.1 (LTS) 的 NFS 客户端向我的 NFS 服务器 (QNAP NAS) 挂载 NFS。我的环境是:
- NFS 服务器:QNAP TS-669 Pro 运行固件 4.1.0(日期:2014/06/12)
- NFS 客户端:运行 Ubuntu 14.04.1 LTS 桌面的 ECS LIVA(一台小型准系统电脑)。
- 两个系统通过 1000Base-T 以太网连接并可实现 IP 访问。
- 名称解析由本地注册表(/etc/hosts)完成,并且getent hosts 主机名命令返回两个节点上正确且一致的 IP 地址。
- NFS 服务器上启用了 NFS 服务,并且在“共享文件夹”配置应用程序的“NFS 主机访问”选项卡上对特定共享文件夹(即“/nfs”)授予了 NO_LIMIT 访问权限:事实上,我可以通过在 NAS 上发出“exportfs -rva”命令来确认它是世界 NFS 导出的。
- 由于 Ubuntu(NFS 客户端)默认不安装 NFS 客户端软件包,因此我明确安装了 nfs-common 软件包,如下所述:设置 NFS HOW-TO(https://help.ubuntu.com/community/SettingUpNFSHowTo#NFS_Client); rpcbind 包似乎是默认安装的。
在 NFS 客户端上,如果我运行命令“挂载-t nfs nas:/nfs /mnt”,五到十分钟后会输出“mount.nfs: 连接超时”。即使我在尝试 NFS 挂载时使用 -overs=3 选项指定 NFS 版本 3 协议,也会返回相同的结果。此外,命令“显示挂载-e“最终会列出导出的NFS共享文件夹(目录)名称,但也需要五到十分钟才能完成。
在 NFS 服务器上,“exportfs-rva”命令返回以下警告消息,但我相信该消息与问题无关(我在此代码示例中通过 SSH 访问 NAS):
[~] # exportfs -rva
exportfs: /etc/exports [1]: Neither 'subtree_check' or 'no_subtree_check' specified for export "*:/share/MD0_DATA/Public".
Assuming default behaviour ('no_subtree_check'). NOTE: this default has changed since nfs-utils version 1.0.x
exportfs: /etc/exports [2]: Neither 'subtree_check' or 'no_subtree_check' specified for export "*:/share/MD0_DATA/nfs".
Assuming default behaviour ('no_subtree_check'). NOTE: this default has changed since nfs-utils version 1.0.x
exporting *:/share/MD0_DATA/nfs exporting *:/share/MD0_DATA/Public
在 NFS 客户端上,山命令需要很长时间(超过五分钟)才能完成。我指定了 vers=3 选项,因为我知道 QNAP 默认不支持 NFS V4,而 NFS V3 满足我的要求。是否指定 tcp 和/或 nolock 选项并不重要(行为相同)。
root@livak5:~# mount -t nfs -vvv -overs=3,tcp,nolock nas:/share/MD0_DATA/nfs /mnt
mount: fstab path: "/etc/fstab"
mount: mtab path: "/etc/mtab"
mount: lock path: "/etc/mtab~"
mount: temp path: "/etc/mtab.tmp"
mount: UID: 0
mount: eUID: 0
mount: spec: "nas:/share/MD0_DATA/nfs"
mount: node: "/mnt"
mount: types: "nfs"
mount: opts: "vers=3,tcp,nolock"
mount: external mount: argv[0] = "/sbin/mount.nfs"
mount: external mount: argv[1] = "nas:/share/MD0_DATA/nfs"
mount: external mount: argv[2] = "/mnt"
mount: external mount: argv[3] = "-v"
mount: external mount: argv[4] = "-o"
mount: external mount: argv[5] = "rw,vers=3,tcp,nolock"
mount.nfs: timeout set for Sun Aug 24 11:24:44 2014
mount.nfs: trying text-based options 'vers=3,tcp,nolock,addr=192.168.11.50'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying 192.168.11.50 prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=6
mount.nfs: trying 192.168.11.50 prog 100005 vers 3 prot TCP port 41687
mount.nfs: mount(2): Connection timed out
mount.nfs: trying text-based options 'vers=3,tcp,nolock,addr=192.168.11.50'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying 192.168.11.50 prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=6
mount.nfs: trying 192.168.11.50 prog 100005 vers 3 prot TCP port 41687
mount.nfs: mount(2): Connection timed out
mount.nfs: trying text-based options 'vers=3,tcp,nolock,addr=192.168.11.50'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying 192.168.11.50 prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=6
mount.nfs: trying 192.168.11.50 prog 100005 vers 3 prot TCP port 41687
mount.nfs: mount(2): Connection timed out
mount.nfs: Connection timed out
在 NFS 客户端上,端口映射器看起来在 NFS 版本 2、3 和 4 上运行良好:
root@livak5:~# 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
100024 1 udp 57148 status
100024 1 tcp 52831 status
在 NFS 服务器上,我尝试检查地图绘制器正在从 NFS 客户端运行,因为它没有rpc信息安装命令:
root@livak5:~# nc -zv nas 111
Connection to nas 111 port [tcp/sunrpc] succeeded!
root@livak5:~# rpcinfo -s nas
program version(s) netid(s) service owner
100000 2,3,4 local,udp,tcp portmapper superuser
100011 2,1 tcp,udp rquotad superuser
100005 3,2,1 tcp,udp mountd superuser
100003 3,2 udp,tcp nfs superuser
100227 3,2 udp,tcp - superuser
100021 4,3,1 tcp,udp nlockmgr superuser
100024 1 tcp,udp status superuser
后面的命令(rpc信息) 需要很长时间(超过五分钟)才能完成,我相信这复制了问题的根本原因。请注意,在 TCP 端口 2049 和 41687 上,相应的守护进程正在监听 NAS。我可以确认这一事实,因为数控命令在 NFS 客户端上立即返回 NAS,如以下输出所示:
root@livak5:~# nc -zv nas 2049
Connection to nas 2049 port [tcp/nfs] succeeded!
root@livak5:~# nc -zv nas 41687
Connection to nas 41687 port [tcp/*] succeeded!
奇怪的是,我可以将 NFS 版本 3 挂载到 NAS 本身,如下面的输出所示(在此代码示例中,我通过 SSH 访问 NAS):
[~] # mkdir /mnt2
[~] # mount -overs=3 nas:/share/MD0_DATA/public /mnt2
[~] # df -k
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/ram0 154691 137854 16837 89% /
devtmpfs 1531580 4 1531576 0% /dev
tmpfs 65536 160 65376 0% /tmp
/dev/md9 521684 126312 395372 24% /mnt/HDA_ROOT
/dev/md0 11622485880 410664920 11211296672 4% /share/MD0_DATA
/dev/md13 379888 259868 120020 68% /mnt/ext
tmpfs 32768 0 32768 0% /.eaccelerator.tmp
nas:/share/MD0_DATA/public/11622485888 411189216 11211296672 4% /mnt2
虽然看起来好像我在 NFS 客户端上遇到了某种端口阻塞问题,但 Ubuntu 14.04.1 似乎默认不启用 ufw(简单防火墙,它实际上是 iptables 的前端),如以下 wiki 文档所示:简单防火墙(不知何故,我无法在此处放置 wiki URL)。我可以通过在 NFS 客户端上运行命令来确认没有任何东西被阻塞:
root@livak5:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
答案1
问题根源在于我使用的以太网交换机(NetGEAR GS116Ev2)的固件错误。将固件从 2.0.0.23 更新到 2.0.1.17 后,问题消失。
答案2
最近几个晚上我都在寻找问题的原因,这些问题和您遇到的一样(花了很长时间才回复 showmount 或 rpcinfo)。最后关闭了两个不同的受管交换机的 DoS 预防功能,这两个交换机阻塞了 nfs 端口映射(默默地,没有日志)。 nfs 无法使用新的托管交换机 - 不知道为什么 - 两个 ZyXel 交换机的 DoS 破坏了端口映射