第29章 网络文件系统
29.1 引言
NFS提供透明文件访问,基于Sun RPC。
29.2 Sun远程过程调用
RPC过程
- 客户调用客户残桩
- 客户残桩封装参数发送
- 服务器残桩接收并调用服务器过程
- 服务器过程返回结果
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号 + 生成码
安装协议
- mountd向portmapper注册
- mount命令查询portmapper
- mount命令调用mountd
- mountd返回文件句柄
- 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
改进
- 文件句柄可变长(≤64字节)
- READ/WRITE限制取消
- 64位文件大小
- 异步WRITE
- 新增7个过程
29.8 小结
NFS基于RPC,使用UDP(或TCP)。无状态设计简化崩溃恢复。V3改进了性能和可扩展性。