本页使用了标题或全文手工转换

网络文件系统

维基百科,自由的百科全书
跳转至: 导航搜索

网络文件系统英语:Network File System,縮寫為NFS)是一种分布式文件系统协议,最初由Sun Microsystems公司开发,并于1984[1]年发布。其功能旨在允许客户端主机可以像访问本地存储一样通过网络访问服务器端文件。 NFS和其他许多协议一样,是基于開放網路運算遠端程序呼叫(ONC RPC) 协议之上的。

NFS是一个开放、标准的RFC协议,任何人或组织都可以依据标准实现它。

版本和产品[编辑]

NFSv1 只在SUN公司内部用作实验目的。 开发团队在NFSv1的基础上做了重大改进之后将其对外发布,版本NFSv2由此产生。[2]

NFSv2[编辑]

NFSv2最初在SunOS 2.0上面实现,1985年发布[3]

参与NFSv2设计实现的人包括 Russel Sandberg, Bob Lyon, Bill Joy, Steve Kleiman 等。[1][4] NFSv2 的定义RFC 1094, 于1989年3月发布。

NFSv2 最初只是基于 UDP. 设计者旨在保持server端是无状态的/stateless, 而将 locking 等机制的实现独立于核心协议之外。[1] 这是一个关键决定,它使从服务器故障恢复变得简单:当一个服务器变得不可用时,所有的网络客户端冻结,但一旦服务器恢复,每一个尝试重传的状态都包含在每个RPC里面,这是由客户端存根发起的。这样的设计决策允许UNIX应用程序可以忽视服务器端的问题。

Virtual File System 接口很容易模块化地实现一个简单的协议. 在1986年2月,诸多操作系统实现了对NFSv2的支持,例如 System V release 2,Microsoft DOS 还有 VAX/VMS using Eunice.[4]

由于 32-bit 的限制,NFSv2 只允读写文件起始2G大小的内容。

NFSv3[编辑]

Version 3 (RFC 1813, June 1995) 添加如下特性:

  • 支持 64 bit 文件大小和偏移,(即突破 2GB 文件大小的限制);
  • 支持服务端的异步写操作, 提升写入性能;
  • 在许多响应报文中额外增加文件属性, 避免用到这些属性时重新获取;
  • 增加 READDIRPLUS 调用, 用于在遍历目录时获取文件描述符和文件属性;
  • 其他改进.

在NFSV2发布后不久,NFSV3协议提案就在Sun Microsystems内部被提出,其主要目的是解决NFSV2进行同步写操作的性能问题[5]。1992年7月的实现版本已经解决了NFSV2的许多不足之处,但是大文件支持(64位文件大小和偏移量)这一紧迫的问题还没有解决。这成为DEC公司的一个痛点,他们当时推出64位版本的Ultrix,以支持其新推出的64位RISC处理器Alpha 21064。在引入NFSV3时厂商们正在越来越多的支持TCP作为transport-layer传输层协议。当时有些厂商已经在NFS version 2支持TCP做为传输层,Sun Microsystems 在发布NFSV3时也增加了将TCP作为传输层的支持。使用TCP做传输层使得NFS跨越 WAN 成为可能, 并且可以突破 UDP 报文大小(8K)的限制,使用更大的读写数据单元。

NFSv4[编辑]

NFSv4协议 (RFC 3010, December 2000; revised in RFC 3530, April 2003), 借鉴了AFS(Andrew File System)和SMB/CIFS(Server Message Block)的特性,主要做了如下改进: 性能提升,强制安全策略,引入有状态的协议[5]。从NFSv4开始,协议的实现/开发工作不再是由SUN公司主导开发,而是改为由 IETF(Internet Engineering Task Force) 开发。

NFSv4.1[编辑]

NFSv4.1 (RFC 5661, January 2010) 旨在为并行访问可横向扩展的集群服务(pNFS扩展)提供协议支持。

NFSv4.2[编辑]

NFSv4.2 目前正在开发中。

其他扩展[编辑]

WebNFS, 一个NFSv2 v3的扩展, 使得用户可以方便的通过网页浏览器与NFS服务端交互,且不受防火墙限制。在2007年, SUN公司开原了WebNFS客户端的实现[6]

各种NFS相关的外挂/捆绑协议:

NFS over RDMA 是NFS对 remote direct memory access (RDMA)协议的适配。[7][8] 就是将默认的传输层协议TCP替换为RDMA。

平台[编辑]

NFS 通常用在 Unix 操作系统上 (比如 Solaris, AIX and HP-UX) 和其他 Unix-like 的操作系统 (例如 Linux and FreeBSD). 同时在其他一些操作系统也提供了NFS实现 例如经典的 Mac OS, OpenVMS, Microsoft Windows,[來源請求] Novell NetWare 还有 IBM AS/400。 可选的远程文件访问协议还有 Server Message Block (SMB, also termed CIFS), Apple Filing Protocol (AFP), NetWare Core Protocol (NCP) 和 OS/400 File Server file system (QFileSvr.400).

在Microsoft Windows系统上 SMB 和 NetWare Core Protocol (NCP) 的使用比 NFS 更广泛; 在Apple Macintosh 操作系统上则 AFP 的使用更广泛; 而在 AS/400 系统上 QFileSvr.400 更为常用。Haiku 最近(2013年3月) 添加了 NFSv4 支持(作为Google Summer of Code project一部分)[9]

NFS specint2008 performance comparison, as of 22 November 2013

典型实现[编辑]

假设一个Unix风格的场景,其中一台计算机(客户端)需要访问存储在其他机器上的数据(NFS 服务器):

  1. 服务端实现 NFS 守护进程, 默认运行 nfsd, 用来使得数据可以被客户端访问.
  2. 服务端系统管理员可以决定哪些资源可以被访问, 导出目录的名字和参数, 通常使用 /etc/exports 配置文件 和 exportfs 命令。
  3. 服务端 安全-管理员 保证它可以组织和认证合法的客户端.
  4. 服务端网络配置保证可以跟客户端透过 防火墙 进行协商.
  5. 客户端请求导出的数据, 通常调用一个 mount 命令. (The client asks the server (rpcbind) which port the NFS server is using, the client connects to the NFS server (nfsd), nfsd passes the request to mountd)
  6. 如果一切顺利, 客户端的用户就可以通过已经挂载的 文件系统s 查看和访问服务端的文件了.

提醒: NFS自动挂在可以通过 — 可能是 /etc/fstab 或者 automounting.

协议开发[编辑]

1980s[编辑]

1990s[编辑]

2000s[编辑]

2010s[编辑]

外部連結[编辑]

  • RFCs:
    • RFC 5661 - Network File System (NFS) Version 4 Minor Version 1 Protocol
    • RFC 5403 - RPCSEC_GSS Version 2
    • RFC 3530 - NFS Version 4 Protocol Specification
    • RFC 2054 - WebNFS Specification
    • RFC 2339 - Sun/ISOC NFS Change Control Agreement
    • RFC 2203 - RPCSEC_GSS Specification
    • RFC 1813 - NFS Version 3 Protocol Specification
    • RFC 1790 - Sun/ISOC ONC RPC Change Control Agreement
    • RFC 1094 - NFS Version 2 Protocol Specification
  1. ^ 1.0 1.1 1.2 Russel Sandberg, David Goldberg, Steve Kleiman, Dan Walsh, Bob Lyon. Design and Implementation of the Sun Network Filesystem. USENIX. 1985. 
  2. ^ NFS Illustrated (2000) by Brent Callaghan - ISBN 0-201-32570-5
  3. ^ Solaris Operating System (Unix). Operating System Documentation Project. [2015-03-11]. 
  4. ^ 4.0 4.1 Russel Sandberg. The Sun Network Filesystem: Design, Implementation and Experience (PDF). Technical Report (Sun Microsystems). 
  5. ^ Brian Pawlowski, Chet Juszczak, Peter Staubach, Carl Smith, Diane Lebel, David Hitz. NFS Version 3 Design and Implementation. USENIX. 1994. 
  6. ^ yanfs.dev.java.net
  7. ^ Tom Talpey. NFS/RDMA Implementation(s) Update (PDF). Network Appliance, Inc. February 28, 2006. 
  8. ^ Brent Callaghan. NFS over RDMA (PDF). Sun Microsystems. January 28, 2002. 
  9. ^ Paweł Dziepak. NFSv4 client finally merged. 2013-03-15.