NFS基本原理及实现

本文旨在复习NFS基本原理及其实现

知识储备



1.NFS是将网络上某台主机的共享目录映射到本地,直接对其进行操作,NFS也是NAS的一种解决方案

2.该共享目录必须是已创建文件系统的,而无需格式化、创建文件系统等,这即是SAN和NAS的区别

3.NFS本质是通过RPC调用实现的

4.对于Linux而言,文件系统是在内核空间实现的,即文件系统比如ext3、ext4等是在Kernel启动时,以内核模块的身份加载运行的,当然了具体文件系统选择可以在编译和裁剪内核时修改。

什么是RPC?



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

RPC工作流程:

Client端仅需要发起RPC Call,同时传递必要参数;

Server端的守护进程一方面监听客户端的RPC Call,另一方面引领这些RPC Call来调用本地的程序或者系统服务来执行,这些程序在执行时还是用客户端传递来的参数。

参考文章

http://blog.csdn.net/mindfloating/article/details/39474123

http://wiki.dzsc.com/info/8466.html

NFS实现原理



对于客户端而言,直接使用mount挂载远程的NFS,然后像操作本地目录一样操作即可;

对于服务器,实现NFS有几个关键组件:

NFS quotas

用于实现磁盘配额的高级功能,当客户端挂载NFS后可以限制使用磁盘空间大小;

NFS mountd

NFS借助于RPC,仅支持基于IP的认证,因为这是一种远程过程的调用,而不是请求/响应服务,没有认证能力。那么如何实现认证呢?是通过辅助进程mountd来实现的,mountd负责发放令牌!多个mountd进程可以监听在不同的端口号上,前提这些端口号都事先在RPC统一调度管理器rpcbind中注册过,从而实现多个用户并发访问;

1.客户端想要挂载NFS时,去问Server端的rpcbind;

2.rpcbind查询自己的注册表,选择一个已经注册的mountd进程和端口号;

3.mountd完成对客户端的身份认证,发放令牌给客户端;

4.客户端接着访问nfsd TCP/UDP 2049进行挂载后的正常操作

所以,mountd进进程其实是辅助进程,是为了增强nfsd完成用户身份认证的能力的!

NFS idmapd

用户挂载了远端的NFS,那么创建的文件的属主属组是谁呢?如果客户端A用用户名test创建了文件,而NFS Server上又没有test用户,那该咋办?

idmapd很好地解决了这个问题,是客户端和服务器端账号映射关系的解决工具。

NFS配置文件



NFS Server配置文件/etc/exports,只需要遵循格式,附加参数即可!这个文件可能不存在,创建即可。格式为:

文件系统      客户端1(选项)    客户端2(选项)  ...

客户端:

只允许某个IP 10.134.140.64
只允许某个网段 10.134.140.64/24,10.134.140.64/255.255.255.0
只允许某个FQDN www.centos.org 前提能解析
只允许某个Domain *.centos.org 前提能解析

常用选项:

secure 缺省选项,使用1024以下的TCP端口实现 NFS 的连接。指定 insecure 可禁用;
async 异步,即所有数据变动不直接写到磁盘,先放内存,达到提交点再写入,可改善性能;
no_wdelay 关闭写延时;
nohide 如果将一个目录挂载到另外一个目录上,原来目录通常就被隐藏。要禁用这种行为,需启用 hide 选项。
no_subtree_check 关闭子树检查,子树检查会执行一些不想忽略的安全性检查。缺省选项是启用子树检查。
no_auth_nlm 不对加锁请求进行认证。如果关心安全性,避免使用该选项。缺省选项是 auth_nlm 或 secure_locks。
mp 显式地声明这个选项,NFS 要求挂载所导出的目录
fsid=num NFS 故障恢复的情况中使用。如希望实现 NFS 的故障恢复,请参考 NFS 文档。

用户映射选项:

root_squash 不允许 root 用户访问挂载上来的 NFS 卷
no_root_squash 允许 root 用户访问挂载上来的 NFS 卷
all_squash 限制所有的 UID 和 GID,只使用匿名用户。缺省设置是 no_all_squash。
anonuid、anongid 将匿名 UID 和 GID 修改成特定用户和组帐号。

用户映射选项本质是通过idmapd这个辅助进程来实现的,还记得吗?

NFS实验



实验要求:

1.NFS服务器共享目录/mageedu给10.134.140.63/24访问;

2.以读写方式应用,要求异步;

3.客户端上存在,而服务器端不存在的用户,全部映射为服务器端的nfsuser用户;

实验步骤1.编辑NFS配置文件

useradd nfsuser
mkdir /mageedu && touch hello.txt
vi /etc/exports
/mageedu 10.134.140.63/24(rw,async,root_squash,anonuid=501,anongid=501)

实验步骤2.客户端查看并挂载NFS

showmount -e 10.134.140.63
mount -t nfs 10.134.140.63:/mageedu /mnt


实验步骤3.验证root权限

这是因为启用了root_squash后,root会被映射为NFS Server上的匿名用户来进行操作,而又附加了参数anonuid、anongid即指定了匿名用户的身份是UID=501 GID=501的nfsuser这个用户。

而该用户在/mageedu上是没有权限写入的,可以查看到!

那么不妨在NFS Server上的/mageedu目录下创建一个让nfsuser用户可读可写的目录,再来测试!

mkdir /mageedu/read_write
setfacl -m u:nfsuser:rwx /mageedu/read_write

此时再去服务器上看权限呢?

至此,已经搭建完毕!

补充说明


  1. 实现开机自动挂载可以编辑/etc/fstab,挂载选项建议加上 _netdev 这样标识该挂载目录为网络设备,如果找不到暂时不挂载,而不会阻塞下去;
  2. 挂载选项可以按照需求调节rsize和wsize,接收缓冲区、发送缓冲区大小,可改善性能;
  3. 客户端常用命令showmount、mount
  4. 服务器端常用命令rpcinfo、exports、exportfs[可以在不重启NFS服务的情况下重新导入导出共享目录]
时间: 2024-11-05 17:22:47

NFS基本原理及实现的相关文章

linux文件系统简介

文件系统是linux的一个十分基础的知识,同时也是学习linux的必备知识. 本文将站在一个较高的视图来了解linux的文件系统,主要包括了linux磁盘分区和目录.挂载基本原理.文件存储结构.软链接硬链接.和常见目录的介绍.相信有了这些知识对于深入的学习linux会有一定的帮助.文章例子主要是基于ubuntu发行版. 如有不对之处请大家多多指出. 1.Linux磁盘分区和目录 Linux发行版本之间的差别很少,差别主要表现在系统管理的特色工具以及软件包管理方式的不同.目录结构基本上都是一样的.

Linux文件系统简介----转载

原文地址:Linux文件系统 文件系统是linux的一个十分基础的知识,同时也是学习linux的必备知识. 本文将站在一个较高的视图来了解linux的文件系统,主要包括了linux磁盘分区和目录.挂载基本原理.文件存储结构.软链接硬链接.和常见目录的介绍.相信有了这些知识对于深入的学习linux会有一定的帮助.文章例子主要是基于ubuntu发行版. 如有不对之处请大家多多指出. 1.Linux磁盘分区和目录 Linux发行版本之间的差别很少,差别主要表现在系统管理的特色工具以及软件包管理方式的不

Linux文件系统介绍(转)

文章转自:http://www.iteye.com/topic/816268 文件系统是linux的一个十分基础的知识,同时也是学习linux的必备知识. 本文将站在一个较高的视图来了解linux的文件系统,主要包括了linux磁盘分区和目录.挂载基本原理.文件存储结构.软链接硬链接.和常见目录的介绍.相信有了这些知识对于深入的学习linux会有一定的帮助.文章例子主要是基于ubuntu发行版. 如有不对之处请大家多多指出. 1.Linux磁盘分区和目录 Linux发行版本之间的差别很少,差别主

KickStart+nfs+dhcp+tftp无人值守批量安装CentOS6.5(或CentOS7)

一.基本原理简介 PXE 是一种系统引导的方式.进行 PXE 安装的必要条件是要安装的计算机中包含一个 PXE 支持的网卡(NIC Network Information Center),即网卡中必须要有 PXE Client. PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动.协议分为client和server两端,PXE client在网卡的ROM中,当计算机引导时,BIOS把PXE client调入内存执行,并显示出

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.节省本地存储空间将常用的

Windows挂载NFS文件系统

主机 操作系统 IP地址 软件包 NFS主机 Centos7.2 192.168.190.128 nfs-utils.rpcbind Windows Client Windows server 2008 192.168.190.129 网络文件系统 注:以下实验均关闭防火墙以及其它安全机制 NFS主机操作: # 使用yum安装nfs-utils和管理工具rpcbind [[email protected] ~]# yum -y install nfs-utilsrpcbind # 建立共享文件夹

linux nfs服务安装

nfs为网络文件系统也可理解为文件共享,方式为服务器上安装nfs服务,客户端通过挂在的方式把服务器上的目录挂载到本地,实现文件共享 1.查看有没有安装nfs rpm -qa |grep nfs 2.安装nfs yum -y install nfs-utils 3.开启服务 /etc/init.d/nfs start /etc/init.d/rpcbind start 4.配置exports vi/etc/exports /home/zuzhao 192.168.1.0  255.255.254.

Xen-Server创建NFS ISO及NFS(VHD)虚拟磁盘存储

在XEN-CENTER 中选择新建存储,打开新建存储窗口,然后选择ISO库下的NFS iso选项,单击下一步. 输入名称(nfs(192.168.26.209)iso库,选择下一步. 在出现的窗口中输入共享名称192.168.26.209:/data/nfs(地址填写方式为IP:服务器上具体的目录路径),单击完成即可. 创建NFS ISO完成,可以使用该存储设备中的镜像进行系统的安装. 接下来我们再创建一个NFS虚拟存储磁盘用于系统的安装. 选择下一步,输入虚拟磁盘存储的名称(NFS(192.1

nfs 服务器和客户端安装配置

nfs 服务器 cat /etc/redhat-release                                   //查看系统版本 uname -r                                                        //查看内核 uname -m                                                      //查看系统多少位 rpm -qa nfs-utils portmap rpcbin