- 是否有可靠的方法来检查该文件是否存在?在上面给出的场景中,lstat文件返回成功,应用程序仅在尝试移动文件后失败。
这是正常的NFS行为。
那是不可能做手工,因为NFS伪装成一个正常的POSIX兼容的文件系统。
我试过一次代码close()/ open()试图以某种方式减轻NFS客户端缓存的影响。在我的情况下,我需要读取写入其他服务器上的文件的信息。但即使重新开放的伎俩也接近零效应。我不能将fdatasync()添加到写入端,因为这会降低整个应用程序的速度。
我迄今为止对NFS的使用经验是,你无能为力。在关键代码路径中,我简单地编码以重试返回ESTALE的文件操作。
- 如何在NFS的情况下写的可靠的文件管理代码一些一般性的提醒?
国防部我下来你想要的,但如果你的客户想要的可靠性,他们应该不会使用NFS。
例如,如果客户需要可靠性,我公司例如广告使用正确的分布式文件系统(我故意省略品牌)。我们的核心软件不保证在NFS上运行,我们不支持这种配置。但在我们的情况下,我们确实需要保证只要数据写入FS,它们就可以在所有其他节点上访问。
NFS的一致性可以实现,但以性能为代价,使得NFS几乎不可用。 (检查它的挂载选项。)NFS正在疯狂地缓存,以隐藏它是服务器文件系统的事实。为了使所有操作一致,NFS客户端必须同步转到NFS服务器以进行每个小操作,绕过本地缓存。那永远不会很快。
但是因为我们在这里谈论Linux,所以可以建议客户使用该软件来评估可用的群集文件系统。例如。 RedHat现在正式支持GFS。我听说过使用CodaFS的人,但没有很好的信息。
谢谢。你已经证实了我自己的大部分NFS研究结果。猜猜我会编写一堆ESTALE检查,因为我们没有计划迁移到其他存储。我现在不会接受这个答案,希望有人会提出更多关于主题的信息。 – begray 2010-07-08 18:57:33