一、简介

NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过网络共享资源。将NFS主机分享的目录,挂载到本地客户端当中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,在客户端端看起来,就像访问本地文件一样。

RPC,基于C/S模型。程序可以使用这个协议请求网络中另一台计算机上某程序的服务而不需知道网络细节,甚至可以请求对方的系统调用。

对于Linux而言,文件系统是在内核空间实现的,即文件系统比如ext3、ext4等是在Kernel启动时,以内核模块的身份加载运行的。

二、原理

NFS本身的服务并没有提供数据传递的协议,而是通过使用RPC(远程过程调用 Remote Procedure Call)来实现。当NFS启动后,会随机的使用一些端口,NFS就会向RPC去注册这些端口。RPC就会记录下这些端口,RPC会开启111端口。通过client端和sever端端口的连接来进行数据的传输。在启动nfs之前,首先要确保rpc服务启动。

具体过程如下:

  1. 本地用户要访问nfs服务器中文件,先向内核发起请求,内核处理调用nfs模块及rpc client
  2. rpc client向rpc server发起连接
  3. 在连接之前,NFS服务除了启动nfsd本身监听的端口2049/tcp和2049/udp,还会启动其它进程(如mountd,statd,rquotad等)以完成文件共享,这些进程的端口是不固定的;是每次NFS服务启动时向RPC服务注册的,RPC服务会随机分配未使用的端口
  4. 完成连接,接受访问请求
  5. nfs应用程序向内核发起请求
  6. 内核调用文件系统

​ 然后client端通过获取的NFS端口来建立和server端的NFS连接并进行数据的传输。

以下为启动各服务的作用

rpc: 远程过程调用协议,是实现本地调用远程主机实现系统调用的协议。

portmapper: 负责分配rpc server的端口,并在client端请求时,负责响应目的rpc server端口返回给client端,工作在tcp与udp的111端口上。

mountd: 是nfs服务的认证服务的守护进程,client在收到返回的真正端口时,就会去连接mountd,认证取得令牌。

nfsd: nfs的守护进程,负责接收到用户的调用请求后与内核发出请求并得到调用结果响应给用户,工作在tcp和udp的2049端口。

idmapd: 是NFS的一个程序,用来负责远程client端创建文件后的权限问题。

quotad: 用于实现磁盘配额,当client端挂载nfs后可以限制磁盘空间的大小。

三、NFS服务配置安装

相关配置文件及命令的使用

vi /etc/exports

/path/to/somedir CLIENT_LIST

多个客户之间使用空白字符分隔

每个客户端后面必须跟一个小括号,里面定义了此客户访问特性,如访问权限等

172.16.0.0/16(ro,async) 192.16.0.0/24(rw,sync) *(ro)

权限属性:

  • ro:只读

  • rw:读写

  • sync:同步,数据同步写到内存与硬盘中

  • async:异步,数据先暂存内存

  • root_squash: 将root用户映射为来宾账号

  • no_root_squash: 有root的权限,不建议使用

  • all_squash: 全部映射为来宾账号

  • anonuid, anongid: 指定映射的来宾账号的UID和GID

exportfs命令(导出:主节点重新配置挂载):

-a:跟-r或-u选项同时使用,表示重新挂载所有文件系统或取消导出所有文件系统;

-r: 重新导出

-u: 取消导出

-v: 显示详细信息

showmount命令:

  • showmount -e NFS_SERVER: 查看NFS服务器"导出"的各文件系统

  • showmount -a NFS_SERVER: 查看NFS服务器所有被挂载的文件系统及其挂载的客户端对应关系列表

  • showmount -d NFS_SERVER: 显示NFS服务器所有导出的文件系统中被客户端挂载了文件系统列表

rpcinfo

-p hostname(orIP)

-p :显示所有的 port 与 program 的信息!

如果要让mountdquotad等进程监听在固定端口,编辑配置文件/etc/sysconfig/nfs

客户端使用mount命令挂载

mount -t nfs NFS_SERVER:/PATH/TO/SOME_EXPORT /PATH/TO/SOMEWHRERE

安装配置

环境准备:

server端:192.168.1.222 centos 7

client端:192.168.1.200 centos 6.5

1.在服务端安装nfs,

yum install nfs-utils rpcbind -y

2.编辑/etc/exports,并启动nfs

启动:  systemctl start nfs

开机自启 :systemctl start nfs

3.客户端同样安装nfs-utils和rpcbind并启动,必须先启动rpcbind,否则报错(注意防火墙等)

4.挂载并查看挂载信息

客户端挂载
  mount -t nfs 192.168.1.222:/var/nfs /mnt

showmount –e 192.168.1.222

在服务器端/var/nfs创建目录或文件,并在客户端/mnt查看即可。

将所有用户映射为来宾账号实验

  1. 在服务器端添加用户hot,并修改配置文件并重新挂载文件系统

    添加用户

    useradd –u 520 hot

    修改/etc/exports

    /var/nfs 192.168.1.0/24(rw,async,all_squash,anonuid=520)

    重新挂载导出

    exportfs –ra

  2. 在客户端上添加用户code,分别在code用户和root用户下创建文件,查看文件属性

    可以看到文件属主都为服务器端设置好的来宾账号hot的uid

    让mountd和quotad等进程监听在固定端口,编辑配置文件/etc/sysconfig/nfs,取消注释

    重启nfs,查看端口

nfs原理及安装配置相关推荐

  1. 使用LVS实现负载均衡原理及安装配置详解

    使用LVS实现负载均衡原理及安装配置详解 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均 ...

  2. NFS介绍,NFS服务端安装配置,NFS配置选项

    2019独角兽企业重金招聘Python工程师标准>>> NFS介绍: NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网 ...

  3. Nginx 教程(一)-- 工作原理及安装配置

    Nginx简介 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在一个BSD-like协议下发行,由俄罗斯人IgorSysoev开发,共俄罗斯大型的搜索 ...

  4. mysql安装原理_全面解读MySQL主从复制,从原理到安装配置

    为什么需要主从复制? 1.在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了 ...

  5. 14.1 NFS介绍 14.2 NFS服务端安装配置 14.3 NFS配置选项

    2019独角兽企业重金招聘Python工程师标准>>> 第14章 NFS服务搭建与配置 14.1 NFS介绍 NFS(Network File System)即网络文件系统,是Fre ...

  6. zookeeper工作原理、安装配置、工具命令简介

    1 Zookeeper简介 Zookeeper 是分布式服务框架,主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理等等. ZooK ...

  7. FastDFS图片服务器的原理和安装配置

    1. 分布式文件存储 FastDfs 1.1. 技术说明 FastDFS是用C语言编写的一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等 ...

  8. 2019.2.4 nfs原理和安装实验

    NFS 访问一个本地文件还是NFS共享文件对于客户端而言都是透明的,当文件打开的瞬间,内核会作出一个决定,如果是本地文件内核会将本地NFS共享文件内核会将NFS共享文件的所有引用传递给-->NF ...

  9. centos nfs java_CentOS下安装配置NFS并通过Java进行文件上传下载

    1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...

最新文章

  1. QEMU — I/O QoS 的实现方式
  2. Learning Attention-based Embeddings for Relation Prediction in Knowledge Graphs Deepak
  3. 这些Python骚操作,你值得拥有
  4. 基于ZYNQ FPGA实现8路ADC数据采集存储(AD7606)
  5. 把ct图像像素值转化为_CT爱好者的点点滴滴
  6. TensorFlow 支持 Unicode,中文 NLP 终于省心了
  7. 机器学习之SVM调参实例
  8. ODBC数据源的配置方法
  9. Java 单向链表翻转
  10. R语言基础期末大作业
  11. 如何理解失效模式与影响分析(FMEA)
  12. 在MacOS下为2K显示器开启HiDPI
  13. Linux学习笔记(三) -- Visual Studio Code 的安装与卸载
  14. 在c语言中是闰年的条件为,C语言如何判断是闰年,闰年判断条件?
  15. Debain查看ip地址
  16. Vue 中使用高德地图api
  17. Gboard键盘词库导入方法
  18. 黑马程序员入学Java知识——精华总结
  19. Promise(微任务)- 让你看完就懂
  20. 【随机优化】李雅普诺夫优化在通信与排队系统中的应用(第一章)-绪论

热门文章

  1. MPB:华南农大王文策组-​水禽肠道食糜微生物脂多糖含量的检测
  2. NBT:噬菌体激发根际防御军团(附视频)
  3. Cell:绝对异养型生物改造成完全自养型生物
  4. 亦正亦邪,骨骼惊奇的LGG
  5. Nature综述: 蓝藻水华的形成机理及防治动态
  6. java制作画布_java – 使用自定义方法绘制到画布?
  7. pandas基于dataframe字符串数据列包含(contains)特定字符串来筛选dataframe中的数据行(rows where values contain substring)
  8. R语言vtreat包自动处理dataframe的缺失值、使用分组的中位数来标准化数据列中每个数据的值(和中位数表连接并基于中位数进行数据标化)、计算数据列的中位数或者均值并进行数据标准化
  9. Python使用matplotlib可视化绘图时你可用的颜色有哪些?把色彩可视化出来自己选好了
  10. R语言伯努利分布(Bernoulli distribution)函数(dbern, pbern, qbern rbern)实战