CentOS6.9下NFS配置说明


NFS是Network File System的缩写,即网络文件系统。它的主要功能是经过网络(通常是局域网)让不一样的主机系统之间能够共享文件或目录。NFS客户端能够经过挂载(mount)的方式将NFS服务端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从NFS客户端的机器本地看,NFS服务端共享的目录就好像是客户本身的磁盘分区或者目录同样,而实际上确是远端的NFS服务端的目录。NFS主要用于类Unix系统之间的共享, 最先是由Sun公司发展出来的。

NFS网络文件系统相似windows系统的网络共享、安全功能、网络驱动器映射,这也和linux系统里的samba服务相似。应用于互联网中小型集群架构后端做为数据共享,若是是大型网站,那么有可能还会用到更复杂的分布式文件系统,例如Moosefs(mfs)、glusterfs、FastDFS。

1、NFS原理流程及RPC服务的介绍
既然NFS是经过网络来进行服务器端和客户端之间的数据传输,那么二者之间要传输数据就要有相对应的网络端口,NFS服务器到底使用哪一个端口来进行数据传输呢?基本上NFS这个服务的端口开在2049,但因为文件系统很是复杂。所以NFS还有其余的程序去启动额外的端口,这些额外的用来传输数据的端口是随机选择的,是小于1024的端口;既然是随机的那么客户端又是如何知道NFS服务器端到底使用的是哪一个端口呢?这时就须要经过远程过程调用(Remote Procedure Call,RPC)协议来实现了!

NFS RPC最主要的功能就是记录每一个NFS功能所对应的端口号,而且在NFS客户端请求时将该端口和功能对应的信息传递给请求数据的NFS客户端,让客户端能够连接到正确的端口上去,从而实现数据传输。只在第一次创建链接时候帮助网络应用程序找到正确的port,当双方正确链接时,端口就和应用绑定,PPC就无用了。至关于媒婆。  

RPC怎样知道NFS的每一个端口呢?
缘由是,当NFS服务启动时会随机取用数个端口,并主动向RPC服务注册取用的相关端口信息,这样,RPC服务就能够知道每一个端口所对应的NFS功能了,而后RPC服务使用固定的端口号111来监听NFS客户端提交的请求,并将正确的NFS端口应答给NFS客户端,这样一来,就可让NFS客户端与服务端进行数据传输了。

提示:在启动NFS SERVER以前,首先要启动RPC服务(即rpcbind服务,下同)不然NFS SERVER就没法向RPC服务注册,另外,若是RPC服务从新启动,原来已经注册好的NFS端口数据就会所有丢失。所以此时RPC服务管理的NFS程序也要从新启动以从新向RPC注册。特别注意:通常修改NFS配置文档后,是不须要重启NFS的,直接在命令执行exportfs –rv便可使修改的/etc/exports生效。

客户端NFS和服务端NFS通信过程

一、首先服务器端启动RPC服务,并开启111端口

二、启动NFS服务,并向RPC注册端口信息

三、客户端启动RPC(rpcbind服务),向服务端的RPC(rpcbind)服务请求服务端的NFS端口

四、服务端的RPC(rpcbind)服务反馈NFS端口信息给客户端。

五、客户端经过获取的NFS端口来创建和服务端的NFS链接并进行数据的传输linux

 
2、NFS服务端软件的安装
一、安装nfs服务主程序nfs-kernel-server
这个软件提供nfs的主要服务,提供文件系统的完整功能。这里要提醒一下,NFS服务器会直接使用到内核的模块,因此内核必需要支持 NFS 才行。若是操做系统的版本是自行编译的内核的话,须要注意编译NFS的内核支持。安装命令以下:
-------------------------------------------------
[root@CentOS ~]# yum install nfs-utils
-------------------------------------------------

二、安装RPC主程序rpcbind之前的程序名叫作portmap
NFS 服务都是经过 RPC 来具体实现的,因此要正常使用NFS服务,须要启动 rpcbind来实现端口的映射工做,经过下面命令安装:
------------------------------------------------
[root@CentOS ~]# yum install rpcbind
------------------------------------------------

3、查看NFS相关服务是否启动
一、启动rpcbind服务
---------------------------------------------------
[root@CentOS ~]# service rpcbind start
---------------------------------------------------

二、启动NFS主服务:
----------------------------------------
[root@CentOS ~]# service nfs start
----------------------------------------

三、设置rpcbind主程序开机启动
----------------------------------------
[root@CentOS ~]# chkconfig rpcbind on
----------------------------------------

四、设置NFS主程序开机启动
------------------------------------
[root@CentOS ~]# chkconfig nfs on
------------------------------------

五、通下面的命令产看上面的服务是否开机启动
---------------------------------------------
[root@CentOS ~]# chkconfig --list rpcbind
[root@CentOS ~]# chkconfig --list nfs
---------------------------------------------


4、NFS server端的配置

一、主要的配置文件:/etc/exports
这个文件是NFS的主要配置文件,若是不存在新建这个文件,后面介绍他的用法。

二、NFS文件系统的维护命令:exportfs
这个是维护NFS共享资源的命令,咱们能够利用这个命令从新共享/etc/exports更新的目录资源、将NFS server共享的的目录卸载或从新共享等,这是NFS系统里面至关重要的一个命令,后面会具体介绍。

5、/etc/exports配置文件的语法与参数
一、先举个例子:将/media/目录共享给局域网中192.168.1.0/24网段的用户可读写而且数据同步写入到硬盘和内存,因此用户只读。/etc/exports配置文件的内容以下:
=============================================
[root@CentOS ~]# vim.tiny /etc/exports
/media     192.168.1.0/24(rw,sync)        *(ro)
[共享目录]   [能够访问的主机(权限)]       [*表明全部用户(权限)]
=============================================
这个配置文件很简单,每一行前面是要共享的目录,是以目录为单位。而后这个目录能够依照不一样的权限共享给不一样的主机,不一样的主机用空格分开,主机后面是以小括号"()"定义权限参数,若权限参数不仅一个时,则以逗号","分开,而且主机名与小括号是连在一块儿的,主机与共享目录之间用空格分开,在这个文件内也能够利用#号来进行注释。

二、主机设置主要有如下几种方式:
可使用完整的IP或者网络号,例如:
单个主机:192.168.1.100  网络号:192.169.1.0/24或192.168.1.0/255.255.255.0

可使用主机名,但这个主机名必需要在/etc/hosts内,或可使用DNS找到该名称,重点是能够找到IP地址,若是是主机名能够支持通配符,例如"*"或"?"都可接受。

三、小括号内经常使用的权限参数以下:
================================================================
ro:共享目录只读;
rw:共享目录可读可写
sync:同步,将数据同步写入内存缓冲区与磁盘中,效率低,但能够保证数据的一致性;
async:异步,将数据先保存在内存缓冲区中,必要时才写入磁盘,效率高,但有丢失数据的风险;
wdelay(默认):若是有多个客户端要对同一个共享目录进行写操做,则将这些操做集中执行。对有不少小的IO写操做时,使用该选项能够有效的提升效率;
no_wdelay:若是有多个客户端要对同一个共享目录进行写操做则当即写入。当设置了async选项时,no_wdelay选项无效,应与sync配合使用;
root_squash(默认):未来访的root用户映射为匿名用户或用户组;
no_root_squash:来访的root用户保持root账号权限;
all_squash:全部访问用户都映射为匿名用户或用户组;
no_all_squash(默认):访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组;
anonuid=<UID>:指定匿名访问用户的本地用户UID,默认为nfsnobody(65534);
anongid=<GID>:指定匿名访问用户的本地用户组GID,默认为nfsnobody(65534);
secure(默认):限制客户端只能从小于1024的tcp/ip端口链接服务器;
insecure:容许客户端从大于1024的tcp/ip端口链接服务器;
subtree_check :若输出目录是一个子目录,则nfs服务器将检查其父目录的权限;
no_subtree_check(默认) :即便输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样能够提升效率;
hide:共享一个目录时,不共享该目录的子目录;
no_hide:共享子目录;
================================================================
若是想了解更多的参数,可使用man exports

6、NFS权限控制
NFS服务器的架设比较简单,最大的问题在于权限方面的管理。前面已经介绍了NFS提供了ro和rw选项,能够控制客户端对共享文件的读或写权限。其实NFS共享文件的访问权限并不只仅由这些选项决定,它由三方面控制,第一方面就是服务器端nfs配置文件里权限参数的控制,第二方面就是服务器端文件在操做系统里的权限控制,包括共享的目录和里面文件的权限,也就是文件的属性中的rwx(读、写、执行)。第三方面就是客户端,共享的目录须要先挂载到客户端指定的目录上,客户端才能经过挂在目录访问,因此客户端挂载目录的权限也起做用,就是目录属性中的rwx(读、写、执行)后面客户端将再介绍。只有客户端的用户同时知足上面的三个条件才能访问共享目录里面的文件。

操做系统对用户的判断其实并非经过用户名,而是经过/etc/passwd文件中所记录的UID号,因为NFS客户端和NFS服务器是两台不一样的机器,即便他们的操做系统有相同的用户名,其UID也不必定同样,那么客户端用户访问NFS服务器的过程是怎样的那?下面举例说明下。

查看用户UID的命令以下:
--------------------------------
[root@CentOS ~]# id -u 用户名
--------------------------------

客户端用户访问共享目录文件的过程以下:
先假设客户端用户名为laopi,UID暂定,用于挂载的共享目录为/Client目录,用户laopi对这个目录的权限为读写执行(目录的执行权限是能够进入这个目录),服务器端共享目录为/Server目录权限为drwxr-xr-x(目录的全部者用户为pipci,UID为1000),nfs共享配置文件里设置为rw

一、当客户端用户laopi的UID与服务器端用户pipci的UID相同时,即laopi的UID也为1000,这种状况因为用户laopi对挂载目录/Client具备读写权执行限,nfs共享配置文件里设置为读写,NFS服务器上pipci用户对共享目录/Server具备读写执行权限,因此客户端用户对共享目录/Server也具备读写执行权限,由于UID相同。

二、当客户端用户laopi的UID与服务器端用户pipci的UID不一样时,假设laopi的UID为1010,这种状况因为用户laopi对挂载目录/Client具备读写权执行限,nfs共享配置文件里设置为读写,可是NFS服务器上UID为1010的用户对共享目录/Server只具备读写权限,因此客户端用户对共享目录/Server也只具备读写权限,由于UID为1010的用户对/Server目录来讲是其余用户。若是也想让laopi用户具备读写执行的权限能够为目录/Server添加其余用户的执行权限

三、当客户端用户为root,由于正常全部Linux操做系统里的root用户UID都为0,因此限制权限的只有nfs共享配置文件里设置参数了,若是权限参数有root_squash选项和rw选项,则就的看共享目录对匿名用有什么权限,若是权限参数root_squash改成no_root_squash选项,那就没有限制了。

7、exportfs命令:输出共享目录
NFS服务启动时会读取/etc/exports配置文件中的内容,把文件中设置的共享目录输出供客户端使用,在NFS服务启动后,若是对/etc/exports进行了更改,须要经过exports命令对共享的目录进行输出,输出完成后,客户端才能访问新设置的共享目录。exportfs命令的用法以下:

[root@CentOS ~]# exportfs  [参数]

参数:
-a :所有输出或取消输出/etc/exports中共享的内容
-r :从新读取/etc/exports中的配置
-u :取消一个或多个共享目录的输出
-i :忽略/etc/exports中的配置,而使用默认或命令行中指定的选项
-o :经过命令添加共享目录,重启后失效。
-v :若是不跟其余选项一块儿使用,则显示当前共享的全部目录及他们的选项设置,若是输出或取消输出共享目录,则显示进行了那些操做。

具体例子:
[root@CentOS ~]# exportfs -v        #产看因此共享目录
[root@CentOS ~]# exportfs -rv       #使/etc/exports更改的配置生效
[root@CentOS ~]# exportfs -Au       #取消当前全部的共享目录
[root@CentOS ~]# exportfs -Av       #只查看/etc/exports中共享的目录同时恢复取消的共享目录
[root@CentOS ~]# exportfs -o rw,async 192.168.2.100:/mnt     #添加共享目录/mnt,注意命令格式-o参数后面是权限,多个权限用逗号分开,权限后面是能够访问的主机或网段,后面是共享的目录,主机和共享目录之间有冒号(:)而且不能够有空格。
oot@debian:~# exportfs -uv 192.168.2.100:/mnt     #取消exportfs命令添加的共享目录

8、NFS客户端配置
一、NFS客户端一样要安装rpcbind软件并启动该服务
------------------------------------------------
[root@CentOS ~]# yum install rpcbind
------------------------------------------------

二、启动rpcbind服务
---------------------------------------------------
[root@CentOS ~]# service rpcbind start
---------------------------------------------------

三、设置rpcbind主程序开机启动
----------------------------------------
[root@CentOS ~]# chkconfig rpcbind on
----------------------------------------

四、通下面的命令产看上面的服务是否开机启动
---------------------------------------------
[root@CentOS ~]# chkconfig --list rpcbind
---------------------------------------------

五、经过命令showmount查看共享的目录
在挂载远程NFS共享目录前,作好先使用showmount命令查看NFS服务器的共享目录列表,已肯定这些共享目录是否运行本地访问。showmount命令的格式以下:

[root@CentOS ~]# showmount  [选项]  [主机的IP或名称]

经常使用的选项以下:
-a:该选项通常在NFS服务器上使用,用于显示已经挂载了服务器共享目录的客户端及他们所使用的共享目录。
-d:与-A相似,但只显示目录,不显示具体的客户端。
-e:显示指定NFS服务器输出的共享目录列表
-h:显示帮助信息
-v:显示版本信息
--no-headers:不输出标题信息

具体例子:
root@debian:~$ showmount -e 192.168.1.102       #显示NFS服务器192.168.1.102 输出的共享目录

六、建立挂载点并挂载共享目录
用户能够自定义挂载点,而与需与NFS服务器上共享目录同样的路径,用户能够建立多个挂载点,挂载同一个共享目录。建立的目录若是由使用者全权控制,使用者对挂载目录应该有读写执行的权限。
挂载共享目录使用的命令与挂载本地文件系统使用的命令同样,都是使用mount命令,其格式以下:

[root@CentOS ~]# mount  [选项]  NFS服务器IP或主机名:共享目录  挂载点

命令格式中的冒号(:)必定不要少,他是在NFS服务器IP或主机名和共享目录中间,没有空格,mount命令与nfs相关选项说明以下:

-t nfs:指定要挂载的文件系统类型为NFS,不加这个选项也能够,mount命令会自动识别
-o ro:只挂载的文件系统为只读
-o rw:可读写
-o port=n:指定链接NFS服务器使用的端口号
-o retry=n:指定放弃挂载前尝试的时间,单位为分钟。前台挂载的默认值为2,后台挂载的默认值为10000
-o fg:指定之前台方式完成挂载工做。若是与NFS服务器之间的链接存在问题,那么mount命令会一直重复尝试挂载,直到成功或超时为止。在这个过程当中,mount命令会占用终端窗口,用户没法在窗口中运行其余命令
-o bg:与fg相反,使用后台方式完成挂载工做。若是与NFS服务器之间的链接存在问题,那么mount命令会在后台进行挂载,而不会占用终端窗口。

注意:-o选项能够经过逗号(,)分隔,联合使用。

具体例子: 把NFS服务器192.168.1.102的共享目录/media挂在到本地的/media目录,挂载选项设置为只读,后台挂载方式,放弃挂载前尝试的时间为1分钟
-------------------------------------------------------------------------------
[root@CentOS ~]# mount -t nfs -o rw,bg,retry=1  192.168.1.102:/media  /media
-------------------------------------------------------------------------------

七、卸载NFS文件系统
与卸载普通的本地文件系统同样,能够经过umount命令把它卸载,终止与NFS服务器的链接。但在卸载前,应该确保已经没有任何进程在使用该文件系统。用户能够经过fuser命令进行检查。
卸载NFS文件系统的命令格式以下所示:
[root@CentOS ~]# umount [远程文件系统或挂载点]

卸载上面例子挂载的NFS文件系统的方法:
[root@CentOS ~]# umount /media  或[root@CentOS ~]# umount 192.168.1.102:/media

八、fuser命令简单用法
linux环境下,当使用umount命令卸载挂载点时,会遇到“device is busy”提示,这时fuser就能查出谁在使用这个资源;固然umount –lf  [挂载点] 也能够强制卸载

运行下面命令看一下哪一个用户哪一个进程占用着此目录,假设挂载的目录为/media
[root@CentOS ~]# fuser -mvu /media

运行下面命令杀掉占用此目录的进程
[root@CentOS ~]# fuser -mvk /media
或者fuser -mvki  /media(每杀掉一下进程会让你确认)

选项说明
-m name 指定一个挂载文件系统上的文件或者被挂载的块设备(名称name)。
-u 在每一个PID后面添加进程拥有者的用户名称
-v 详细模式
-k 杀掉访问文件的进程
-i 杀掉进程以前询问用户,若是没有-k这个选项会被忽略

9、使用autofs按需挂载共享目录
NFS文件系统具备动态性,即须要的时候才有必要挂载。咱们怎么才能够作到仅在访问时候才动态挂载共享目录那,咱们用autofs服务来实现。Autofs与Mount/Umount的不一样之处在于,它是一种看守程序。若是它检测到用户正试图访问一个还没有挂载的文件系统,它就会自动检测该文件系统,若是存在,那么Autofs会自动将其挂接。另外一方面,若是它检测到某个已挂接的文件系统在一段时间内没有被使用,那么Autofs会自动将其卸载。所以一旦运行了Autofs后,用户就再也不须要手动完成文件系统的挂接和卸载。

一、安装autofs软件
------------------------------------
[root@CentOS ~]# yum install autofs
------------------------------------

二、启动autofs服务
------------------------------------------------
[root@CentOS ~]# service autofs start
------------------------------------------------

三、设置autofs服务开机启动
-----------------------------------------------
[root@CentOS ~]# chkconfig autofs on
-----------------------------------------------

四、通下面的命令产看上面的服务是否开机启动
---------------------------------------------
[root@CentOS ~]# chkconfig --list autofs
---------------------------------------------

四、autofs配置文件设置
/etc/auto.master是autofs的主要配置文件,该文件的配置比较简单,只须要设置挂载点的父目录和映射文件便可,格式以下所示:
-------------------------------
 挂载点父目录    映射文件
------------------------------

 挂载点父目录:例如要把共享目录挂载到本地的/media/nfsdd目录下,那么这个挂载点父目录就是/media,而子目录nfsdd并不须要手工建立,他会由autofs服务管理,在须要挂载时动态建立,这个父目录最好是空白的,由于若是不是空的那么当启动这个服务时这个父目录里的文件会所有不可见。
 
 映射文件:该文件是由用户自行制定并建立(通常设置为/etc/auto.nfs),在该文件中设置了NFS文件系统应该如何挂载。

映射文件格式以下:
-----------------------------------------------------
挂载点   挂载选项   NFS服务器IP或主机名:共享目录
-----------------------------------------------------
其中挂载点为/etc/auto.master文件中设置的父目录下的子目录,子目录为相对目录,如上面的挂载点应该是nfsdd而不是/media/nfsdd ,挂载选项与mount命令中的选项同样,可是选项前面须要加一个减号(-),配置文件更改后须要重启autofs服务才能使配置生效。

五、举例说明: 假设须要把NFS服务器192.168.1.102共享目录/media自动挂载到本地目录/media/nfsdd

先配置/etc/auto.master文件,内容以下:
-----------------------------------
/media   /etc/auto.nfs
-----------------------------------
在配置映射文件/etc/auto.nfs,内容以下:
------------------------------------------------
nfsdd   -rw,bg,retry=1  192.168.1.102:/media
------------------------------------------------
选项前面须要加一个减号(-)

配置完上面的文件重启autofs服务
[root@CentOS ~]# systemctl restart autofs.servicevim

在目录/media下直接cd nfsdd就能够完成进入nfsdd目录而且已经挂载成功
[root@CentOS media]#  cd nfsdd
[root@CentOS nfsdd]#

10、NFS服务器防火墙配置
当NFS服务器上启用了防火墙,客户端经过命令showmount -e 192.168.1.102查看共享的目录可能会出现clnt_create: RPC: Port mapper failure - Unable to receive: errno 0 (Success)这个错误,解决的办法有两种,一种是直接关闭防火墙,第二种是添加策略,添加策略比较麻烦由于除了固定的端口port 111和2049以外还有不少服务开启不固定的端口,经过下面的方法处理:
一、查看NFS须要开启的服务和对应的端口号
------------------------------------------------
[root@CentOS ~]# rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100011    1   udp    875  rquotad
    100011    2   udp    875  rquotad
    100011    1   tcp    875  rquotad
    100011    2   tcp    875  rquotad
    100005    1   udp  32923  mountd
    100005    1   tcp  33612  mountd
    100005    2   udp  42439  mountd
    100005    2   tcp  44098  mountd
    100005    3   udp  60318  mountd
    100005    3   tcp  45099  mountd
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049  nfs_acl
    100227    3   tcp   2049  nfs_acl
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049  nfs_acl
    100227    3   udp   2049  nfs_acl
    100021    1   udp  44604  nlockmgr
    100021    3   udp  44604  nlockmgr
    100021    4   udp  44604  nlockmgr
    100021    1   tcp  32829  nlockmgr
    100021    3   tcp  32829  nlockmgr
    100021    4   tcp  32829  nlockmgr
[root@CentOS ~]#
-------------------------------------------------
经过上面的显示能够看到NFS启动了portmapper、rquotad、mountd、nfs、nlockmgr五个服务和对应的端口号, portmapper和nfs是固定端口,咱们能够将剩下的三个服务的端口也固定下来。

二、CentOS 6.x提供了一个固定NFS服务的端口配置文件,那就是/etc/sysconfig/nfs这个文件。在这个文件里面就可以指定特定的端口,这样每次启动NFS时,相关服务启动的端口就会固定,这样咱们就可以设置正确额防火墙了,这个配置文件的内容不少,咱们只须要修改rquotad、nlockmgr、mountd三个服务对应的配置选项就能够,对应选项以下:
RQUOTAD_PORT=875
LOCKD_TCPPORT=32829
LOCKD_UDPPORT=44604
MOUNTD_PORT=32923
注意,要把选项前面对应注释符#号删掉,端口号就是等号后面的数字,能够自定义也能够用选项默认带的。

修改上面的配置后须要重启nfs服务
[root@CentOS ~]# service nfs restart  

二、添加防火墙规则
[root@CentOS ~]# iptables -I INPUT -p tcp --dport 111 -j ACCEPT    
[root@CentOS ~]# iptables -I INPUT -p udp --dport 111 -j ACCEPT    
[root@CentOS ~]# iptables -I INPUT -p tcp --dport 2049 -j ACCEPT     
[root@CentOS ~]# iptables -I INPUT -p udp --dport 2049 -j ACCEPT      
[root@CentOS ~]# iptables -I INPUT -p tcp --dport 875 -j ACCEPT      
[root@CentOS ~]# iptables -I INPUT -p udp --dport 875 -j ACCEPT     
[root@CentOS ~]# iptables -I INPUT -p tcp --dport 32923 -j ACCEPT     
[root@CentOS ~]# iptables -I INPUT -p udp --dport 32923 -j ACCEPT     
[root@CentOS ~]# iptables -I INPUT -p tcp --dport 32829 -j ACCEPT       
[root@CentOS ~]# iptables -I INPUT -p udp --dport 44604 -j ACCEPT

开放上面的端口,客户端就能够正经常使用了,须要注意的是添加规则时候最好把规则添加到最前面用-I不要用-A要否则极可能被前面的规则屏蔽了。



windows

相关文章
相关标签/搜索