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

Vin*_*nan 7 linux nfs

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

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

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

以下是共享文件夹列表

[root@server ~]# showmount -e
Export list for server.sanith.com:
/india       *
/home/guests *
Run Code Online (Sandbox Code Playgroud)

出于测试目的,我现在已将一个客户端连接到服务器.以下输出来自"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)
Run Code Online (Sandbox Code Playgroud)

我试着用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 ~]#
Run Code Online (Sandbox Code Playgroud)

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

小智 10

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

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


小智 8

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

netstat | grep :nfs
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说在 CentOS 6.x 上不起作用。我必须这样做:`sudo netstat -a | grep nfs` (2认同)

kar*_*bal 7

由于netstat并不总是可用,因此ss您也可以使用它来替换

ss -a|grep nfs


mr.*_*tic 5

NFS 在 UDP 和 TCP 上工作,只有打开的 TCP 连接才会显示在netstat或 中ss。此外,作为一个分布式文件系统,它(历史上)也有不少问题PDF(状态、缓存、锁定、通知、安全性 \xe2\x80\x94 其中一些通过额外的 RPC 功能提供了解决方案,例如rpc.statd)。

\n\n

在 Linux NFS 服务器上(请参阅 参考资料man rpc.mountd),客户端挂载/卸载请求记录在 中/var/lib/nfs/rmtab,就像/etc/mtab,所以答案应该是:

\n\n
cat /var/lib/nfs/rmtab\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果它是空的,那么你要么有问题rpc.mountd(所以您应该检查正在运行的 RPC 服务),要么所有客户端都是 NFSv4,不使用此功能。

\n\n

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

\n\n
10.1.2.0/24:/path/to/export1:0x000...flags\n10.1.2.10:/path/to/export1:0x0000...flags\n10.1.2.22:/path/to/export1:0x0000...flags\n10.1.2.0/24:/path/to/export2:0x000...flags\n10.1.2.22:/path/to/export2:0x0000...flags\n10.1.2.99:/path/to/export2:0x0000...flags\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

请注意手册页中的警告:

\n\n
\n

然而,这个文件主要是装饰性的。第一,即使在调用 rpc.mountd\ 的 UMOUNT 过程之后,客户端也可以继续使用文件句柄。第二,如果客户端在未通知 rpc.mountd 的情况下重新启动,则 rmtab 中将保留陈旧条目。

\n
\n\n

新内核中的方法/proc/fs/nfsd/client(@Vsevolod Gromov 的答案)在这方面应该更好,但因为它只支持 NFSv4 客户端,所以应该表现得更好。

\n