如何找出哪个客户端在NFS上有文件锁定


2

我们有一个由NFS4支持的Centos 7集群。它上面有一些文件 使用LOCK_EX块运行flock(并使用LOCK_NB返回 资源暂时不可用)。只有少量文件,而且它们都是 所有用户都有理由聚集()的。

因此,有些东西锁定了这些文件。但谁呢?我们试过了 在集群中的每台机器上运行lsof,并没有提出 什么,但可能有一些我们不知道的客户。该 lslocks程序没有帮助。

我怎样才能找到什么机器,更不用说什么过程有锁?
或者NFS是否可能混淆并认为存在锁定 当这个过程早已消失?在哪种情况下,我怎么知道 是否是这种情况,我将如何清除它?重启NFS 服务器需要更改请求,因此无法轻松完成。
同样重新启动所有客户端的策略也是如此。

虽然许多网页都说flock()不能在NFS上运行, 其他人说它确实(例如 https://serverfault.com/questions/66919/file-locks-on-an-nfs ), 和我的 测试证实了这一点。例如,运行:

perl -E'打开$ fh,“>>”,换班或死“打开:$!”;说“完全开放”; flock($ fh,2)或死“flock:$!”;说“完成鸡群”;睡10'somefilename

在一个客户端上运行它,等待5秒,在另一个客户端上运行它,然后运行第二个 一个人不会打印“Done flock”,直到第一个退出5秒 后来。正是你所期待的。所以NFS服务器知道该文件 锁住了。如何让它告诉我它认为谁锁定了它?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.