确定 NFS 共享上的文件是否正在使用

Axe*_*auf 7 nfs usage

设想:

我们正在使用 NFS 共享来允许客户上传原始视频材料。然后从 (NFS) 服务器上的目录轮询文件以便进行处理。由于我们不想处理尚未完成上传的文件,因此我想在服务器端脚本(Bash)中确定该文件是否仍在使用中。

由于该男子页说,双方fuserlsof -N应允许对NFS共享检测正在使用的文件。但是,我没有“看到”服务器上正在使用的文件,这会导致稍后处理中的文件损坏。

设置:

我的 NFS/etc/exports包含这些设置(UID 和 GID 是服务器上共享目录的所有者,换行以便更好地显示):

/export/foo 10.3.2.0/255.255.255.0 
    (rw,sync,no_subtree_check,all_squash,anonuid=1001,anongid=1001)
Run Code Online (Sandbox Code Playgroud)

客户端使用以下命令挂载此共享:

10.3.2.197:/export/foo  /data002/  nfs  defaults        0 0
Run Code Online (Sandbox Code Playgroud)

服务器是使用“nfs-kernel-server 1:1.2.0-4ubuntu4”的 Ubuntu 10.04,客户端是 SLES 10 SP2

当我在客户端(在共享目录内)打开一个文件时,使用

echo "Hello" > test.txt && tail -f foo.txt
Run Code Online (Sandbox Code Playgroud)

然后检查(仍在客户端上)文件是否正在使用中

fuser foo.txt
Run Code Online (Sandbox Code Playgroud)

我可以看到该文件正在使用中。但是,在服务器端(fuser foo.txtlsof -N | grep foo.txt)检查时,我没有得到任何使用信息。

如果当前正在使用 NFS 共享上的文件(无论是本地还是远程),我如何检查服务器?或者我在当前的设置中做错了什么?

lyn*_*man 6

lsof 只会显示您的本地系统正在使用哪些资源,在任何情况下它都不会显示任何外国资源获取,但有一种解决方法......

NFS 服务器上的 lockd 守护程序将跟踪所有远程使用情况,如果您在另一个节点写入时尝试访问该文件,它将对该文件发出锁定,因此,如果您正在使用它(您的挂载选项有点指向这样)你可以在这种情况下使用 lsof 来显示文件是否被锁定。