美文网首页
NFS文件系统原理浅析

NFS文件系统原理浅析

作者: 打出了枫采 | 来源:发表于2020-06-20 22:25 被阅读0次

    源于经常在Windows和Linux间来回处理,NFS的存在,让我们访问文件根本感觉不到系统的差异,便对其实现机制略感兴趣。
    以下多取自中文版《TCP/IP 卷一:协议》网络文件系统章节。英文版中却未发现对应此章节记录,不知为何。

    • 摘要

      • NFS(网络文件系统),它为客户程序提供透明的文件访问
        比如windows、Linux文件共享,windows访问Linux主机上Samba服务共享的文件,Linux主机挂载windows 共享目录后访问目录,都是通过NFS来实现的
      • NFS的基础是Sun RPC:远程过程调用,客户程序使用 NFS不需要做什么特别的工作,当NFS内核检测到被访问的文件位于一个NFS服务器时,就会自动产生一个访问该文件的 RPC调用。
      • 客户端与服务器间的RPC调用是通过TCP/UDP数据包来完成
    • SUN RPC 基本原理

      • 客户端触发调用远程过程,实际上是选取了对应RPC程序封装的函 数,并将相关参数(包括远程方法名,方法参数等)封装成IP数据包,发送给服务器
      • 服务器进程接收到此数据包后,提取参数,执行相应方法过程
      • 服务器方法过程返回后,将返回结果封装成IP数据包,发送给客户端
      • 客户端进程,收取到数据包后,提取返回结果
      RPC程序包提供了数据报文封装和传递,保证异构环境下的可用性,客户端和服务器端应用程序设计时不需要考虑系统差异带来的数据格式,编码解码等问题,提供了很大方便。
      客户程序和服务程序更多的职责是在于去定义描述具体远程过程及其触发,并将其注册绑定到RPC程序包中。
    • NFS过程

    image.png

    NFS客户可以是一个用户进程,对服务器进行显式调用。而服务器也可以是一个用户进程 — 因为两个理由,NFS一般不这样实现。
    首先,访问一个NFS文件必须对客户透明。因此,NFS的客户调用是由客户操作系统代表用户进程来完成的。第二,出于效率的考虑, N F S服务器在服务器操作系统中实现。如果NFS服务器是一个用户进程,每个客户请求和服务器应答(包括读和写的数据)将不得不在内核和用户进程之间进行切换,这个代价太大。

    • 一个客户对一个NFS服务器的访问开始于安装协议,返回给客户一个文件句柄。客户接着可以使用那个文件句柄来访问服务器文件系统中的文件。在服务器上,一次检查文件名的一个成员,返回每个成员的一个新的文件句柄。最后的结果就是要引用的文件的一个文件句柄,它可以在随后的读写操作中被使用。

    (1)初始时,文件系统协议安装,客户端需知道服务端的文件系统,后续的交互处理都是基于这一文件系统
    (2)客户端与服务端之间通过文件句柄来表示所访问文件,客户端每打开一个文件,就会获得服务端的一个文件句柄(可理解成文件描述符ID)
    (3)可能触发的远程过程(下面这些并非都会存在):

    1) GETATTR。返回一个文件的属性:文件类型(一般文件,目录等)、访问权限、文件
    大小、文件的属主者及上次访问时间等信息。
    2) SETATTR。设置一个文件的属性。只允许设置文件属性的一个子集:
    访问权限、文件的属主、组的属主、文件大小、上次访问时间和上次修改时间。
    3) STATFS。返回一个文件系统的状态:可用空间的大小、最佳传送大小等。例如 U n i x的
    d f命令使用此过程。
    4) LOOKUP。查找一个文件。每当一个用户进程打开一个 N F S服务器上的一个文件时,
    N F S客户调用此过程。
    5) READ。从一个文件中读数据。客户说明文件的句柄、读操作的开始位置和读数据的
    最大字节数(最多8192个字节)。
    6) WRITE。对一个文件进行写操作。客户说明文件的句柄、开始位置、写数据的字节数
    和要写的数据。
    7) CREATE。创建一个文件。
    8) REMOVE。删除一个文件。
    9) RENAME。重命名一个文件。
    10) LINK。为一个文件构造一个硬链接。硬链接是一个 U n i x的概念,指的是磁盘中的一
    个文件可以有任意多个目录项(即名字,也叫作硬链接)指向它。
    11) SYMLINK。为一个文件创建一个符号链接。符号链接是一个包含另一个文件名字的
    文件。大多数引用符号链接的操作(例如,打开)实际上引用的是符号链接所指的文件。
    12) READLINK。读一个符号链接。即返回符号链接所指的文件的名字。
    13) MKDIR。创建一个目录。
    14) RMDIR。删除一个目录。
    15) READDIR。读一个目录。例如 Un ix的l s命令使用此过程
    

    比如在windows上用记事本打开共享目录下的某一文本文件,会产生的过程有GETATTR来确认访问权限,LOOKUP确认文件存在,READ返回文件内容(当然实际windows上操作时,GETATTR和LOOKUP在打开共享目录的时候已经完成)

    相关文章

      网友评论

          本文标题:NFS文件系统原理浅析

          本文链接:https://www.haomeiwen.com/subject/lnvgxktx.html