第29章 网络文件系统

29.1 引言

NFS提供透明文件访问,基于Sun RPC。

29.2 Sun远程过程调用

RPC过程

  1. 客户调用客户残桩
  2. 客户残桩封装参数发送
  3. 服务器残桩接收并调用服务器过程
  4. 服务器过程返回结果

RPC报文格式

  • 事务标识符(XID)
  • 调用字段(0=调用,1=应答)
  • 程序号、版本号、过程号
  • 证书和验证
  • 参数/结果

29.3 XDR:外部数据表示

  • 标准化数据编码
  • 支持异构系统通信
  • 所有整数为4字节

29.4 端口映射器

  • 知名端口:UDP/TCP 111
  • 注册临时端口的RPC服务器
  • 四个过程:SET、UNSET、GETPORT、DUMP

典型映射

100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100003 2 udp 2049 nfs 100005 1 udp 699 mountd

text

29.5 NFS协议

文件句柄

  • 不透明对象(32字节,V2)
  • 服务器创建,客户使用
  • Unix:文件系统ID + inode号 + 生成码

安装协议

  1. mountd向portmapper注册
  2. mount命令查询portmapper
  3. mount命令调用mountd
  4. mountd返回文件句柄
  5. mount系统调用绑定

NFS过程(V2,15个)

过程说明
GETATTR获取属性
SETATTR设置属性
STATFS文件系统状态
LOOKUP查找文件
READ读数据
WRITE写数据
CREATE创建文件
REMOVE删除文件
RENAME重命名
LINK硬链接
SYMLINK符号链接
READLINK读符号链接
MKDIR创建目录
RMDIR删除目录
READDIR读目录

29.6 NFS实例

读文件

  • LOOKUP遍历路径(每个组件)
  • GETATTR获取属性
  • READ读取数据

服务器崩溃

  • 无状态设计
  • 客户重传请求
  • 崩溃对客户透明(除暂停)

等幂过程

  • 可安全重传
  • READ/WRITE/LOOKUP等

29.7 第3版的NFS

改进

  1. 文件句柄可变长(≤64字节)
  2. READ/WRITE限制取消
  3. 64位文件大小
  4. 异步WRITE
  5. 新增7个过程

29.8 小结

NFS基于RPC,使用UDP(或TCP)。无状态设计简化崩溃恢复。V3改进了性能和可扩展性。