【问题标题】:NFS client side locking for a file currently being written to in the remote NFS serverNFS 客户端锁定当前正在远程 NFS 服务器中写入的文件
【发布时间】:2012-12-03 10:42:47
【问题描述】:

我已经在我的本地机器上挂载了一个 NFS 挂载(所以,我想我的机器是 NFS 客户端),并且正在由托管 NFS 挂载的远程机器(NFS 服务器)在 NFS 挂载中写入一个文件。现在,我如何能够使用 JAVA 检测到远程计算机中写入的文件在我从本地计算机读取之前已关闭?

或者,有没有其他方法可以实现我想要的?

编辑:我还想提一下,我无法控制远程 NFS 服务器。我只能以只读模式挂载。

【问题讨论】:

  • 直到远程系统关闭文件并刷新数据,您将读取旧数据。
  • Petesh:我需要一种方法来确保正在写入的文件在 NFS 客户端读取之前已关闭。我该怎么做?
  • 您可以使用文件锁定来尝试强制执行顺序,但是,由于它是远程文件协议,因此无法保证它会保持一致
  • Petesh:可以从客户端启用文件锁定吗?因为,我对 NFS 挂载只有只读权限。

标签: java linux linux-kernel nfs nfsclient


【解决方案1】:

正如您所说,您无法控制 NFS 服务器,也无法控制更新 NFS 服务器上文件的程序,因此您无能为力。您真正可以利用的唯一一件事是,当文件更新时,它的修改时间也会更新。这应该可以使用 File.lastModified() 提供给您的 java 客户端。如果您的应用程序记住了上次修改日期,那么您至少可以知道自上次阅读以来是否有要处理的数据。这绝对不是完美的。有竞争条件等,但取决于您的应用程序需要/做什么,这可能就足够了。您无法判断文件在服务器上是关闭还是打开。

如果文件修改显示缓慢,您也可以使用 noac 挂载选项进行挂载。虽然这会损害常规 NFS 客户端上的 NFS 性能,但如果您的计算机没有在该驱动器上使用大量其他 NFS 文件,它可能对您有用。请参阅“man nfs”。

附带说明,我看不出文件锁定会有所帮助,因为您没有表明 NFS 服务器上的应用程序无论如何都使用锁。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 2011-01-27
    • 2017-01-01
    • 1970-01-01
    • 2013-07-14
    相关资源
    最近更新 更多