文件句柄是在服务器上创建的,其中包含唯一标识文件和目录的信息。在 NFS 版本 2 和 3 中,服务器会返回持久性文件句柄。这样,客户机即可确保服务器会生成始终引用同一文件的文件句柄。例如:
如果删除某个文件并将其替换为同名文件,则服务器会为新文件生成新的文件句柄。如果客户机使用旧的文件句柄,则服务器会返回一条错误消息,说明此文件句柄已过时。
如果重命名文件,则文件句柄将保持不变。
如果必须重新引导服务器,则文件句柄将保持不变。
因此,当服务器从客户机收到包括文件句柄的请求时,解决方案会非常简单,并且文件句柄会始终引用正确的文件。
这种为 NFS 操作标识文件和目录的方法对大多数基于 UNIX 的服务器都很有效。但是,此方法不能在依赖其他标识方法(如文件的路径名)的服务器上实现。为了解决此问题,NFS 版本 4 协议允许服务器声明其文件句柄为可变句柄。这样,即可更改文件句柄。如果文件句柄确实已更改,则客户机必须找到新的文件句柄。
与 NFS 版本 2 和 3 一样,Solaris NFS 版本 4 服务器始终提供持久性文件句柄。但是,访问非 Solaris NFS 版本 4 服务器的 Solaris NFS 版本 4 客户机必须在服务器使用可变文件句柄时支持这些句柄。具体来说,当服务器通知客户机文件句柄可变时,客户机必须高速缓存路径名和文件句柄之间的映射。客户机会一直使用可变文件句柄,直到句柄过期为止。句柄过期后,客户机会执行以下操作:
刷新引用此文件句柄的高速缓存信息
搜索此文件的新文件句柄
重试此操作
服务器会始终通知客户机哪些文件句柄为持久性句柄,哪些文件句柄为可变句柄。
可变文件句柄可能会由于以下任一原因过期:
关闭文件
迁移文件句柄的文件系统
客户机重命名文件
服务器重新引导
请注意,如果客户机无法找到新的文件句柄,则会在 syslog 文件中放入一条错误消息。进一步尝试访问此文件会失败,并显示 I/O 错误。