Linux 的 NFSv3 实现中的文件删除默认是同步的吗?

Linux 的 NFSv3 实现中的文件删除默认是同步的吗?

我看到可以指示 NFS 客户端创建文件通过sync mount选项或O_SYNC open标志同步(因为它们默认是异步的),但我没有看到任何指示文件是否删除是同步的。RFC 1813在这种情况下似乎没有指定客户端行为。

man 5 nfs

同步挂载选项

NFS 客户端对待同步挂载选项的方式与某些其他文件系统不同(有关通用同步和异步挂载选项的说明,请参阅 mount(8))。如果既未指定同步也未指定异步(或者指定了异步选项),则 NFS 客户端会延迟向服务器发送应用程序写入,直到发生以下任一事件: 内存压力强制回收系统内存资源。应用程序使用sync(2)、msync(2)或fsync(3)显式刷新文件数据。

应用程序使用 close(2) 关闭文件。

文件通过 fcntl(2) 锁定/解锁。

换句话说,在正常情况下,应用程序写入的数据可能不会立即出现在托管该文件的服务器上。如果在安装点上指定了同步选项,则任何将数据写入该安装点上的文件的系统调用都会导致在系统调用将控制权返回到用户空间之前将数据刷新到服务器。这在客户端之间提供了更好的数据缓存一致性,但会带来显着的性能成本。

应用程序可以使用 O_SYNC 打开标志强制应用程序对单个文件的写入立即转到服务器,而无需使用同步挂载选项。

我认为删除/取消链接文件也会close这样(默认情况下指定为同步),但我不确定这一点。

我知道,如果仍然存在指向该文件的硬链接,该文件实际上可能不会在 NFS 服务器上删除,但我认为这超出了这个问题的范围。

相关内容