nfs简介

点击这里在哔哩哔哩bilibili在线观看配套的教学视频

点击跳转到nfs课程所有目录

1 sunrpc和nfs

client端通过nfs操作存储设备经过的路径如下图所示:

     client                      server
 +------------+              +------------+
 |   client   |              |   storage  |
 |     app    |              |    device  |
 +------------+              +------------+
     1.| ^                     11.| ^ 
       | |                        | |
       v |20.                     v |10. 
 +------------+              +------------+
 |    nfs     |              |    nfsd    |
 |            |              |(nfs server)|
 +------------+              +------------+
     2.| ^                     12.| ^ 
       v |19.                     v |9.    
 +------------+              +------------+
 |   sunrpc   |              |   sunrpc   |
 +------------+              +------------+
     3.| ^                     13.| ^ 
       v |18.                     v |8. 
 +------------+              +------------+
 |    tcp     |              |    tcp     |
 +------------+              +------------+
     4.| ^                     14.| ^ 
       v |17.                     v |7.     
 +------------+              +------------+
 |     ip     |              |     ip     |
 +------------+              +------------+
     5.| ^                     15.| ^
       | |                        | |
       | |  16.+------------+     | |      
       | +-----|  network   |<----+ | 
       +------>|            |-------+
               +------------+ 6.            

我们再来看一下OSI七层模型和TCP/IP四层模型中SunRPC的位置:

      OSI                TCP/IP
  +------------+      +------------+
 7|application |      |            |
  |   layer    |      |            |
  +------------+      |            |
 6|presentation|     4|application | sunrpc
  |   layer    |      |    layer   |
  +------------+      |            |
 5|   session  |      |            |
  |   layer    |      |            |
  +------------+      +------------+
 4| transport  |     3| transport  | tcp
  |   layer    |      |   layer    |
  +------------+      +------------+
 3|  network   |     2| internet   | ip
  |   layer    |      |   layer    |
  +------------+      +------------+
 2|  data link |     1|  network   |
  |   layer    |      |  access    |
  +------------+      |   layer    |
 1|  physical  |      |(link layer)|
  |  layer     |      |            |
  +------------+      +------------+

sunrpc之下的tcp层和ip层已经大概率的保证了数据的可靠性,sunrpc不会对数据的可靠性进行校验。但在我曾经定位过的问题中,遇到过一个问题,tcp的校验通过了,但数据还是错误的,概率非常低,所以最终数据的可靠性还要在用户态对文件进行校验。

2 rfc协议

SunRPC有以下几个版本,你们一定和我一样在心里骂制定标准的人,为什么会有3个version 2,就不能命名成version 3和4?我们查阅时只需要选择最新版本rfc5531:

nfs的rfc协议文档有以下几个版本:

现在很多的发行版已经不支持nfsv2,所以我们的教程只讲解nfsv3和nfsv4相关的代码。

3 社区

获取supporter、reviewer、maintainer、open list的邮箱:

./scripts/get_maintainer.pl net/sunrpc/
./scripts/get_maintainer.pl fs/nfs/
./scripts/get_maintainer.pl fs/nfs_common/
./scripts/get_maintainer.pl fs/nfsd/

sunrpc模块发送补丁:

git send-email --to=trondmy@kernel.org,trond.myklebust@hammerspace.com,anna@kernel.org,chuck.lever@oracle.com,jlayton@kernel.org,neilb@suse.de,kolga@netapp.com,Dai.Ngo@oracle.com,tom@talpey.com,davem@davemloft.net,edumazet@google.com,kuba@kernel.org,pabeni@redhat.com --cc=linux-nfs@vger.kernel.org,netdev@vger.kernel.org,linux-kernel@vger.kernel.org 00*

nfs模块发送补丁:

git send-email --to=chuck.lever@oracle.com,trondmy@kernel.org,anna@kernel.org,trond.myklebust@hammerspace.com,jlayton@kernel.org,neilb@suse.de,kolga@netapp.com,Dai.Ngo@oracle.com,tom@talpey.com --cc=linux-nfs@vger.kernel.org,linux-kernel@vger.kernel.org 00*