NFS文件系统协议及解析概要
NFS讲解

NFS(Network File System,网络文件系统)是当前主流异构平台共享文件系统之一。
主要应用在UNIX环境下。
最早是由SUN开发,现在能够支持在不同类型的系统之间通过网络进行文件共享,允许一个系统在网络上与他人共享目录和文件。
通过使用NFS,用户和程序可以象访问本地文件一样访问远端系统上的文件,使得每个计算机的节点能够像使用本地资源一样方便的使用网上资源。
换言之,NFS可用于不同类型计算机、操作系统、网络架构和传输协议运行环境中的网络文件远程访问和共享NFS的工作原理是使用客户端/服务器架构,由一个客户端程序和服务器程序组成。
服务器程序向其它计算机提供对文件系统的访问,其过程就叫做“输出”。
NFS客户端程序对共享文件系统进行访问时,把它们从NFS服务器“输送”出来。
文件通常以“块”为单位进行传输,其尺寸是8K(虽然它可能会将操作分成更小尺寸的分片)。
NFS传输协议用于服务器和客户机之间的文件访问和共享的通信,从而使客户机远程的访问保存在存储设备上的数据。
NFS在文件传送或信息传送过程中依赖于RPC协议。
RPC,远程过程调用(Remote Procedure Call) 是能使客户端执行其他系统中程序的一种机制。
可以说NFS本身就是使用RPC的一个程序。
或者说NFS也是一个RPC SERVER。
所以只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER(服务器)或者NFS CLIENT(客户端)。
这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。
可以这么理解RPC 和NFS的关系:NFS是一个文件系统,而RPC是负责信息的传输。
(1)访问一个本地文件还是一个NFS文件对于客户端来说是透明的,当文件被打开时,由内核决定这一点。
文件被打开之后,内核将本地文件的所有引用传递给名为“本地文件访问”的框中,而将一个NFS文件的所有引用传递给名为“NFS客户端”的框中。
Linux网络文件系统(NFS)分析

Linux网络文件系统(NFS)分析1. 网络文件系统概述_____________________________________________________ 41.1 远程文件存取____________________________________________________ 4 1.2 网络文件系统概述________________________________________________ 4 1.3 网络文件系统上层实现____________________________________________ 5 1.3.1 Mount安装协议和NFS远程过程 __________________________________ 5 1.3.2 访问文件的具体流程___________________________________________ 5 1.4 网络文件系统下层实现——远程过程调用(RPC) ____________________ 6 1.4.1 RPC的概念模型_______________________________________________ 7 1.4.2 SUN RPC的定义 _______________________________________________ 7 1.4.3 SUN RPC的传输层实现机制 _____________________________________ 8 1.4.3.1 通信语义__________________________________________________ 8 1.4.3.2 动态端口映射______________________________________________ 8 1.4.4 一次RPC远程调用的具体流程 ___________________________________ 9 2. Linux的NFS系统框架 _________________________________________________ 112.1 源码分析环境___________________________________________________ 11 2.2 Linux下NFS的体系结构___________________________________________ 12 2.3 NFS的Client端___________________________________________________ 12 2.3.1 Client端的VFS层______________________________________________ 13 2.3.2 Client端的RPC层_____________________________________________ 20 2.3.3 Client端的NFS层______________________________________________ 27 2.3.3.1 NFS过程层_______________________________________________ 27 2.4 NFS的Server端 __________________________________________________ 33 2.4.1 Server端的RPC层 _____________________________________________ 33 2.4.2 Server端的NFS层_____________________________________________ 37 2.4.3 NFS Server端启动___________________________________________ 39 2.4.4 nfsservctl系统调用实现________________________________________ 40 2.4.5 RPC鉴别机制________________________________________________ 46 3 Mount安装协议的具体实现_____________________________________________ 483.1 NFS Client端Mount协议数据结构_______________________________ 48 3.2 NFS Client端Mount协议实现___________________________________ 50 3.2.1Linux根文件系统的NFS Mount协议安装________________________ 51 3.2.1.1 nfs_root_setup函数的实现_________________________________ 52 3.2.1.2 nfs_root_mount函数的功能________________________________ 54 3.2.2命令行下的动态NFS Mount协议安装___________________________ 60 3.2.2.1 nfs_read_super函数的实现 _________________________________ 60 4NFS文件操作具体流程 _________________________________________________ 64 4.1 NFS文件协议的数据结构 ______________________________________ 64 4.2 打开一个NFS文件的具体流程 __________________________________ 65 4.2.1 VFS层操作分析_______________________________________________ 65 4.2.2 NFS层操作分析______________________________________________ 67 4.2.3 RPC层操作分析______________________________________________ 694.2.4 Server端操作分析 _____________________________________________ 69 4.3 读写一个NFS文件的具体流程 __________________________________ 70 4.3.1 sys_read函数_______________________________________________ 71 4.3.2nfs_file_read函数 ____________________________________________ 71 4.3.3nfs_readpage nfs_readpage_sync函数___________________________ 72 5 NFS文件系统FAQ _____________________________________________________ 76 参考文献:______________________________________________________________ 791. 网络文件系统概述1.1 远程文件存取许多早期的网络系统提供了文件传输(File transfer)服务,它允许用户把某文件的一个副本从一台机器移到另一台机器上。
NFS协议

介绍NFS协议的概念和作用NFS(Network File System)协议是一种用于在计算机网络中实现跨平台文件共享的协议。
它允许不同操作系统的计算机之间通过网络共享文件和目录,使得用户可以像访问本地文件一样访问远程服务器上的文件。
NFS协议的作用是简化跨网络的文件共享和访问过程。
它允许客户端计算机通过网络连接到服务器,将服务器上的文件系统挂载到客户端的本地文件系统中。
这样,客户端可以像访问本地文件一样访问远程服务器上的文件和目录,而无需了解服务器文件系统的具体细节。
NFS协议的概念基于一种客户端‑服务器(client‑server)模型。
服务器端运行NFS服务器软件,负责管理文件系统和处理客户端的文件访问请求。
客户端运行NFS客户端软件,通过网络与服务器通信,并发送文件访问请求。
服务器接收请求后,执行相应的操作并将结果返回给客户端。
NFS协议的优点之一是它的跨平台性。
它可以在不同的操作系统之间实现文件共享,包括UNIX、Linux、Windows 等。
这使得不同操作系统的用户能够方便地共享和访问彼此的文件,促进了跨平台的协作和数据共享。
此外,NFS协议还提供了一些高级功能,如文件锁定、缓存机制和权限管理。
文件锁定允许多个客户端同时读取文件,但只允许一个客户端进行写操作,从而确保数据的一致性。
缓存机制可以提高文件访问的性能,减少网络传输的开销。
权限管理则允许服务器对文件和目录进行访问控制,保护敏感数据的安全性。
总之,NFS协议是一种用于在计算机网络中实现跨平台文件共享的重要协议。
它简化了文件共享和访问的过程,提供了跨操作系统的互操作性,同时具备一些高级功能,以满足不同用户的需求。
解释NFS协议的基本原理和工作方式NFS(Network File System)协议是一种用于实现跨网络的文件共享的协议。
它的基本原理是通过客户端‑服务器模型,将远程服务器上的文件系统挂载到客户端的本地文件系统中,实现对远程文件的透明访问。
网络文件系统(NFS)的工作原理和应用技术

6网络文件系统(NFS)的工作原理和应用技术郭英见图2R PC 工作过程计算机网络的软件环境包括网络协议和网络操作系统两个方面:网络协议用于实现各种操作系统的网络连接和数据通信;而网络操作系统是网络协议中的网络服务系统,是网络的核心。
工业标准的网络文件系统NFS 由于具有网络操作系统文件服务器的功能,且使用维护均比较方便,从而也被广泛地应用在各系统中。
本文从N FS 工作原理和应用技术两方面深入讨论N FS 。
一、网络文件系统NFS 的工作原理N FS 包括N FS 服务器和N FS 客户两部分,采用星型拓扑结构连接。
NFS 服务器是中心,N FS 客户是端点,见图1。
N FS 服务器:提供共享本地硬盘上的任何文件系统或目录等文件信息的计算机。
N FS 客户:能够安装远地文件系统和目录,并且从其他计算机上获取文件信息的计算机。
N FS 服务器与N FS 客户之间并无严格的界定,多任务的操作系统可同时作为客户和服务器,读取网络上其他正在访问自己硬盘的计算机上的文件。
为了NFS 的开发应用专门引入了远程过程调用RPC(Remote Pr ocedure Call)的概念,RPC 过程调用可以作为对话层和报文交换器用于所有的NFS 的应用程序。
RPC 由一系列过程组成,这些过程可以视为处理任何所需网络访问的高层应用程序,即可以透明地访问远地文件系统。
R 通过网络作用于客户和服务器之间,具体工作过程是首先客户向服务器发出请求报文,服务器接收到报文后,从中提取出请求,然后执行请求的过程,并且将结果汇编成响应报文。
客户将接收到的报文响应后,对报文进行反汇编,继续执行应用程序的正常过程。
这个过程的每一步都由RPC 程序库(与应用程序相连)的例程控制。
见图2。
二、网络文件系统NFS 的配置由于N FS 是由N FS 客户和N FS 服务器组成的,所以N FS 的配置就需分成NFS 服务器的配置和N FS 客户的配置。
nfs协议

nfs协议
NFS(Network File System)是一种用于在不同计算机
间进行文件共享的协议。
该协议旨在使远程文件访问像本地文件访问一样简单,而无需用户意识到其实际的远程性质。
NFS
协议主要基于RPC(Remote Procedure Call)协议,提供了
高效的网络通信机制。
NFS协议的主要优点之一是其在网络上数据传输的高效性。
它能够被用来在不同计算机之间传输大文件或大量的数据。
由于它的基本设计是面向连接的,因此它可以追踪和管理多个连接。
此外,NFS协议还能够缓存数据,以减少网络流量和延迟。
这样子系统能够快速地访问并处理数据,而不会是因为网络传输瓶颈而导致延迟。
NFS协议还提供了安全性的特性。
该协议支持基于Kerberos的身份验证机制,这样用户可以保密地访问文件,
而其他用户则无权访问。
同时,该协议还支持通过卷的权限来控制文件的读写权限,可以快速地管理文件。
然而,NFS协议也存在一些不足之处。
例如,如果传输的数据量非常大,就可能会导致网络传输瓶颈,甚至可能导致网络的崩溃。
此外,如果网络故障,对于已经开始传输数据的NFS就行就可能会遭受数据丢失和损坏的风险。
因此,在设计
和部署网络文件共享时,需要对系统进行适当的规划和优化。
总的来说,NFS协议是一个高效的网络文件共享协议,它提供了面向连接、快速缓存和安全身份验证等主要特性。
然而,
在部署这个网络文件共享系统时需要注意其局限性和安全性要求。
NFS概要

18 : NFS: Reply FSSTAT 19 : NFS: Call PATHCONF()
20 : NFS: Reply PATHCONF
NFS 背景
• PRC
– Sun RPC – DEC RPC
• DCOM & ORPC • iSCSI
Client
Server
1 : Portmap: Call GETPORT()
2 : Portmap: Reply GETPORT 3 : MOUNT: Call EXPORT() 4 : MOUNT: Reply EXPORT 5 : Portmap: Call GETPORT()
6 : Portmap: Reply GETPORT 7 : Portmap: Call GETPORT() 8 : Portmap: Reply GETPORT 9 : NLM: Call FREE_ALL()
其它分布式文件系统
• • • • Apollo Domain AT&T Remote File System(RFS) Andrew File System ( AFS ) Distributed File System ( DFS )
NFS Version 4 受到了 AFS 的影响。
NFS历史
NFS v3 结构
• NFS v3 需要通过与其它协议 协作来完成相关功能,设计 时为了尽可能的独立和尽量 重用已经存在的协议标准; • 基于RPC协议和XDR协议;
– XDR协议用于对网络之间传输的数据类 型进行描述; – RPC协议为远程服务提供一个面向过程 的接口,实现计算机之间的过程调用;
enum clnt_stat clnt_call( CLIENT * clnt, unsigned long procnum, xdrproc_t inproc, char *in, xdrproc_t outproc, char *out, struct timeval tout);
nfs 协议

nfs 协议NFS(Network File System)是一种网络文件共享协议,用于在计算机网络上实现文件共享和远程访问。
它是由Sun Microsystems开发的,最初用于UNIX系统。
NFS的主要目的是允许不同计算机上的用户通过网络访问和管理远程文件,就像本地硬盘上的文件一样。
它基于客户端-服务器架构,其中主机(服务器)提供文件服务,而用户端(客户端)则通过访问该主机来获取和操作文件。
NFS协议采用了基于RPC(Remote Procedure Call)的通信方式。
通过RPC,客户端可以请求服务器执行某些操作,如读取文件、写入文件等。
客户端和服务器之间的通信是通过网络完成的,因此可以在本地的计算机上对远程文件进行访问和操作。
NFS提供了很多优点。
首先,它使文件共享变得容易和高效。
用户可以像访问本地文件一样方便地访问远程文件,并且可以通过网络共享文件,而无需将文件复制到本地机器。
这对于多用户环境和跨平台的开发团队非常有用。
其次,NFS具有良好的可扩展性。
它支持多线程处理和并发访问,可以同时处理多个请求,提高了系统的处理能力和响应速度。
同时,NFS还支持分布式存储,可以将文件存储在多个服务器上,使得存储容量可以灵活扩展。
此外,NFS还具有很好的跨平台兼容性。
它可以在不同的操作系统和网络环境中使用,包括UNIX、Linux、Windows等。
这使得用户可以在不同的平台上访问和共享文件,提高了工作效率和文件管理的灵活性。
然而,NFS也存在一些局限性。
首先,由于数据传输是通过网络进行的,因此数据的传输速度可能受到网络速度的限制。
如果网络状况不佳或带宽有限,可能会影响到文件的传输速度和响应时间。
其次,由于NFS是基于文件的操作,因此不适合处理大型数据库或需要实时访问的应用程序。
对于这些要求高性能和实时性的应用,通常会采用专门的分布式文件系统或数据库。
总的来说,NFS是一种非常有用和广泛应用的协议,它大大简化了文件共享和远程访问的过程。
NFS网络文件系统详解

NFS⽹络⽂件系统详解第1章 NFS基本概述1.1 什么是nfsNFS是Network File System的缩写及⽹络⽂件系统。
主要功能是通过局域⽹络让不同的主机系统之间可以共享⽂件或⽬录。
NFS系统和Windows⽹络共享、⽹络驱动器类似, 只不过windows⽤于局域⽹, NFS⽤于企业集群架构中, 如果是⼤型⽹站, 会⽤到更复杂的分布式⽂件系统FastDFS,glusterfs,HDFS1.2 为什么要使⽤NFS服务进⾏数据存储1.实现多台服务器之间数据共享2.实现多台服务器之间数据的⼀致1.3 本地⽂件操作⽅式当⽤户执⾏mkdir命令, 该命令会通过shell解释器翻译给内核,由内核解析完成后驱动硬件,完成相应的操作。
1.4 NFS实现原理(需要先了解[程序|进程|线程])1.⽤户进程访问NFS客户端,使⽤不同的函数对数据进⾏处理2.NFS客户端通过TCP/IP的⽅式传递给NFS服务端。
3.NFS服务端接收到请求后,会先调⽤portmap进程进⾏端⼝映射。
4.nfsd进程⽤于判断NFS客户端是否拥有权限连接NFS服务端。
5.Rpc.mount进程判断客户端是否有对应的权限进⾏验证。
6.idmap进程实现⽤户映射和压缩7.最后NFS服务端会将对应请求的函数转换为本地能识别的命令,传递⾄内核,由内核驱动硬件。
rpc是⼀个远程过程调⽤,那么使⽤nfs必须有rpc服务1.5 NFS存储优点1.NFS⽂件系统简单易⽤、⽅便部署、数据可靠、服务稳定、满⾜中⼩企业需求。
2.NFS⽂件系统内存放的数据都在⽂件系统之上,所有数据都是能看得见。
1.6 NFS存储局限1.存在单点故障, 如果构建⾼可⽤维护⿇烦。
(web-》nfs()-》backup)2.NFS数据明⽂, 并不对数据做任何校验。
3.客户端挂载⽆需账户密码, 安全性⼀般(内⽹使⽤)1.7 ⽣产应⽤建议1.⽣产场景应将静态数据尽可能往前端推, 减少后端存储压⼒2.必须将存储⾥的静态资源通过CDN缓存(jpg\png\mp4\avi\css\js)3.如果没有缓存或架构本⾝历史遗留问题太⼤, 在多存储也⽆⽤第2章 NFS基本使⽤2.1 环境准备服务器系统⾓⾊外⽹IP内⽹IP主机名CentOS 7.5NFS服务端eth0:10.0.0.31eth1:172.16.1.31nfsCentOS 7.5NFS客户端eth0:10.0.0.7eth1:172.16.1.7web012.2 关闭防⽕墙及selinux(客户端,服务端都要关闭)2.2.1 关闭防⽕墙systemctl disable firewalldsystemctl stop firewalld2.2.2 关闭selinuxsed -ri '#^SELINUX=#cSELINUX=Disabled' /etc/selinux/configsetenforce 02.3 服务端安装nfs[root@nfs ~]# yum -y install nfs-utils2.3.1 配置nfs我们可以按照共享⽬录的路径允许访问的NFS客户端(共享权限参数)格式,定义要共享的⽬录与相应的权限。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
rpc/xdr 编译器来生成服务器和客户机的“存根”,但是 NFS 不需要它 们的使用。可以使用提供等效功能的任何软件,如果编码完全相同,则 可以与其他 NFS 实现进行互操作。
如果响应状态为 NFS_OK,这时响应的属性中包含通过输入 fhandle 所指定的文件的属性信息。
2.2.3 设置文件属性
struct sattrargs { fhandle file;sattr attributes; }; attrstat NFSPROC_SETATTR (sattrargs) = 2;
attrstat NFSPROC_GETATTR(fhandle) = 1;
attrstat NFSPROC_SETATTR(sattrargs) = 2; void NFSPROC_ROOT(void) = 3;
diropres NFSPROC_LOOKUP(diropargs) = 4;
readlinkres NFSPROC_READLINK(fhandle) = 5;
虽然文件和目录在许多方面都是相似的对象,但读取目录和文件时使用 了不同的过程。这为表示目录提供了一种网络标准格式。可以使用与上 面相同的参数来对每个调用只返回一个目录条目的过程进行证明。问题 在于效率。目录可以包含多个条目,远程调用返回每个条目的速度太慢。
2.2 服务例程
协议定义通过一组例程进行定义,这些例程的参数和结果是使用 RPC 语言定义的(使用程序、版本和过程声明扩展的 XDR 语言)。对每个 例程功能的简要描述应提供足够的信息,以便于实施。第 2.3 节更详细 地描述了基本数据类型。
NFS 假定文件系统是基于目录进行分层的,目录为除底层文件之外的所 有内容。目录(文件、目录、设备等)中的每个条目都有一个字符串名 称。不同的操作系统可能对树的深度或使用的名称有限制,并且使用不 同的语法来表示“路径名”,这是名称中所有“组件”(目录和文件名) 的串联。“文件系统”是具有指定“根”的单个服务器(通常是单个磁
译者注: 从字面意义上可以看出,RPC 是一个跨越不同计算节点的过程调用,可 以理解为跨越不同计算机的函数调用。也就是说通过 RPC,你可以在一 台计算机上调用另外一台计算机上进程中的函数实现。如图 2 是一个简
答的调用示意图,客户端发起 RPC 调用,经过网络传输给服务端,服 务端进行处理后将结果返回给客户端。虽然经过了复杂的网络传输等过 程,但在客户端看来,就是进行了一次函数调用。
盘或物理分区)上的树。一些操作系统提供了一个“挂载”操作,使所 有文件系统显示为一棵树,而其他操作系统则维护一个文件系统的“森 林”。文件是未解释字节的非结构化流。NFS 的版本 3 使用了稍微更通 用的文件系统模型。
NFS 一次查找路径名的一个组件。这可能并不明显,为什么它不只是获 取整个路径名,沿着目录移动,并在完成后返回一个文件句柄。有几个 好理由不这么做。首先,路径名需要在目录组件之间使用分隔符,不同 的操作系统使用不同的分隔符。我们可以定义一个网络标准的路径名表 示,但是每个路径名都必须在每一端进行解析和转换。其他问题在第 3 节,NFS 实现问题中讨论。
假定 NFS 协议中的所有过程都是同步的。当一个过程返回到客户机时,
客户机可以假定操作已经完成,并且与请求相关联的任何数据现在都在
稳定存储中。例如,客户机写请求可能会导致服务器更新数据块、文件
系统信息块(如间接块)和文件属性信息(大小和修改时间)。当写操
作返回到客户机时,它可以假定写操作是安全的,即使在服务器崩溃的
void
NFSPROC_ROOT(void) = 3;
过时的。由于查找一个文件系统的根文件句柄需要在客户端和服务端移 动路径名称,因此本例程不在使用。要正确执行此操作,我们必须定义 路径名的网络标准表示。我们用 MNTPROC_MNT 例程代替了查找根 文件句柄的功能。(细节请参考附录 A,“挂载协议的定义”)
2.2.5 查找文件名
diropres NFSPROC_LOOKUP(diropargs) = 4;
如果回复的状态为 NFS_OK,这时应答的"file"和"attributes"分别是参 数中给定目录"dir"的文件句柄和文件“name”的属性。
2.2.6 从符号链接读取数据
union readlinkres witch (stat status) { case NFS_OK:path data;default:void; }; readlinkres NFSPROC_READLINK(fhandle) = 5;
readres NFSPROC_READ(readargs) = 6;
void NFSPROC_WRITECACHE(void) = 7;
attrstat
NFSPROC_WRITE(writeargs) = 8;
diropres NFSPROC_CREATE(createargs) = 9;
stat NFSPROC_REMOVE(diropargs) = 10; stat NFSPROC_RENAME(renameargs) = 11;
如果回复的状态为 NFS_OK,这时响应中的“data”是通过 fhandle 参数指定的文件的数据。
注意: 由于 NFS 仅仅在客户端解析路径名,符号链接的路径名在不同 的客户端意义是不同的(或者是无意义的)。
情况下,它也可以丢弃所写的数据。这是服务器无状态的一个非常重要
的部分。如果服务器等待从远程请求中刷新数据,客户机必须保存这些
请求,以便在服务器崩溃时重新发送它们。
/* Remote file service routines */ program NFS_PROGRAM {
version NFS_VERSION { void NFSPROC_NULL(void) = 0;
stat NFSPROC_LINK(linkargs) = 12;
stat NFSPROC_SYMLINK(symlinkargs) = 13;
diropres NFSPROC_MKDIR(createargs) = 14;
stat NFSPROC_RMDIR(diropargs) = 15;
readdirres NFSPROC_READDIR(readdirargs) = 16;
客户端服务端示意
图1
1.1 远程过程调用
Sun 的远程过程调用规范为远程服务提供了一个面向过程的接口。每台 服务器都提供一个“程序”,这是一组过程。NFS 就是这样一个程序。 主机地址、程序号和过程号的组合指定一个远程过程。NFS 的目标是不 需要低级别的任何特定可靠性级别,因此它可能用于许多底层传输协议, 甚至其他远程过程调用实现。为了便于讨论,本文的其余部分将假定 NFS 是在 Sun RPC 之上实现的,如 RFC 1057《RPC:远程过程调用协 议规范》中所述。
1.3 无状态服务
NFS 协议旨在尽可能无状态。也就是说,为了正常工作,服务器不需要 维护任何客户机的协议状态信息。无状态服务器在发生故障时比有状态 服务器有明显的优势。
对于无状态服务器,客户机只需要重试一个请求,直到服务器响应;它 甚至不需要知道服务器已经崩溃,或者网络暂时中断。另一方面,有状 态服务器的客户机需要检测服务器故障并在服务器恢复时重建服务器 状态,或者导致客户机操作失败。
statfsres NFSPROC_STATFS(fhandle) = 17; } = 2; } = 100003;
2.2.1 什么都不做
void
NFSPROC_NULL(void) = 0;
这个例程什么都不做,它在所有的 RPC 服务中都可用,以允许服务响
应测试和计时。
2.2.2 获取文件属性
attrstat NFSPROC_GETATTR (fhandle) = 1;
本备忘录的状态
本 RFC 描述了一个在太阳微系统公司(译者注:这里是指 SUN,当前 已经被 Oracle 收购)和其它正在使用的协议。新版本的协议正在开发 中,但其他人仍然可以从当前协议的描述中及设计问题的讨论中受益。 本备忘录的分发不受任何限制。
1. INTRODUCTION(引言)
Sun 网络文件系统(NFS)协议提供了透明的通过网络远程访问共享文 件的方式。NFS 协议被设计于可以很轻松的跨不同的机器、操作系统、 网络架构和传输协议。这种可移植性是通过使用建立在外部数据表示 (XDR)之上的远程过程调用(RPC)原语实现的。实现已经存在于从 个人计算机到超级计算机的各种机器上。
这听起来可能不是一个重要的问题,但它以一些意想不到的方式影响了 协议。我们认为,在协议中,能够编写不需要特殊崩溃恢复的非常简单 的服务器可能需要一些额外的复杂性。请注意,即使使用了所谓的“可 靠”传输协议(如 TCP),客户端仍必须能够通过在连接超时时重新打 开连接来处理服务中断。因此,无状态协议实际上可以简化实现。
NFS 文件系统协议及解析概要
本文是对 RFC1094 的翻译,它是 NFS 的第 2 版,之所以翻译这个版本 是因为它比较简单。后面会陆续完成第 3 版和第 4 版的翻译,并且完成 Linux 操作系统下 NFS 文件系统和其服务端的代码解析。作者为 SunnyZhang,翻译本文章出于如下几个目的: 1)练习英语,提升自身英语水平;2)进一步熟悉 NFS 协议;3)传播 存储相关知识。 另外,协议本身是纯文本格式,没有配图,因此理解起来可能有一定的 难度,因此译者在翻译的时候加入了一些译者注和插图,以方便大家理 解。不妥之处还请大家多批评指正。 更多存储相关技术文章可以关注本作者微信公众号或者头条号,名称为: itworld123