如何防止 showmount 挂起

如何防止 showmount 挂起

我们正在实施一个 Web 前端来管理 NFS 和 CIFS 共享文件夹。其中一部分显示任意 IP 地址可用的共享点(导出)。

后端用于smbclient -L <ip> -U <user>查询 SMB/CIFS 共享,并用于showmount -e <ip>查询 NFS 共享。

但是,showmount如果目标服务器运行任何类型的防火墙(无论是 Windows、Mac 还是 Linux),则挂起。(这些 SE/SU 帖子这里这里提到 NFS 存在防火墙问题)

我们对现有和不存在的机器都测试了 show mount。测试了以下几种组合showmount -e <ip>

Machine NFSD     Firewall   Result
Exists  Stopped  Off        clnt_create: RPC: Unable to receive
Exists  Stopped  On         HANGS
Exists  Running  On         HANGS
Exists  Running  Off        returns list of exports
None    n/a      n/a        clnt_create: RPC: Unable to receive

挂起时showmount,只能通过SIGKILL(-9) 来终止它。我们尝试使用timeout经过一段时间后放弃但它也会挂起。

从另一个终端运行strace显示它卡在connect

$ strace -p 63552
strace: Process 63552 attached
connect(4, {sa_family=AF_INET, sin_port=htons(111), sin_addr=inet_addr("192.168.2.10")}, 16

问题在这种情况下,我们怎样才能使用showmount而不挂起?

一个想法是编写一个程序,首先尝试打开与 NFS IP:port 的连接,如果成功,则运行showmount。但是还有其他方法吗?

后端在 Centos 8 上运行。

相关内容