使用在Linux下运行的C,我试图弄清楚如何让两个不同的进程访问位于NFSv4文件系统上的同一个文件。具体来说,我希望有一个程序打开一个文件进行读取,另一个程序打开该文件进行写入。我打算使用来自AWS的新EFS (弹性文件系统),而EFS只是NFSv4。
程序的性质是这样的,从本质上讲,作者只会附加到文件中。读者将永远不会访问新附加的信息,直到作者完成并调用fflush。
NFSv4支持这个场景吗?
或者是否有更好的方法来实现这样的并发NFSv4文件访问?
发布于 2015-06-11 16:13:48
NFS v4确实支持文件上的字节范围锁定(如RFC 3530 "NFS版本4协议“摘录所述):
1.4.5.文件锁定 对于NFS 4协议,对字节范围文件锁定的支持是NFS协议的一部分。文件锁定支持是结构化的,因此不需要RPC回调机制。这与NFS文件锁定协议的早期版本网络锁定管理器( Network,NLM)不同。与文件锁相关联的状态在基于租约的模型下在服务器上维护。服务器为NFS客户端所持有的所有状态定义单个租约期限。如果客户端没有在定义的期间内续订其租约,则服务器可以释放与客户端租约相关的所有状态。客户端可以使用
RENEW操作来续签租约,也可以通过使用其他操作(主要是READ)来隐式续约。
有关锁定和基于租约的模型的更详细信息,请参阅同一RFC的第8节。
您的程序将需要使用fcntl来管理锁定。我的建议是编写一个测试,以检查EFS提供的NFS v4的实际实现是否支持预期的锁定(某些方面在规范中是可选的)。您可以参考这个锁测试套件的源代码,它支持多客户端测试.
https://stackoverflow.com/questions/30685553
复制相似问题