文件存储的模型
文件存储把「目录树 + 文件」这套模型搬到网络上:存储系统负责维护命名空间、目录层级、权限位与共享导出,客户端通过 NFS、SMB/CIFS 等协议把它挂载成本地路径。与块存储相比,多了一层由存储侧承担的语义——谁能在哪个目录读写成什么样子,由存储统一裁决,因此天然支持多客户端共享。这套模型的代价在元数据:创建、删除、遍历、改名这类操作在客户端看是一次系统调用,在存储侧可能要更新目录索引、检查锁、刷新缓存,规模上去后最先吃紧的往往是元数据路径而不是带宽。
基本信息
| 对外接口 | NFS(Linux/Unix 系)、SMB/CIFS(Windows 系),部分产品同时提供 FTP 与对象网关 |
|---|---|
| 访问单位 | 文件与目录,按路径与文件句柄寻址 |
| 共享语义 | 存储侧统一管理命名空间与权限,多客户端可见同一份内容 |
| 锁机制 | NFS 使用 NLM/字节范围锁,SMB 使用机会锁与租约,跨协议访问时锁语义不完整 |
| 扩展方式 | 纵向加控制器、横向加节点与分布式文件系统 |
NFS 与 SMB 对照
| 维度 | NFS | SMB/CIFS |
|---|---|---|
| 主要生态 | Linux、Unix、虚拟化平台 | Windows、macOS、办公共享 |
| 认证方式 | 常用 AUTH_SYS 或 Kerberos | 域账号、NTLM、Kerberos |
| 权限模型 | POSIX 权限位与 ACL | Windows ACL 与共享权限叠加 |
| 常见版本 | v3 广泛部署,v4.1 起支持会话中继与并行 | SMB 2/3,选择版本与加密需双方约定 |
典型使用场景
- 办公与部门共享盘:用户按目录权限协作,改文件立刻对所有人可见
- 容器共享卷:多个副本同时挂载同一目录(ReadWriteMany),放配置、上传目录或模型文件
- 开发与构建:代码仓、Maven/npm 私服、CI 缓存,靠文件语义与统一路径简化流程
- 媒体与设计:剪辑、渲染工位直接读写同一份素材,避免反复拷贝
- 跨平台互通:Linux 与 Windows 混合环境常由同一套存储同时导出 NFS 与 SMB
同一份数据同时用 NFS 和 SMB 导出时,两套权限模型并不完全等价,容易造成「一边能改一边只读」的困惑。生产环境建议明确主用协议,或由存储统一映射账号与权限。
挂载参数直接影响一致性体验,例如挂载缓存、属性缓存超时与锁超时设置。多客户端强一致需求下应缩短缓存时间并确认锁可用,具体参数以操作系统与存储厂家的官方文档为准。