NFS (网络文件系统)

NFS (网络文件系统)

https://www.cnblogs.com/wahaha02/p/9559345.html

Linux网络文件系统的实现与调试
NFS协议
NFS (网络文件系统)不是传统意义上的文件系统,而是访问远程文件系统的网络协议。整个NFS服务的TCP/IP协议栈如下图所示,NFS是应用层协议,表示层是XDR,会话层是RPC,传输层同时支持UDP和TCP,网络层是IP协议。NFS/XDR/RPC等协议规范细节在《TCP/IP详解 卷1:协议》第29章有详细的描述,这里不再赘述。

经过多年的演进,NFS协议有多个版本,每个版本都有相应的RFC规范,如RFC1813。每个NFS的版本对比如下所示。

NFS通过NFS过程来对外提供服务。如下是RFC1813中定义的一组NFS过程。

null() 返回():不执行任何操作,有两个作用:相当于到服务器的ping,以及检测客户端和服务器间的RTT(Round Trip Time)。
lookup(dirfh, name) 返回(fh, attr):返回目录中一个指定文件的fhandle和属性信息。
create(dirfh, name, attr) 返回(newfh, attr):创建一个新文件并且返回它的fhandle和属性信息。
remove(dirfh, name) 返回(status):从指定目录中删除文件。
getattr(fh) 返回(attr):返回文件属性信息。这个调用类似于一个stat调用。
setattr(fh, attr) 返回(attr):设置一个文件的mode,uid,gid,size,access time,modify time属性。将文件大小设置为0相当于对文件调用truncate。
read(fh, offset, count) 返回(attr, data):从文件的offset偏移处开始,返回最多count个字节的数据。read操作也返回文件的属性信息。
write(fh, fh, offset, count, data) 返回(attr):向文件offset偏移处开始,写入count字节的数据,返回写操作完成后的文件属性信息。
rename(dirfh, name, tofh, toname) 返回(status):将dirfh目录中名为name的文件,重命名为tofh目录中名为toname的文件。
link(dirfh, name, tofh, toname) 返回(status):在tofh目录中创建名为toname的链接,指向dirfh目录中的name文件。
symlink(dirfh, name, string) 返回(status):在dirfh目录中创建一个名为name的符号链接。服务器不解释string的具体内容,而只是简单将其保存起来并且与符号链接文件相关联。
mkdir(dirfh, name, attr) 返回(fh, newattr):在dirfh目录中创建名为name的目录,并返回其fhandle和属性信息。
rmdir(dirfh, name) 返回(status):从dirfh中删除名为name的空目录。
readdir(dirfh, cookie, count) 返回(entries):从dirfh目录返回组多count字节的目录项信息。每个目录项信息包含了一个文件名,文件id,和一个由服务器解释的指向下一个目录项的指针cookie。cookie的作用是在后续readdir操作中从一个指定的位置返回目录项信息。cookie为0的readdir调用从目录的第一个目录项开始返回。
statfs(fh) 返回(fsstats):返回块大小、空闲块数等文件系统的信息。
NFS特性对比
NFSv3特性对比
V2支持的最大的文件大小为2GB(32bit),V3则更大(64bit)。
V2将每个READ和WRITE 过程可以读写的数据限制为8192个字节,V3则取消了限制。RPC的读写字节数只受TCP/IP限制。
V3引入新的NFS过程COMMIT,支持异步写,提高写性能。
V3引入新的NFS过程ACCESS,支持服务侧ACL访问权限检查。
V3引入新的NFS过程READDIRPLUS,其返回file handle和属性,这样可以减少LOOKUP的调用次数。
V3对RPC命令进行优化,每个影响文件属性的RPC都返回新的属性,这样可以减少GETATTR的调用次数。
NFSv4特性对比
V3是无状态的,V4开始支持状态。改善文件系统的异常恢复能力。
V4支持file delegation(客户端可以工作在本地副本,直到其他客户端请求同一个文件),改善文件系统一致性问题。
V4引入新的NFS过程COMPOUND,支持一个COMPOUND请求包含多个NFS过程。提高请求的表达能力,减少RPC请求的调用次数。
V4强制支持RPCSEC/GSS,改善文件系统的安全问题。
V4支持加密ACL,改善文件访问权限管理。
V4服务端为客户端支持统一的伪文件系统视图。服务端所有export目录都必须在一个伪文件系统root export目录下。
V3客户端的IP是自动适配的,V4客户端支持mount clientaddr参数,可以指定客户端特定的IP地址。
NFSv4.1特性对比
客户端可以并行访问存储设备。
支持多个服务端。
支持文件系统的元数据和数据分离。
delegation功能支持目录。
支持会话机制(session),改善断链、崩溃等异常恢复能力。
Linux NFS实现与实例
LInux NFS架构是典型的CS架构,其结构如下图所示。其中服务端应用程序主要由如下几部分组成:

portmap:端口映射器,主要功能是进行RPC程序的端口映射工作。当客户端尝试连接并使用RPC服务器提供的服务(如NFS服务)时,portmap会将所管理的与服务对应的端口提供给客户端,从而使客户可以通过该端口向服务器请求服务。
rpc.mountd:NFS挂载守护进程,主要功能是实现NFS MOUNT协议,负责挂载/卸载NFS文件系统和权限管理。它会读取NFS的配置文件/etc/exports来对比客户端访问权限。挂载成功后,客户获得服务器文件系统的一个文件句柄(fh)。
rpc.nfsd:NFS服务端守护进程,是NFS服务的用户态部分,负责创建nfsd内核进程。需要提出的是,NFS服务的大部分功能都由nfsd内核进程处理。
可以看出NFS服务的大部分功能都是由内核模块实现的,除了图中所示的内核模块,内核还提供了几个内核守护进程:

nfsd:主要作用是处理NFS的RPC请求。
nfsiod:主要作用是为NFS客户端提供高效的缓冲机制,如预读、延时写等,从而改善NFS文件系统的性能。
rpciod:主要作用是作为RPC(远过程调用服务)的守护进程,用于从客户端启动I/O服务。

下图是一个NFS协议消息流图实例(点击见大图),包含了一些典型的网络文件系统操作场景,如:

服务注册过程
NFS挂载:mount 168.0.155.1:/datadisk0 /tmp
改变工作目录:cd /tmp
查看目录下文件:ls
读文件:more tail bootcfg.ini

Linux NFS调试
NFS应用程序调试
打开应用程序调试功能:

/usr/sbin/portmap -d
/usr/sbin/rpc.mountd -d all
/usr/sbin/rpc.nfsd -d -s

查看NFS配置与记录日志:

cat /etc/exports
cat /var/lib/nfs/rmtab
cat /var/lib/nfs/etab
cat /var/lib/nfs/xtab
cat /var/lib/nfs/state
tail /var/log/messages

NFS内核模块调试
打开NFS模块调试功能:

sysctl -w sunrpc.nfs_debug=2147483647
sysctl -w sunrpc.nfsd_debug=2147483647

查看NFS相关统计和日志:

cat /proc/slabinfo | grep nfs
/proc/fs/nfsfs/
nfsstat
dmesg

TCP/IP模块调试
打开RPC模块调试功能:

sysctl -w sunrpc.rpc_debug=2147483647

查看RPC相关统计和日志:

cat /var/run/portmap_mapping
cat /proc/net/rpc/nfs
cat /proc/net/rpc/nfsd

查看TCP/IP相关统计和配置:

ping // 查看网络情况
netstat -tpwn | grep 2049 // 查看NFS TCP链接
cat /proc/sys/net/ipv4/... // 查看网络配置,如tcp_retries2等
cat /proc/net/rpc/nfs
cat /proc/net/rpc/nfsd // deciles等字段
cat /proc/net/snmp // IP: ReasmFails等字段

网络抓包:

tcpdump -s 9000 -w /tmp/dump.out port 2049

其他
nfs-utils移植
./configure
CC=XX-gcc
--build=$(./config.guess)
--host=mips64-unknown-linux-gnu
LDFLAGS="-L/usr/local/lib"
CPPFLAGS="-I/usr/local/include"
--disable-tirpc --disable-gss --disable-uuid --without-tcp-wrappers --with-gnu-ld

make

make install

文件系统导出条件
由NFS导出的文件系统由配置文件/etc/exports配置,可以导出的文件系统需要满足如下2个条件:

文件系统必须有一个设备号(需要有FS_REQUIRES_DEV,即存储设备)或FSID号(需要有NFSEXP_FSID 或 ->uuid)。
文件系统必须支持s_export_op接口。而支持s_export_op接口的文件系统都是存储设备文件系统,如ext3/4、ubifs等。其他文件系统如rootfs、ramfs、sysfs等是不支持的。

原文地址:https://www.cnblogs.com/Leo_wl/p/9585972.html

时间: 2024-10-12 20:38:28

NFS (网络文件系统)的相关文章

NFS网络文件系统的应用

    NFS是linux中非常常见的一种网络文件系统,其的搭建配置也非常简单,在一般的企业应用中较为广泛.下面就介绍一下NFS在企业环境中的基本应用,在应用中我们也可以更好的理解NFS网络文件系统的工作原理. 1)企业中一般应用场景 如上图一般我们要在中心服务器上设置好共享目录,由其他客户端挂在相应的共享目录,这样客户端服务器就可以想在本地一样往中心服务器上读写数据了.由上图也可以看出NFS服务一般由服务端和客户端组成. 2)rpc服务 既然想使用NFS服务就必须了解RPC服务的相关内容,因为

Centos6.6 安装nfs网络文件系统

一.介绍 nfs网络文件系统的,大部分用在内网文件共享,比如,对集群上传文件做共享,经常用在图片部分,当然数据量大了还是要做分离,做为专门的接口比较好,介绍一下基本安装环境: 1)Cnetos6.6 2)nfs-utils-1.2.3 3) rpcbind-0.2.0 二.安装 yum install -y rpcbind nfs-utils 三.配置 echo "/data 192.168.19.145(rw)" >/etc/exports #指定目录 运行挂载主机 以及有哪些

NFS 网络文件系统 简单搭建

NFS网络文件系统搭建简单 NFS依赖于RPC(远程调用)端口号:2049 功能:用于Unix间数据共享和数据传输(挂载完成数据同步) Linux系统与Linux系统  Linux系统与aix系统  aix系统与aix系统 实验环境 Redhat7.3Linux系统 两台机器可以Ping通 IP配置服务端192.168.10.1 客户端192.168.10.5 安装步骤如下: 关闭防火墙 systemctl stop firewalld.service 查看是否关闭 systemctl stat

NFS 网络文件系统挂载在A8板子上

我承认自己是菜鸟,没什么网络知识就来搞挂载nfs网络文件系统,花费了5天的时间才把nfs网络文件系统成功挂载在A8板子上,实现了A8板子和虚拟机的文件共享.分享一下个人经验: 以下是基于nfs已经完成安装来说 板子接线问题:我是把板子和电脑都接到同一个路由器上的,保证在同一个网段,我的网关是192.168.0.1,故我的电脑.虚拟机.板子的网关也是它,我的电脑ip地址是192.168.0.111.虚拟机ip为192.168.0.121,板子ip为192.168.0.120,发现上面就是192.1

NFS(网络文件系统的搭建)

关于NFS的原理,我在这就不概诉了,其实非常简答的理解就是一个网络磁盘,你需要把它挂载到你的磁盘上使用而已.那接下来谈谈如和搭建NFS网络文件系统. 需要使用2台机器作此实验,我分别配置IP为192.168.2.69(服务器端)  192.168.2.66 (客户端) 1,首先在服务端上安装nfs-utils和rpcbind. yum insall -y nfs-utils rpcbind 这里其实在yum安装的时候已经将rpcbind安装上去了. 2,编辑nfs配置文件. vim /etc/e

NFS网络文件系统的搭建

NFS网络文件系统的搭建 什么是NFS网络文件系统? NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样. 在linux中,NFS主要用来做网络数据共享的.NFS网络文件一般被用来存储共享视屏.图片.附件等静态的资源文件. 由于NFS在linux中端口并不是固定的,所以很难确定NFS使用

linux下NFS网络文件系统的搭建

1.首先准备两台主机,一台做服务器,一台做客户机,保证两台能够相互通信 服务器IP地址:192.168.4.5 客户机IP地址:192.168.4.205 2.给服务器配置NFS服务 [[email protected] /]# rpm -q nfs-utils rpcbind nfs-utils-1.2.3-39.el6.x86_64 rpcbind-0.2.0-11.el6.x86_64 确定这两个软件包已经安装,如果没有安装需要安装 3.修改nfs的配置文件 新建共享目录 [[email 

[学习嵌入式开发板]iTOP-4412实现NFS网络文件系统

本文转自迅为:http://www.topeetboard.com 学习平台:iTOP-4412开发板 本文讲解如何在 iTOP-4412 开发板上实现 NFS 网络文件系统. 我们使用的软硬件环境是:一台 PC,上面运行虚拟机 Ubuntu,iTOP-4412 开发板一块,PC 机和iTOP-4412 开发板通过网线连接到路由器上面,路由器分配的网段是 192.168.1.x 的 ip 地址,默认网关是路由器的 ip 地址,即 192.168.1.1.PC 机的 ip 地址是 192.168.

linux系统之间通过nfs网络文件系统挂载设置方法

linux系统之间通过nfs网络文件系统挂载设置方法 NFS允许一个系统在网络上与他人共享目录和文件,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,下面介绍linux系统之间通过nfs网络文件系统挂载的设置方法 NFS简介 NFS是Network File System的简写,即网络文件系统. 网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS. NFS允许一个系统在网络上与他人共享目录和文件.通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上

NFS网络文件系统原理及案例

从现在开始我决定把我所学的知识以博客的形式分享给大家,希望对和我一样的菜鸟,同时梦想成为一只老鸟的IT小伙伴有一定的帮助!而对于我而言,这本身也是一种学习呢!好了废话不多说,我们开始进入主题:我们人在接触一个新事物或者是一个新技一个新技术的时候,我们往往想到的第一个问题就是"这是什么呀?"或者"这是干什么的呀?"那么NFS网络文件系统到底是一个什么东西,它的作用又是什么,我们在这里围绕这两个问题进行讨论: 1.什么是NFS NFS是Network File Syst