【问题标题】:How to get the list of clients connected to an NFS server within a local network? [closed]如何获取连接到本地网络中 NFS 服务器的客户端列表? [关闭]
【发布时间】:2016-04-27 10:52:33
【问题描述】:

我有一个具有文件夹权限的 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 ~]#

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

【问题讨论】:

    标签: linux nfs


    【解决方案1】:

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

    netstat | grep :nfs
    

    【讨论】:

    • 这对我来说在 CentOS 6.x 上不起作用。我必须这样做:sudo netstat -a | grep nfs
    • 为避免延迟,请使用 netstat -n 表示“不解析名称”并搜索 :843(默认端口)而不是 :nfs
    • 默认端口不是2049吗?
    【解决方案2】:

    NFS 通过 UDP 和 TCP 工作,只有打开的 TCP 连接会显示在 netstatss 中。此外,作为一个分布式文件系统,它(历史上)在problemsPDF(状态、缓存、锁定、通知、安全性)中占有相当大的份额——其中一些通过额外的 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 应该表现得更好。

    【讨论】:

      【解决方案3】:

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

      ss -a|grep nfs

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:
          netstat -a | grep nfs
          

          这在 Ubuntu GNOME 16.04 上对我有用。

          【讨论】:

            猜你喜欢
            • 2011-12-26
            • 2017-01-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-11-21
            • 1970-01-01
            相关资源
            最近更新 更多