我们有一个场景,我们将使用任何较早的快照来还原生产FS,同时FS正在为客户提供服务。
如果FH不存在于我们还原的快照中,那么客户端将看到无效的FH?我想了解无效的FHs对客户端的影响,例如:当持续收到无效的FHs时,应用程序是否会崩溃?有其他影响吗?
这取决于客户端的实现(和版本)。
以最近的典型例子--Linux为例,有时应用程序会收到一个 "FH"。ESTALE
错误,有时客户端会重新执行查找以获得一个新的文件句柄。
引用 Linux NFS FAQ:
客户端在路径名解析过程中遇到ESTALE错误时可以恢复,但在READ或WRITE操作过程中不能恢复。NFS客户端通过在读或写请求期间文件被替换时立即通知应用程序来防止数据损坏。毕竟,如果应用程序向错误的文件写入或从错误的文件读取,通常是灾难性的。
因此在一般情况下,为了从ESTALE错误中恢复,应用程序必须关闭发生错误的文件或目录,并重新打开它,这样NFS客户端就可以再次解析路径名,并检索新的文件句柄。
旧的Linux NFS客户端不能从ESTALE错误中恢复,即使在路径名解析过程中也是如此。在2.6.12及以后的内核中,Linux VFS层可以在遇到ESTALE时重新驱动路径名解析,以适当恢复。