NFS详细分析
1. NFS服务介绍
1.1什么是NFS服务
NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样,也就是说客户端PC可以挂载NFS服务器所提供的目录并且挂载之后这个目录看起来如同本地的磁盘分区一样,可以使用cp、cd、mv、rm及df等与磁盘相关的命令。
1.2 NFS服务的优缺点
1.2.1优点
a.节省本地存储空间将常用的数据存放在一台服务器可以通过网络访问
b.简单容易上手
c.方便部署非常快速,维护十分简单
1.2.2缺点
a.局限性容易发生单点故障,及server机宕机了所有客户端都不能访问
b.在高并发下NFS效率/性能有限
c.客户端没用用户认证机制,且数据是通过明文传送,安全性一般(一般建议在局域网内使用)
d.NFS的数据是明文的,对数据完整性不做验证
e.多台机器挂载NFS服务器时,连接管理维护麻烦
2. NFS服务工作原理
下面给大家看一幅图

2.1 NFS原理简单介绍
NFS Server服务器上设定/data目录被分享,而客户端可以通过internet将/data目录挂载到本地的挂载点(常用mnt)后,客户端就可以进入挂载点目录进行文件的读写。NFS客户端所开放的端口是随机的我们不知道,那该怎么办呢?那是不是就不能进行数据传输了呢?答案当然是NO了那就需要另外一种服务帮他分配port了,服务是什么呢?那就是RPC服务了!想知道什么是RPC服务那就往下看啦~~~
2.2 RPC简单介绍
2.2.1什么是rpc服务
RPC(Remote Procedure Call)即远程过程调用。RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的port上去。
2.2.2 RPC服务原理

a.执行顺序:1(注册端口)--à2(达成协议)-à3(直接建立联系)--à4(达成协议)--à5(建立连接)
b.那为啥rpc能够找到对应的port呢?这是因为当服务器在启动NFS时会随机取用数个port,并且主动的向RPC注册,因此RPC可以知道每个NFS的port对应的NFS功能,然后RPC又是固定使用port111来监听客户端的需求并汇报客户端的正确的port。
2.2.3 portmap
功能:主要是把RPC程序号转化为Internet的端口号。
特点:只在第一次建立连接时候帮助网络应用程序找到正确的port,当当双方正确连接时,端 口就和应用绑定,portmap就无用。相当于媒婆。
2.3NFS Server配置安装
2.3.1 yum安装nfs服务rpc服务
|
1
|
[root@nfsserver~]# yum -y install nfs* #nfs*有nfs-utils、nfs-utils-lib、nfs-utils-lib-devel和nfs4-acl-tools |
2.3.2 检查rpc服务和nfs服务是否安装并且安装成功
|
1
2
3
4
5
6
|
[root@nfsserver~]# rpm -qa rpc* nfs* nfs-utils-lib-1.1.5-11.el6.x86_64 nfs-utils-lib-devel-1.1.5-11.el6.x86_64 rpcbind-0.2.0-11.el6.x86_64nfs-utils-1.2.3-64.el6.x86_64nfs4-acl-tools-0.3.3-7.el6.x86_64 |
2.3.3 启动rpc服务和NFS服务(先启rpc服务,后启NFS服务)
|
1
2
3
4
5
6
7
|
[root@nfsserver/]# /etc/init.d/rpcbind startStartingrpcbind: [ OK ][root@nfsserver/]# /etc/init.d/nfs startStarting NFSservices: [ OK ]Starting NFSmountd: [ OK ] Starting NFSdaemon: [ OK ]Starting RPCidmapd: [ OK ] |
2.3.4 设置开机自启
|
1
2
3
4
5
6
|
[root@nfsserver/]# chkconfig nfs on [root@nfsserver/]# chkconfig rpcbind on [root@nfsserver/]# chkconfig --list |grep -E "nfs|rpcbind" nfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off nfslock 0:off 1:off 2:off 3:on 4:on 5:on 6:off rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off |
2.3.5配置共享目录/data(nfs配置文件时/etc/exports 默认是空的)
|
1
2
3
|
[root@nfsserver~]# vim /etc/exports #share /datafor nfsclient /data192.168.137.2/10(rw,sync, no_all_squash) |
2.3.6 建立共享目录
|
1
|
[root@nfsserver ~]# mkdir /data |
2.3.7 平滑加载NFS服务并检查服务(shoumount -e localhost)
|
1
2
3
4
|
[root@nfsserver~]# /etc/init.d/nfs reload[root@nfsserver~]# showmount -e localhost Export list forlocalhost: /data192.168.137.2/10 |
2.4 NFS Client 配置
2.4.1安装rpc服务
|
1
|
[root@nfsclient01 ~]# yum -y installrpcbind |
2.4.2 启动rpc服务并检查
|
1
2
3
4
5
|
[root@nfsclient01~]# /etc/init.d/rpcbind startStartingrpcbind: [ OK ][root@nfsclient01~]# ps -ef| grep "rpc" rpc 1208 1 0 13:38 ? 00:00:00 rpcbind root 1212 1135 0 13:39 pts/0 00:00:00 grep rpc |
2.4.3 设置开启自启并检查
|
1
2
3
|
[root@nfsclient01~]# chkconfig rpcbind on[root@nfsclient01~]# chkconfig --list rpcbindrpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off |
2.4.4 挂载并测试
挂载/data到/mnt目录下
|
1
|
[root@nfsclient01/]# mount -t nfs 192.168.137.7:/data /mnt |
大家注意了,如果是新的机子的话在这里可能会出现这样的一个error
|
1
2
|
mount: wrong fstype, bad option, bad superblock on 192.168.137.7:/data,missing codepage or helper program, orother error(for several filesystems (e.g. nfs, cifs)you might need a /sbin/mount.<type> helperprogram) In some cases useful info is found insyslog - try dmesg | tail or so |
解决方法是安装一个nfs-utils之后再挂载一次就ok
|
1
2
|
[root@nfsclient01 /]# yum -y installnfs-utilsroot@nfsclient01 /]# mount -t nfs 192.168.137.7:/data/mnt |
最后,将挂载命令写进rc.local
3. NFS配置知识介绍
3.1 NFS 配置文件格式
3.1.1 NFS配置文件:/etc/exports(默认为空)
3.1.2/etc/exports格式

3.1.3 权限参数
| 权限参数类型 | 功能 |
| rw | 可读写的权限 |
| ro | 只读的权限 |
| sync(同步) | 资料同步写入到内存与硬盘中(慢,不容易丢数据) |
| async(异步) | 资料会暂存于内存当中,而不是写入硬盘(快,容易丢数据) |
| no_root_squash | 客户端用root用户访问该共享文件夹时, root用户不会映射成匿名用户(极不安全,不建议使用) |
| root_squash | 客户端用root用户访问该共享文件夹是,将root用户映射为匿名用户 |
| all_squash | 不论登入NFS的使用者身份是谁,他的身份都会被压缩成匿名用户(nfsnobody) |
| anonuid=xxx | 指定NFS服务器的匿名用户UID |
| anongid=xxx | 指定NFS服务器的匿名用户GID |
| insecure | NFS通过1024以上的端口发送 |
| secure | NFS通过1024以下的安全TCP/IP端口发送 |
| hide | 在NFS共享目录中共享其子目录 |
| no_hide | 在NFS共享目录中共享其子目录 |
| wdelay | 如果多个用户写入NFS目录,则归组写入(默认) |
| no_wdelay | 如果多个用户写入NFS目录,则立即写入,当使用async时,无需此设置 |
| subtree_check | 在共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认) |
| no_subtree_check | 和上面相对,不检查父目录权限 |
3.2 NFS常用命令
| 命令 | 参数 | 含义 |
| exportfs | -a | 递增式更新,对/etc/export增加或修改的部分进行挂载和卸载 |
| -i<文件> | 指定配置文件 | |
| -r | 更新配置重新读取/etc/exports | |
| -u | 卸载指定的目录 | |
| -o | 使用指定的参数 | |
| -v | 显示共享详细情况 | |
| showmount | -a或--all | 以host:dir 这样的格式来显示客户主机名和挂载点目录 |
| -d或--directories | 仅显示客户端挂载的目录名 | |
| -e或--exports | 显示NFS服务器输出清单 | |
| -h或--help | 显示帮助信息 | |
| -v或--version | 显示版本信息 | |
| --no-headers | 禁止输出描述头部信息 | |
| rpcinfo语法:rpcinfo –p [host];rpcinfo [-n port] –u |-t host program[version] | ||
| rpcinfo | -p(probe,探测) | 列出所有在host用portmap注册的RPC程序,如果没有指定的host,就查找本地上的RPC程序 |
| -n(port number,端口号) | 根据-t或者-u,使用编号为port的端口,而不是由portmap指定的端口号 | |
| -u(UDP) | UDP RPC调用host上程序program的version版本,并报告是否接収到响应 | |
| -t(TCP) | TCP RPC调用host上程序program的version版本(如果指定的话),并报告是否接收到响应 | |
| -b(broadcast,广播) | 向程序program的version版本进行RPC广播,并列出响应的主机 | |
| -d(delete,删除) | 将程序program的version版本从本机的RPC注册表中删除。只有root特权用户才可以使用这个选项 | |
| mount(nfs) | -t | 指定设备的文件系统类型 |
| -r | 以只读方式加载设备 | |
| umount | -t | 仅卸除选项中所指定的文件系统 |
| -r | 若无法成功卸除,则尝试以只读的方式重新挂入文件系统 | |
3.3 NFS出问题解决方法及生产应用场景:
大中小型网站(2000wpv以下)线上应用,当web服务器少的时候,弃用nfS,同步数据到web服务器上(上传数据太快的话,同步延迟较大)
看配置是否有问题à看服务是否开启à挂载没反应à挂载没反应(看ping通?然后看telnet通不通)
NFS详细分析的更多相关文章
- Ubuntu搭建NFS服务器,NFS协议详细分析
目录 1. Ubuntu搭建NFS服务器 2. NFS协议分析 2.1 实验拓扑: 2.2 在kali抓包分析 1. Ubuntu搭建NFS服务器 NFS(Network FileSystem,网 ...
- ZIP压缩算法详细分析及解压实例解释
最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...
- 1125MySQL Sending data导致查询很慢的问题详细分析
-- 问题1 tablename使用主键索引反而比idx_ref_id慢的原因EXPLAIN SELECT SQL_NO_CACHE COUNT(id) FROM dbname.tbname FORC ...
- LinkedList详细分析
一.源码解析1. LinkedList类定义2.LinkedList数据结构原理3.私有属性4.构造方法5.元素添加add()及原理6.删除数据remove()7.数据获取get()8.数据复制clo ...
- android ListView 九大重要属性详细分析、
android ListView 九大重要属性详细分析. 1.android ListView 一些重要属性详解,兄弟朋友可以参考一下. 首先是stackFromBottom属性,这只该属性之后你做好 ...
- C语言中的static 详细分析
转自:http://blog.csdn.net/keyeagle/article/details/6708077/ google了近三页的关于C语言中static的内容,发现可用的信息很少,要么长篇大 ...
- Linux内核OOM机制的详细分析(转)
Linux 内核 有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了 防止内存耗尽而内核会把该进程杀掉.典 ...
- Android-Native-Server 启动和注册详细分析
Android-Native-Server 启动和注册详细分析 以mediaService为实例来讲解: mediaService的启动入口 是一个 传统的 main()函数 源码位置E:\ ...
- px,dp,dip,sp,in,mm,pt详细分析
px,dp,dip,sp,in,mm,pt详细分析 px :(pixels),屏幕的像素点,不同的设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多. dip :(devi ...
随机推荐
- 1,java的跨平台原理
简单讲一下java的跨平台原理: (1)为什么跨平台: 由于各OS支持的指令集各不相同,就需要程序在不同的平台执行不同的代码 (2)JAVA是如何实现的: ava开发了适合不同的OS及不同位数的jav ...
- jqgrid postData setGridParam 调用多次时查询条件累加的问题--详情页查询导致的无法在新的页面中查询
$("#btn_search").click(function () { url = "/AMEvents/GetGridJson?evtype=1"; var ...
- CSS限制
http://www.cnblogs.com/YanPSun/archive/2012/03/16/2400141.html
- 从let和const谈起
注册博客园账号也有好些年了,有事没事经常来逛逛,感觉博客园的同学们一直都很活跃,相比国内其他社区来讲,这里的技术氛围很浓,非常适合学习和交流,所以博主我也决定在这里驻扎了,在这里,博主希望能坚持写一些 ...
- 如何对POST请求但是URL中也有参数/GET请求但是请求体中也有参数的情况进行安全扫描
通常情况下,GET的参数都在URL中,POST的参数都在请求体中,但是如题的情况也有,像使用方法PUT.DELETE的情况也有,这些情况该如何进行安全扫描呢?
- django book用户认证学习
用户与Authentication 通过session,我们可以在多次浏览器请求中保持数据, 接下来的部分就是用session来处理用户登录了. 当然,不能仅凭用户的一面之词,我们就相信,所以我们需要 ...
- JAX-WS编写webservice
1.新建一个Java工程 2.创建要发布的类 package com.linjian.webservice; import javax.jws.WebMethod; import javax.jws. ...
- Exception thrown in catch and finally clause
Based on reading your answer and seeing how you likely came up with it, I believe you think an " ...
- [转载]Elasticsearch Java API总汇
from: http://blog.csdn.net/changong28/article/details/38445805#comments 3.1 集群的连接 3.1.1 作为Elasticsea ...
- spring 配置多数据源 (可行)
可以看到AbstractRoutingDataSource获取数据源之前会先调用determineCurrentLookupKey方法查找当前的lookupKey,这个lookupKey就是数据源标识 ...