NFSv3 文档大量讨论“安全异步写入”的概念(A1 的最后一点):
http://nfs.sourceforge.net/#section_a
这不是指服务器导出文件中的同步/异步选项(因为导出文件中的异步选项并不安全)。据我所知,安全异步写入是同步/异步导出选项的混合。它允许服务器回复而不立即刷新到稳定存储,但客户端不会从缓存中删除写入请求,直到它收到已提交到稳定存储的确认(并且还检测服务器是否断电/重启)。我相信此选项是在客户端设置的,但我没有遇到任何说明如何执行此操作的文档。有什么想法吗?
答案1
这只是一系列带有 COMMIT 或 WRITE 同步的 WRITE 调用。行为由应用程序写入 + fsync 或 VM 决定回收内存页面时控制。导出选项 async/sync 可以强制服务器行为,例如,即使客户端没有要求,服务器也可能始终同步数据。检查https://www.rfc-editor.org/rfc/rfc1813#section-3.3.7和https://www.rfc-editor.org/rfc/rfc1813#section-3.3.21更多细节。
答案2
这里的回答让我感到困惑,但这可能有助于避免其他人感到困惑:
NFSv3 & NFSv3 在您在导出文件中选择“同步”时自动实现“安全异步写入”,并且 NFS 服务器仅在客户端执行 NFS 提交(由客户端上的 close() 或 sync() 或 fsync() 触发)后才会刷新到磁盘。
您仍然可以在导出文件中选择“异步”,NFS 服务器将忽略来自客户端的 NFS 提交,仅在空闲时刷新,除非您拥有顶级 UPS,并且记住永远不要对 NFS 服务器进行硬重启(没有服务器上的手动或隐式同步)或电源循环,否则这并不安全。NFS 服务器似乎没有任何选项可以仅在客户端的 sync() 或 fsync() 上刷新到磁盘并忽略 close(),这可以在批量写入大量小文件并在最后进行一次刷新到磁盘时安全地提高性能,即使这是 Linux 对本地磁盘的默认预期行为。