如何获取连接到本地网络中的NFS服务器的客户端列表?

时间:2016-01-21 09:19:23

标签: linux nfs

我有一个具有文件夹权限的NFS服务器,如下所示。有50个客户端需要在同一网络中连接到此服务器。我想知道查找命令的是什么,这些命令是从服务器访问此服务器的客户端。

NFS服务器配置文件如下所示。

[root@server ~]# cat /etc/exports
/home/guests    *(rw,sync)
/india          *(rw,sync)

以下是共享文件夹列表

[root@server ~]# showmount -e
Export list for server.sanith.com:
/india       *
/home/guests *

出于测试目的,我现在已将一个客户端连接到服务器。以下输出来自“client2”机器。

[root@client2 ~]# showmount -e 192.168.1.10
Export list for 192.168.1.10:
/india       *
/home/guests *
[root@client2 ~]# mount -t nfs 192.168.1.10:/india /test
[root@client2 ~]# mount
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
/dev/sda3 on /home type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
gvfs-fuse-daemon on /root/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
192.168.1.10:/india on /test type nfs (rw,vers=4,addr=192.168.1.10,clientaddr=192.168.1.12)

我尝试使用showmount -ashowmount -d,但不确定哪些邮件没有列出连接的客户端机器。

[root@server ~]# showmount -a
All mount points on server.sanith.com:
[root@server ~]# man showmount
[root@server ~]# showmount -d
Directories on server.sanith.com:
[root@server ~]# netstat -an | grep 192.168.1.10:2048
[root@server ~]# netstat -an | grep 192.168.1.10:2049
[root@server ~]# cat /var/lib/nfs/rmtab
[root@server ~]#

注意:在此测试期间,服务器上会暂时禁用防火墙。 请指教。

5 个答案:

答案 0 :(得分:5)

通过在NFS服务器上运行以下命令,可以找到已连接的NFS客户端:

netstat | grep :nfs

答案 1 :(得分:2)

netstat -a | grep nfs

这对我在Ubuntu GNOME 16.04上有用。

答案 2 :(得分:1)

由于netstat并非总是可用,因此将ss替换,您也可以使用

ss -a|grep nfs

答案 3 :(得分:1)

NFS可同时在UDP和TCP上运行,只有打开的TCP连接将显示在netstatss中。另外,作为分布式文件系统,它(历史上)应有problems PDF 的应有份额(状态,缓存,锁定,通知,安全性-其中一些通过额外的RPC功能具有解决方案,例如rpc.statd)。

在Linux NFS服务器上(请参见man rpc.mountd),客户端安装/卸载请求记录在/var/lib/nfs/rmtab中,就像/etc/mtab一样,因此答案应该是:

cat /var/lib/nfs/rmtab

如果为空,则说明rpc.mountd有问题(因此您应该检查RPC服务是否正在运行),或者所有客户端都是不使用此功能的NFSv4。

在我检查过的rmtab版本中,显示为:

10.1.2.0/24:/path/to/export1:0x000...flags
10.1.2.10:/path/to/export1:0x0000...flags
10.1.2.22:/path/to/export1:0x0000...flags
10.1.2.0/24:/path/to/export2:0x000...flags
10.1.2.22:/path/to/export2:0x0000...flags
10.1.2.99:/path/to/export2:0x0000...flags

即列出了每个安装点,然后是使用它的客户端。

请注意手册页中的警告:

但是,此文件主要是装饰性的。第一,即使调用rpc.mountd的UMOUNT过程,客户端也可以继续使用文件句柄。还有两个,如果客户端在没有通知rpc.mountd的情况下重新启动,则过时的条目将保留在rmtab中。

在这方面,较新的内核中的/proc/fs/nfsd/client方法(@Vsevolod Gromov的答案)应该更好,但是因为只有supports NFSv4 clients应该表现得更好。

答案 4 :(得分:0)

从Linux内核5.3开始,您可以使用名为/proc/fs/nfsd/clients的特殊目录。

您可以通过uname -r命令检查内核版本