我有一个具有文件夹权限的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 -a
和showmount -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)
注意:在此测试期间,服务器上会暂时禁用防火墙.请指教.
小智 8
您可以通过在NFS服务器上运行以下命令来找到连接的NFS客户端:
netstat | grep :nfs
Run Code Online (Sandbox Code Playgroud)
NFS 在 UDP 和 TCP 上工作,只有打开的 TCP 连接才会显示在netstat
或 中ss
。此外,作为一个分布式文件系统,它(历史上)也有不少问题PDF(状态、缓存、锁定、通知、安全性 \xe2\x80\x94 其中一些通过额外的 RPC 功能提供了解决方案,例如rpc.statd
)。
在 Linux NFS 服务器上(请参阅 参考资料man rpc.mountd
),客户端挂载/卸载请求记录在 中/var/lib/nfs/rmtab
,就像/etc/mtab
,所以答案应该是:
cat /var/lib/nfs/rmtab\n
Run Code Online (Sandbox Code Playgroud)\n\n如果它是空的,那么你要么有问题rpc.mountd
(所以您应该检查正在运行的 RPC 服务),要么所有客户端都是 NFSv4,不使用此功能。
在我检查过的版本上rmtab
显示为:
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\n\n然而,这个文件主要是装饰性的。第一,即使在调用 rpc.mountd\ 的 UMOUNT 过程之后,客户端也可以继续使用文件句柄。第二,如果客户端在未通知 rpc.mountd 的情况下重新启动,则 rmtab 中将保留陈旧条目。
\n
新内核中的方法/proc/fs/nfsd/client
(@Vsevolod Gromov 的答案)在这方面应该更好,但因为它只支持 NFSv4 客户端,所以应该表现得更好。