并发 NFS 访问

并发 NFS 访问

如同并发 FTP 访问

NFS 如何处理并发文件访问?假设一个客户端正在更新/覆盖 NFS 服务器上的文件,而服务器上的一个进程同时直接从文件系统读取同一个文件。NFS/Linux 中是否存在某种文件读/写的原子处理,还是我必须使用 tmp 文件来确保数据一致性?

我担心读取文件的过程会得到损坏的数据。

答案1

特定的守护进程(rpc.statd 和 rpc.lockd)有助于实现操作系统级锁定,但一般来说,您不想依赖它,正如 Josip 所写,许多 Unix 应用程序都实现了自己的应用程序级锁定。

如果您要对文件进行写争用,标准做法是首先不要通过 NFS 提供此类文件。

答案2

这些冲突通常通过锁来解决。应用程序需要确保锁定正确。话虽如此,需要注意的是,大多数应用程序确实倾向于锁定文件,尤其是在写入期间。

答案3

NFS 实现了所谓的 close-to-open 一致性,这是一种弱缓存一致性模型。请参阅NFS 4 RFC

换句话说,当修改文件的客户端关闭文件时,该客户端会将写入的数据刷新到服务器。如果此后其他客户端打开该文件,它将看到新内容。或者,如果其他“客户端”是服务器上的本地进程,它将立即看到它,无需重新打开。

如果您需要对缓存进行更细粒度的控制,则需要使用字节范围锁。同样,请参阅 NFS 4 RFC 中的第 9.3.2 节。在这种情况下,NFS 客户端将在释放写锁时刷新数据,并在获取锁时重新验证其缓存。

相关内容