NFS报文分析
- 格式:doc
- 大小:429.00 KB
- 文档页数:12
NFS理论《1》概念:(Network FileSystem)的简称特点:可以实现不同操作的系统之间的共享,主要用于linux服务器与客户之间的共享个别的档案,实现要比samba简单的多。
要实现window与Linux之间的共享还是samba比较容易主配置文件:/etc/exports主要设定这个文档。
系统没有默认,系统不一定会存在,需要手动创建/usr/sbin/exportfs维护分享资源指令/usr/sbin/showmount客户端指令用于查看NFS服务器上的共享资源(showmount -e)/var/lib/nfs/xtab用于查看哪些客户端访问过本机的共享资源相关服务:portmap(端口映射服务)ypserv服务---必要要先启动第一个服务《2》安装及相关配置1如果没有exports档案请手动创立注意名字别错2 共享及权限设置格式(vi /etc/exports)预分享目录主机名1或者IP(参数1,参数2)(a)参数参数1 权限:ro只读rw可读可写参数2no_root_squash:如果想用root分享目录,写入档案还具有保root权限可使用本参数,及其不安全不推荐使用root_squash:在登入NFS主机使用分享目录的使用者如果是root,那么它的身份将会被压缩为匿名用户,用户会变成nobady这个系统账户的身份all_squash不管以什么用户登入,他的身份都会被压缩为匿名用户即nobadyanonuid: *_squash设定用户匿名访问的UID值,通常为nobody,可自行设定必须是你的/etc/passwd当中aonogid:*_squash设定GID用法作用同UIDsync:数据同步写入到硬盘中async:先放于内存中。
NFS实验典型案例1.要将/tmp分享出去。
要就所有人都可以读写,要让root写入还具有root 的权限vi /etc/exprots写入(/tmp *(rw,no_root_squash)注意:A *()中间不可以有空格B root的身份登入你的linux主机,那么你的mount上我这部主机上的/tmp 之后,你在该mount目录中将有root的权限2.要将/home/public分享出去。
windows和Linux用SAMBA服务器,但是Linux和Linux主机如何共享资源呢?答案是NFS(network file system)NFS是SUN公司与1984年开发的,它是一种分布式文件系统。
它的原理是在客户端上,通过网络将远程主机共享的文件系统利用安装mount的方式加入本机的文件系统,此后操作就像本地操作一样。
这样的好处就是除了提成资源的使用效率,还可以大大节省硬盘的空间,因为每台主机不需要将所有的文件都复杂到本地上,同时也可以做到资源集中管理。
目前nfs有两个版本NFSV2,NFSV3,NFS用RPC来传递客户端和服务端间的信息,因此在双方进行NFS时,必须启动portmap服务,并且适当的RUN level。
而且portmap服务在运行时,也需要以下协作rpc.mountd rpc.nfsd,如果确定portmap服务已经启动,可以运行指令,假设已经使用portmap服务的nfs服务器为#rpcinfo -p 下面介绍一下NFS服务器的安装和启动。
[root@ns1 ~]# rpm -qa|grep nfs //查看一下软件是否安装了,因为自己已经开始安装系统的时候已近安装了。
所以用rpm -qa|grep nfs查询了一下下面是3个软件包名字。
system-config-nfs-1.3.23-1.el5nfs-utils-lib-1.0.8-7.2.z2nfs-utils-1.0.9-24.el5[root@ns1 ~]# service nfs start启动nfs服务停止stop 重新启动restart。
看进程是否正常.可以用ps ax|grep nfsd来检查[root@ns1 ~]# ps ax|grep nfsd3577 ? S< 0:00 [nfsd4] 3578 ? S 0:00 [nfsd]3579 ? S 0:00 [nfsd]3580 ? S 0:00 [nfsd]3581 ? S 0:00 [nfsd]3582 ? S 0:00 [nfsd]3583 ? S 0:00 [nfsd]3584 ? S 0:00 [nfsd]3585 ? S 0:00 [nfsd]3632 pts/0 S+ 0:00 grep nfsd查看目前NFS的服务器状态。
NFS故障的解析和处理-电脑资料日常的工作和学习中,我们使用的一些系统以及相应的操作中,难免会遇到一些故障问题,。
那么对于NFS故障的分析和解决我们在下文中为大家做了具体的分析和处理,希望本文的总结对您处理问题能够有所帮助。
NFS故障1、NFSD没有启动起来首先要确认 NFS 输出列表存在,否则 nfsd 不会启动.可用 exportfs 命令来检查,如果exportfs 命令没有结果返回或返回不正确,则需要检查 /etc/exports 文件.NFS故障2、 mountd 进程没有启动mountd 进程是一个远程过程调用 (RPC) ,其作用是对客户端要求安装(mount)文件系统的申请作出响应.mountd进程通过查找/etc/xtab文件来获知哪些文件系统可以被远程客户端使用.另外,通过mountd进程,用户可以知道目前有哪些文件系统已被远程文件系统装配,并得知远程客户端的列表.查看mountd是否正常启动起来可以使用命令rpcinfo进行查看,在正常情况下在输出的列表中应该象这样的行: 1000051udp1039mountd 1000051tcp1113mountd 1000052udp1039mountd 1000052tcp1113mountd 1000053udp1039mountd 1000053tcp1113mountd如果没有起来的话可以检查是否安装了PORTMAP组件.rpm -qa|grep portmapNFS故障3、fs type nfs no supported by kernelkernel不支持nfs文件系统,重新编译一下 KERNEL就可以解决.NFS故障4、 can't contact portmapper: RPC: Remote system error - Connection refused出现这个错误信息是由于SEVER端的PORTMAP没有启动.NFS故障5、mount clntudp_create: RPC: Program not registeredNFS没有启动起来,可以用showmout -e host命令来检查NFSSERVER是否正常启动起来.NFS故障6、mount: localhost:/home /test failed, reason given by server: Permission denied这个提示是当 client要mount nfs server时可能出现的提示,意思是说本机没有权限去mount nfs server上的目录.解决方法当然是去修改NFS SERVER咯.NFS故障7、被防火墙阻挡这个原因很多人都忽视了,在有严格要求的网络环境中,我们一般会关闭linux上的所有端口,当需要使用哪个端口的时候才会去打开.而NFS默认是使用111端口,所以我们先要检测是否打开了这个端口,另外也要检查 TCP_Wrappers的设定.。
NFS报文分析范文NFS(Network File System)是一种在网络上共享文件系统的协议。
它允许多台计算机通过网络连接和共享文件和目录,使得用户可以像访问本地文件一样访问远程文件。
NFS协议采用客户端-服务器的模型,其中客户端是需要访问远程文件的计算机,而服务器则存储和管理文件。
NFS报文是在客户端和服务器之间传输的协议数据单元,用于进行文件访问和操作。
在NFS报文中,最常见的操作类型包括读取文件、写入文件、创建目录、删除文件等。
下面我们将对其中几种常见的操作类型进行分析。
1. 读取文件(Read):客户端向服务器发送一个读取请求,请求读取指定文件的内容。
报文头中包含了操作类型为Read,报文体中包含了读取的文件句柄、读取的起始位置和读取的字节数。
服务器接收到请求后,会读取文件的对应部分内容,并将内容返回给客户端。
2. 写入文件(Write):客户端向服务器发送一个写入请求,请求将指定数据写入到指定文件中。
报文头中包含了操作类型为Write,报文体中包含了写入的文件句柄、写入的起始位置和写入的数据。
服务器接收到请求后,会将数据写入到文件的对应位置。
3. 创建目录(Create):客户端向服务器发送一个创建目录的请求,请求在指定目录下创建一个新的子目录。
报文头中包含了操作类型为Create,报文体中包含了创建的目录路径和权限等信息。
服务器接收到请求后,会在指定目录下创建一个新的子目录,并返回创建结果给客户端。
4. 删除文件(Remove):客户端向服务器发送一个删除文件的请求,请求删除指定的文件。
报文头中包含了操作类型为Remove,报文体中包含了要删除的文件路径。
服务器接收到请求后,会删除指定的文件,并返回删除结果给客户端。
除了以上提到的几种操作类型,NFS协议还支持许多其他操作类型,如重命名文件、列出目录内容、获取文件属性等。
总结起来,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原理分析范文网络文件系统(Network File System,NFS)是一种用于在计算机网络中共享文件的协议。
它通过允许客户端计算机远程访问服务器上的文件,使得多台计算机可以共享相同的文件并进行协作。
NFS的设计目标是为了提供透明的文件访问服务,使得远程文件访问不感知于网络和服务器资源的限制。
下面将对NFS的原理进行分析。
NFS使用基于客户端-服务器模型的架构,其中服务器端维护文件系统并处理文件共享请求,而客户端通过发出远程过程调用(Remote Procedure Call,RPC)来访问和操作这些共享文件。
NFS的通信是通过网络传输的,因此保证了不同平台和操作系统之间文件的兼容性。
NFS的工作方式是通过操作文件的文件句柄(File Handle)来实现的。
文件句柄是服务器端唯一标识一个文件的数据结构,它包含了文件的元数据(如inode号)和服务器端的文件句柄。
客户端通过使用文件句柄来定位和访问文件,而不需要了解文件的具体路径和位置。
NFS采用了多层缓存机制来提高文件访问的性能。
客户端维护了本地缓存(Local Cache)来存储最近访问的文件数据,以减少对服务器端的请求。
服务器端也维护了文件缓存(File Cache)来存储经常访问的文件数据,以加快文件的读取速度。
此外,NFS还可通过客户端和服务器端之间的有效管理和控制来避免数据的冲突和不一致。
NFS还支持文件锁定机制,以确保在多个客户端同时访问相同文件时不会导致数据的错误和不一致。
通过锁定文件,NFS允许客户端对文件进行独占或共享访问,避免了同时写入导致的数据冲突。
NFS的安全性主要通过访问控制列表(Access Control List,ACL)和身份认证机制来实现。
ACL定义了对文件的访问权限,以确保只有授权的用户才能访问和修改文件。
NFS还支持多种身份认证方法,包括基于口令的认证、基于密钥的认证和基于Kerberos的认证,提供了强大的安全性保障。
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客户端(共享权限参数)格式,定义要共享的⽬录与相应的权限。
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使用详解之二.服务状态查询及设置操作系统版本:[root@localhost /]# cat /etc/redhat-release1、检查portmap服务运行状态(因为NFS及其辅助程序都是基于RPC的,所以我们要确保系统中首先运行portmap服务)[root@localhost /]# iduid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:system_r:unconfined_t[root@localhost /]# service portmap statusportmap is stopped结果显示portmap服务是停止的,可以通过以下命令启动该服务:[root@localhost /]# service portmap startStarting portmap: [ OK ][root@localhost /]# service portmap statusportmap (pid 11085) is running...结果显示portmap服务已处于“running”状态。
2、检查nfs服务运行状态[root@localhost /]# service nfs statusShutting down NFS mountd: rpc.mountd is stoppednfsd is stoppedrpc.rquotad is stopped结果显示nfs服务是停止的,可以通过以下命令启动该服务:[root@localhost /]# service nfs startStarting NFS services: [ OK ]Starting NFS quotas: [ OK ]Starting NFS daemon: [ OK ]Starting NFS mountd: [ OK ]此时来检查一下nfs服务运行状态,由下可知,nfs服务已启用。
NFS⼯作原理及配置⽂件详解nfs⼯作原理流程如上图所⽰,当访问程序通过NFS客户端向NFS服务端存取⽂件时,其请求数据流程如下⼏点:1、⾸先⽤户访问⽹站程序,由程序在NFS客户端上发出NFS⽂件存取功能的询问请求,这时NFS客户端(即执⾏程序的服务器)RPC服务(portmap 或rpcbind服务)就会通过⽹络向NFS服务端的RPC服务(即portmap或rpcbind服务)的111端⼝发出NFS⽂件存取功能的询问请求。
2、NFS服务端的RPC服务(即portmap或rpcbind服务)找到对应的已注册的NFSdaemon端⼝后,通知NFS客户端的RPC服务(即portmap或rpcbind服务)。
3、此时NFS客户端就可获取到正确的端⼝,然后就直接与NFS daemon联机存取数据了。
4、NFS客户端把数据存取成功后,返回给前端程序,告诉⽤户存取结果,作为⽹站⽤户,我们就完成了⼀次存取操作。
由于NFS的各项功能都需要向RPC服务(即portmap或rpcbind)注册,所以RPC服务(即portmap或rpcbind服务)才能获取到NFS服务的各项对应的端⼝号(portnumber)、PID、NFS在主机所监听的IP等,⽽NFS客户端才能够通过向RPC服务(即portmap或rpcbind服务)询问从⽽找到正确的端⼝。
也就是说,NFS需要有RPC服务(即portmap或rpc服务),NFS服务只需在服务端后于RPC服务启动,客户端⽆需启动NFS服务。
NFS的rpc服务,在CentOS5.X下名称为portmap,在CentOS6.x下名称为rpcbind。
[root@nfsserver /]# /etc/init.d/nfs restartShutting down NFS daemon: [ OK ]Shutting down NFS mountd: [ OK ]Shutting down NFS quotas: [ OK ]Shutting down NFS services: [ OK ]Shutting down RPC idmapd: [确定]Starting NFS services: [ OK ]Starting NFS quotas: [ OK ]Starting NFS mountd: [ OK ]Starting NFS daemon: [ OK ]正在启动 RPC idmapd: [确定]从上⾯NFS服务启动过程的提⽰,可以看护运⾏NFS服务默认需要启动的服务或进程⾄少有:NFS quotas(rpc.rquotad)、NFS daemon(nfsd)、NFS mountd(rpc.mountd)。
1NFS报文分析NFS协议基于RPC协议,每个NFS报文都对应着一个RPC报文类型。
除NFS报文外,PORTMAP,MOUNT等同NFS密切相关的报文也在分析范围内。
除特别说明外,本次分析服务器IP为192.168.0.120,客户端IP为192.168.0.186。
1.1 查询远程可挂载的目录1.1.1NFS服务未开启如果服务器未开启NFS功能输入showmount –e 主机名或IP则在终端显示:mount clntudp_create: RPC: Program not registered主要交互流程:客户端通过TCP与服务器的Portmap程序建立连接,尝试通过TCP 远程调用GETPORT,服务器返回MOUNT功能为开启。
然后客户端再次尝试通过UDP达到此目的,服务期同样返回PROGRAM_NOT_AVAILABLE。
整个过程是基于RPC的。
1.1.2NFS服务已开启客户端首先通过PORTMAP远程调用请求MOUNT的端口。
后面又重传两次,重传报文的XID相同的,而服务器就是通过XID来判断一个报文是否是另一个的REPLY。
服务器得到请求后返回端口号33394。
客户端使用33394端口来进行EXPORT类型MOUNT请求。
服务器返回请求,内容如下:Procedure:EXPORT下面的V alue Follows代表List 是否还有内容。
在获取到这个List后会在终端显示:1.2 挂载远程目录挂载远程目录的过程最本质的是如何获得此目录在服务器上的文件句柄,我们在分析下面的交互时始终以此为中心。
1.2.1挂载不存在的目录首先通过客户端通过一个基于TCP的RPC获得MOUNT的端口32771,之后,客户端试图通过MOUNT请求来获得/home/work_ro 的句柄,从而实现远程挂载。
但由于目录不存在,服务器会当作权限不够来处理,所以返回ERR_ACCESS。
1.2.2成功挂载前面的交互和目录不存在的情况基本相同,只是服务器在MOUNT请求后返回了要挂在目录句柄。
NFS平台运维分析SbA【导语】使用NFS文件系统,出现客户端IIANG死,或者df命令HANG死的情况并不少见,原因也十分复杂,往往不容易定位,本文结合作者实践提出了有效的分析方法,希望能够对大家解决此类问题有所助益。
【作者】白缮(徐戟),南京基石数据技术有限责任公司技术总监,在软件开发、系统运维、信息系统优化、信息系统国产化替代等领域从事技术研究近30年,曾主持开发了国内首套电信级联机实时计费系统、国内首套三检合一的检验检疫管理系统、银行综合大前置平台(IPP)等大型系统。
著有《Orac1eRAC 日记》、《Orac1eDBA优化日记》和《DBA的思想天空》等技术专著。
信息无障碍研究会专职顾问,深圳市鳏鹏产业联盟高级顾问,Orac1eACE,P OSTGRESQ1ACEDIRECTOR O个人微信公众号:白鳍的洞穴有个朋友咨询一个问题,他通过NFSMOUNT了一个分布式文件系统,发现对这个文件系统df的时候经常hang死,他检查了一番系统,发现内存使用率很高,大部分物理内存都被CaChe占用了。
他想通过分析CaChe中都有哪些数据,通过这个分析来确认CaChe占用率高和NFShang之间是否存在关联关系。
当时我的建议是首先不要把问题直接定位到OS内存上,如果系统不存在严重的SWAP,哪怕物理内存使用率达到98%,也是关系不大的。
实际上使用NFS文件系统,出现客户端hang死,或者df命令HANG死的情况并不少见,我这些年里也遇到过多次。
我遇到的NFShang死问题的原因也十分复杂,不过大多数都与NFSBUG、网络问题、系统资源消耗过高、IO负载过大等有关。
NFS客户端访问NFS文件hang住,一般来说有三种可能性,一种是客户端出现问题,第二种是服务端出现问题,第三种是客户端和服务端都存在问题。
似乎这个总结有点太笼统了,也有点投机取巧,不过穷举法是我们在针对未知问题分析的最重要的方法。
如果我们不能穷举所有的可能性,那么在问题诊断分析的时候就可能无法定位。
NFS运⽤及详解NFS理论《1》概念:(Network FileSystem)的简称特点:可以实现不同操作的系统之间的共享,主要⽤于linux服务器与客户之间的共享个别的档案,实现要⽐samba简单的多。
要实现window与Linux之间的共享还是samba⽐较容易主配置⽂件:/etc/exports主要设定这个⽂档。
系统没有默认,系统不⼀定会存在,需要⼿动创建/usr/sbin/exportfs维护分享资源指令/usr/sbin/showmount客户端指令⽤于查看NFS服务器上的共享资源(showmount -e)/var/lib/nfs/xtab⽤于查看哪些客户端访问过本机的共享资源相关服务:portmap(端⼝映射服务)ypserv服务---必要要先启动第⼀个服务《2》安装及相关配置1如果没有exports档案请⼿动创⽴注意名字别错2 共享及权限设置格式(vi /etc/exports)预分享⽬录主机名1或者IP(参数1,参数2)(a)参数参数1 权限:ro只读rw可读可写参数2no_root_squash:如果想⽤root分享⽬录,写⼊档案还具有保root权限可使⽤本参数,及其不安全不推荐使⽤root_squash:在登⼊NFS主机使⽤分享⽬录的使⽤者如果是root,那么它的⾝份将会被压缩为匿名⽤户,⽤户会变成nobady这个系统账户的⾝份all_squash不管以什么⽤户登⼊,他的⾝份都会被压缩为匿名⽤户即nobadyanonuid: *_squash设定⽤户匿名访问的UID值,通常为nobody,可⾃⾏设定必须是你的/etc/passwd当中aonogid:*_squash设定GID⽤法作⽤同UIDsync:数据同步写⼊到硬盘中async:先放于内存中。
NFS实验典型案例1.要将/tmp分享出去。
要就所有⼈都可以读写,要让root写⼊还具有root 的权限vi /etc/exprots写⼊(/tmp *(rw,no_root_squash)注意:A *()中间不可以有空格B root的⾝份登⼊你的linux主机,那么你的mount上我这部主机上的/tmp 之后,你在该mount⽬录中将有root的权限2.要将/home/public分享出去。
这是我写的第一份笔记式文档,是对自己最近在研究NFS方面的一个小小的总结,这个稳定也参考和引用了一部分别人的文档,这里表示感谢,这篇是根据LINUX来写的,有空的话我还会写一篇FOR FREEBSD和SOLARIS的。
超全的NFS文档(FOR LINUX)欢迎大家和我交流网络方面的技术问题msn:bcst@ qq:11300242如果要转载的话请保留以上信息,谢谢配合一、 NFS简介NFS-Network FileSystem的缩写,NFS是由Sun开发并发展起来的一项用于在不同机器,不同操作系统之间通过网络互相分享各自的文件。
NFS server也可以看作是一个FILE SERVER,它可以让你的PC通过网络将远端得NFS SERVER共享出来的档案MOUNT到自己的系统中,在CLIENT看来使用NFS的远端文件就象是在使用本地文件一样。
NFS协议从诞生到现在为止,已经有多个版本,如NFS V2(rfc1094),NFS V3(rfc1813)(最新的版本是V4(rfc3010)。
二、各NFS协议版本的主要区别V3相对V2的主要区别:1、文件尺寸V2最大只支持32BIT的文件大小(4G),而NFS V3新增加了支持64BIT文件大小的技术。
2、文件传输尺寸V3没有限定传输尺寸,V2最多只能设定为8k,可以使用-rsize and -wsize 来进行设定。
3、完整的信息返回V3增加和完善了许多错误和成功信息的返回,对于服务器的设置和管理能带来很大好处。
4、增加了对TCP传输协议的支持V2只提供了对UDP协议的支持,在一些高要求的网络环境中有很大限制,V3增加了对TCP 协议的支持*5、异步写入特性6、改进了SERVER的mount性能7、有更好的I/O WRITES 性能。
9、更强网络运行效能,使得网络运作更为有效。
10、更强的灾难恢复功能。
异步写入特性(v3新增加)介绍:NFS V3 能否使用异步写入,这是可选择的一种特性。
详解NFS协议网络文件系统的工作原理与配置指南NFS协议(Network File System)是一种用于在网络上共享文件和目录的协议。
它允许一个计算机上的用户通过网络访问另一台计算机上的文件,就好像这些文件位于本地计算机上一样。
本文将详细解析NFS协议的工作原理,并提供NFS协议的配置指南。
一、NFS协议的工作原理NFS协议是基于客户端-服务器模型的,其中客户端是发起文件访问请求的一方,而服务器是存储和提供文件的一方。
下面将详细介绍NFS协议的工作流程。
1. 客户端访问请求:客户端通过NFS客户端软件向服务器发送文件访问请求。
这通常是通过文件路径来标识需要访问的文件或目录。
2. 服务器响应:服务器接收到客户端的请求后,判断请求的合法性和可行性。
如果请求无效或不满足服务器的要求,服务器将返回错误消息给客户端。
3. 客户端权限验证:在成功接收到客户端请求后,服务器会验证客户端的身份和访问权限。
只有经过验证的客户端才能够继续文件访问过程。
4. 文件传输:在权限验证通过后,服务器将根据客户端请求的文件路径,将文件的数据块传输给客户端。
这些数据块通过网络进行传输。
5. 读写操作:客户端可以使用读操作从服务器中获取文件的数据,也可以使用写操作将数据写入服务器中的文件。
这样可以实现文件在不同计算机之间的共享和同步。
6. 文件锁定:为了确保多个客户端同时访问同一文件时不会发生冲突,NFS协议支持文件锁定机制。
当一个客户端对某个文件进行写操作时,其他客户端将无法对该文件进行写操作,直到锁定被释放。
7. 会话终止:当客户端完成文件的读写操作后,或者不再需要访问服务器上的文件时,会话可被终止。
终止会话后,客户端与服务器之间的连接被关闭。
二、NFS协议的配置指南在配置NFS协议之前,需要先确保系统已经安装了NFS软件包。
下面是NFS协议的简单配置指南。
1. 服务器端配置:- 安装NFS服务软件包;- 编辑NFS的配置文件(通常是/etc/exports),指定共享的目录和允许访问的客户端;- 启动NFS服务,确保服务在系统引导时自动启动。
nfs4 报文接收处理流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!NFS4 报文接收处理流程如下:1. 接收报文:服务器接收到客户端发送的 NFS4 报文。
1NFS报文分析
NFS协议基于RPC协议,每个NFS报文都对应着一个RPC报文类型。
除NFS报文外,PORTMAP,MOUNT等同NFS密切相关的报文也在分析范围内。
除特别说明外,本次分析服务器IP为192.168.0.120,客户端IP为192.168.0.186。
1.1 查询远程可挂载的目录
1.1.1NFS服务未开启
如果服务器未开启NFS功能输入
showmount –e 主机名或IP
则在终端显示:
mount clntudp_create: RPC: Program not registered
主要交互流程:
客户端通过TCP与服务器的Portmap程序建立连接,尝试通过TCP 远程调用GETPORT,服务器返回MOUNT功能为开启。
然后客户端再次尝试通过UDP达到此目的,服务期同样返回PROGRAM_NOT_AVAILABLE。
整个过程是基于RPC的。
1.1.2NFS服务已开启
客户端首先通过PORTMAP远程调用请求MOUNT的端口。
后面又重传两次,重传报文的XID相同的,而服务器就是通过XID来判断一个报文是否是另一个的REPLY。
服务器得到请求后返回端口号33394。
客户端使用33394端口来进行EXPORT类型MOUNT请求。
服务器返回请求,内容如下:
Procedure:EXPORT下面的V alue Follows代表List 是否还有内容。
在获取到这个List后会在终端显示:
1.2 挂载远程目录
挂载远程目录的过程最本质的是如何获得此目录在服务器上的文件句柄,我们在分析下面的交互时始终以此为中心。
1.2.1挂载不存在的目录
首先通过客户端通过一个基于TCP的RPC获得MOUNT的端口32771,之后,客户端试图通过MOUNT请求来获得/home/work_ro 的句柄,从而实现远程挂载。
但由于目录不存在,服务器会当作权限不够来处理,所以返回ERR_ACCESS。
1.2.2成功挂载
前面的交互和目录不存在的情况基本相同,只是服务器在MOUNT请求后返回了要挂在目录句柄。
此后通过PORTMAP得到NFS的端口,
挂载成功后,客户端还要通过PORTMAP得到NFS端口,NFS端口这一部分请参看RFC1094。
完成上面的交互后,请求的文件目录已经成功挂载到了本地。
通过TYPE为GETATTR类型的NFS报文得到挂载目录的属性,其中包括:文件类型,访问权限,文件大小,文件的归属者以及上次的访问时间等,如下图:
然后,客户端发出了FSSTAT请求,这个请求的内容为此目录的动态信息。
如下图:
目录的动态信息包括,总大小,可用的小等。
客户端发送FSINFO请求,服务器返回目录的静态的信息。
1.2.3挂载多个目录到本地
现在,向服务器
可以看到,在请求第一个目录时,我们可以看到在一个基于TCP的PORTMAP请求后,服务器返回了一个PORTMAP报文。
但在后面的两个目录的请求过程中却只有请求,没有回复。
1.3 管理远程目录
1.3.1管理远程目录包括:获取列表,新建目录,新建文件,
删除目录,删除文件,修改文件,修改属性等。
1.3.2获取远程目录
通过ll命令来查看目录下面的文件列表,目录root_ro(0x75ec0804)
下有以下文件或目录:
aaa hello bbb ccc test test2
我们可以看到客户端会首先进行一次GETATTR的请求,来确认挂载的是目录或者是文件。
在Type字段说明了类型。
请求GETATTR后,客户端发出对root_ro的ACCESS的请求,得到的报文主要内容如下:
说明客户端可以读root_ro但不可进行创建等操作。
作为挂载的顶级目录,root_ro同样是不可LOOKUP的。
除非挂载了root_ro的上一级目录。
在客户端得到allow READ的消息后,通过发送NFS的READDIR请求,得到目录内容列表。
通过这个报文的内容,我们可以看到,root_ro目录下的内容。
然后,客户端开始又一次请求对root_ro的ACCESS报文,这个动作贯穿于NFS的所有交互中。
当前请求的目的是看是否有权限进行下面的对子目录的LOOK UP操作。
得到allow READ之后,开始逐个发送子目录或文件的LOOKUP报文。
在服务器发回的Reply报文中包含了这个目录或文件的句柄File Handle。
“NFS中一个基本概念是文件句柄(file handle)。
它是一个不透明(opaque)的对象,用来引用服务器上的一个文件或目录。
不透明
是指服务器创建文件句柄,把它传递给客户,然后客户访问文件时,使用对应的文件句柄。
客户不会查看文件句柄的内容——它的内容,只对服务器有意义。
“每次一个客户进程打开一个世纪位于一个NFS服务器上的文件时,NFS客户就会NFS服务器那里获得该文件的一个文件句柄。
每次NFS 客户为用户进程读或写时,文件句柄就会传给服务器以指定被访问的文件。
一般情况下,用户进程不会和文件句柄打交道——之有NFS客户和NFS服务器将文件句柄传来传去。
在第2版的NFS中,一个文件句柄占据32个字节,第3版中增加为64个字节。
”
——TCP/IP详解:卷1
1.3.3新建目录
在挂载根目录下,新建目录test1
新建目录时,首先进行两次ACCESS请求,获得对挂载根目录的操作权限。
经过上面两次请求,客户端向服务器查询要建立的目录是否存在。
服务器回复不存在。
客户端再经过一次ACCESS请求后,发送NFS的MKDIR报文。
服务器在返回Reply时,同时返回新建目录的file handle。
如下图:
图1-1
1.3.4改变文件属性
主要操作为:首先客户端请求对挂载根目录的权限,和根目录的属性来判断是否可以改变test1的属性。
再进行一次权限的请求,然后获得test1的属性。
最后通过SETA TTR请求来改变test1的属性。
1.3.5删除目录
主要交互过程和新建目录大致相同,不做冗述。
1.3.6卸载远程目录
先获得MOUNT的端口32771,在通过此端口卸载远程目录。