NFS 实现者入门

表 2

NFS 服务器是“笨”的,NFS 客户端是“聪明”的。 大部分 NFS 结果的缓存都发生在 NFS 客户端上。 NFS 请求包含一个操作码和参数。 服务器处理请求并返回结果。 NFS 通过两种方式识别文件系统条目,如文件和目录:通过“NFS 文件句柄”和“文件名”。 当一个操作需要文件名和文件句柄时,文件句柄通常指向文件名所在的目录。 所有 NFS 操作都返回一个成功/失败代码。 此外,许多 NFS 操作还会返回由该操作创建或修改的数据。

文件句柄是 32 字节的不透明 Cookie,只有 NFS 服务器才能理解其含义。 大多数 NFS 服务器使用主机名、inode 号等数据按常规顺序填充 Cookie,但 Pgfs 不遵循此约定。

文件名仅包含最右边的路径名组件。 不使用完整路径名,因为路径包含路径名分隔符,并且路径名分隔符在不同的操作系统之间有所不同。 为了使 NFS 操作系统独立,路径分隔符已被从协议中移除。(路径名的每个组件都可以是一个单独的 RPC 数据项,但显然没有人想到这一点。)

某些通常为正值的数据字段,如 userid 和 mtime,可能包含 -1,这意味着使用来自合理位置的现有值。 根据 NFS 操作,它可能会从现有文件、与 NFS 请求关联的 uid/gid 或当前时间中提取默认值。 NFS 服务器会相信你在数据包中传递给它的 userid 和 groupid 的任何值,即使你是个“黑客”。 生成任意 NFS 数据包最简单的方法是使用具有 root 访问权限的 Linux,并 su 到你希望请求来自的用户和组。

符号链接在 NFS 客户端上展开。 在许多 NFS 客户端上,符号链接的展开不会放入客户端缓存中,导致它们每次被引用时都重新展开。 这就是为什么在 NFS 挂载方案中不鼓励使用符号链接的原因。 如果你想在你的 NFS 挂载方案中使用符号链接,请将它们放在客户端的本地磁盘上。

Sun 远程过程调用是一个库,它将通信建模为对另一台机器上的子例程的过程调用。 子例程的每个参数都通过数据类型(如带符号整数)声明给 RPC 库。 RPC 库将参数从带符号整数的本地二进制表示转换为带符号整数的远程表示。 因此,奔腾可以调用 Alpha 上的例程,并且整数在两个地方的数值都相同。

© . All rights reserved.