为什么要使用 NFS?

有很多网络文件系统协议在语义上比 NFS 更好。更好的文件系统提供了诸如写入顺序和打开锁定的保证,您可以基于此构建应用程序。大多数文件系统提供更高的性能,并且能够更好地适应高延迟和低带宽的网络连接。一些商业例子包括 RFS(AT&T Unix 的远程文件系统)、AFS(Andrew 文件系统)和 9fs(Plan9 文件系统)。还有一些研究性的,比如 Amoeba。

也有很多方法可以将文件系统添加到 Unix 中。事实上,这正是问题所在——方法太多了。文件系统实现者需要了解每个 Unix 变体的内部结构。文件系统必须在内核中运行,这是一个软实时、共享内存的环境,其中不存在调试工具,并且一个错误可能会锁定整个系统。这些特性都使得内核开发既不便宜也不容易。由于每个内核都不同,因此每个文件系统的移植都需要进行大量的新开发。现在再加上半打主要商业 Unix 的内核源码许可和开发工具包的价格,成本就变得非常高昂。

相比之下,我认为原型化文件系统的唯一明智之地是在用户空间,因为在那里错误成本低廉且调试工具丰富。已经存在几个用户级别的 NFS 文件服务器作为示例,例如 Linux NFS 服务器、AMD 自动挂载程序和加密文件系统。Pgfs 的移植需要一些包含文件的 grep 操作,但 NFS 的普遍存在使得 Sun RPC 支持或多或少地成为标准。挂载系统调用的参数以及导出和挂载守护程序的接口有所不同,但这些都是用户级别的现象。

不要让我对 NFS 的拥护误导您,让您认为 NFS 规范是开放的或完整的,NFS 语义是有用的或 NFS 协议设计得很好。事实并非如此,它们不是,它也不是。但在有人推广更好的网络文件系统之前,它是我们所能获得的最好的选择。

© . All rights reserved.