1、认识nfs服务

实验系统:rhel5.5

6.0系统的portmap改名rpcbind
nfs为Network File System的缩写,即网络文件系统。nfs是unix或类unix操作系统常用的网络共享文件系统之一,通过nfs,用户可以像访问本机磁盘一样访问网络上的文件系统。
nfs可以提供的服务包括在目录中搜寻文件,列出文件,目录管理,获取文件属性和文件读写,nfs的优点在于,本地计算机可以使用较少的磁盘空间,而将数 据存放于一台机器上并通过网络访问;用户不必在每个网络机器上都有家目录,家目录可以放在nfs服务器上通过网络访问:DVD-ROM,移动硬盘,U盘和 其他存储介质可以通过网络共享访问,这样可以减少网络上的移动存储器的数量。
nfs需要用到RPC(远程过程调用)。那么什么是RPC?nfs与rpc的关系是什么呢?首先我们了解nfs的工作原来,nfs提供了许多小的程序,这 些程序有不同的功能,每启动一个功能就会启用一些端口来传输数据。nfs的这些功能对应的端口并非固定,这些端口号是小于1024的随机端口。这样依赖, 客户端如何才能知道服务器上这些随机端口的端口号呢?RPC就承担了让客户端和nfs通信的作用.rpc的作用就在于指派这些nfs的功能对应的端口号, 并且和客户端通信,让客户端可以顺利的和这些端口连接。nfs的程序会通知rpc相关的程序端口号,然后rpc再通知用户端。因为rpc服务的端口号本身 是固定的(111端口),所以客户端只需要和111端口通信就可以活的所有相关的端口号和信息了。
nfs工作的流程如下:
1>客户端向RPC端口发送请求,要求和NFS程序通信。
2>rpc将nfs程序的端口号发回给客户端。
3>客户端与nfs程序建立连接。
nfs需要至少5个监控程序才可以正常运行。这些监控程序的文件名和作用如下:
~rpc.nfsd。他通过/etc/rc.d/init.d/nfs脚本启动,作用在于判断客户端是否具有登录nfs服务器的权限。
~rpc.mountd。装载nfs文件系统的程序,他可以判断文件的使用权限。
~portmap。portmap的作用在乎定向RPC通信流,是NFS重要组成部分。
~rpc.statd。在NFS服务器和客户端通信中断后,rpc.statd和rpc.lockd可以帮助客户端重新连接至服务器。rpc.statd必须在客户端和服务器都启用时才有效。
~rpc.lockd。当多个用户连接nfs服务器时,有可能试图访问同一文件。这个程序的作用在于锁定文件,以避免文件被不同的更改请求覆盖。rpc.lockd必须在客户端和服务器端都启用时才有效。


2、nfs服务器安装
2.1、在上一节中,提到了nfs服务必须和rpc服务协同工作,所以安装nfs服务至 少需要两个rpm包:nfs-utils*.rpm和portmap*.rpm。在RHEL5安装光盘中,还有一个图形界面的nfs配置工 具:system-config-nfs,这个包是可选安装的。
2.2、配置nfs服务器
首先,这里介绍一个nfs相关的重要文件。
*/etc/exports.这个文件就是nfs的主配置文件,在nfs安装完成后,这个文件的内容为空。nfs的设定只需要编辑到这个文件。
*/usr/sbin/showmount。这个命令是客户端用来查看服务器上的共享资源目录的。
*/usr/sbin/exportf。此命令可以重新共享服务器上的资源。一般在nfs主设定文件/etc/exports变更后,可以用到他。
*/var/lib/xtab。nfs的记录文件,包含客户端的连接记录。

6.0为/var/lib/nfs/etab


下面介绍如何配置/etc/exports这个nfs的主设定文件。该文件内容的格式如下:
目录名称       主机名或ip/(参数1/2...)         主机名或IP(参数1/2...)
这里的目录名称就是共享文件夹的路径;在目录名称后,只可访问此目录的主机名或IP,上面的“参数1/2...”指定了该主机的访问权限和访问策略。下面列出了常用的参数的解释和作用。
rw                                 可读写权限
ro                                 只读权限
sync                               资料同步写入内存和硬盘
async                              资料先写入内存,后写入硬盘
no_root_squash                     如果用root登录,则拥有root权限
root_squash                        如果用root登录,则身份被压缩成匿名使用者,一般身份为nobody
all_squash                         无论用什么帐号登录,身份均被压缩为匿名使用者
anonuid                            匿名使用者的uid值,这个uid值在/etc/passwd中存在
anongid                            匿名使用值的GID值,这个GID值在/etc/passwd中存在
下面讲解一个实例:
/tmp/nfs     211.90.88.0/24(rw,no_root_squash)
这里的意思是将/tmp/nfs共享给211.90.88.0网段的主机,权限是可读写,并且对root用户不压缩权限,注意,在这里,网段匹配不可以用*号,如下面的写法就是错误的:
/tmp/nfs     211.90.88.*/24(rw,no_root_squash)
如果需要针对不同的主机开放不同的权限,则需要对不同的主机/网段分开写对应参数,比如:
/tmp/nfs     211.90.88.0/24(rw,no_root_squash)    *(ro)
此例表示,除了211.90.88网段之外的所有主机对/tmp/nfs只读,而211.90.88段的主机可读写/tmp/nfs。
下面来看一个综合实例:
/tmp/nfs     211.90.88.0/24(rw,no_root_squash)   *(ro)
/tmp/public   192.168.1.1(rw)
/tmp/abc        *.abc.com(rw,all_squash,anongid=99)
此例中的第一行在上面已经讲过;第二行中的目录仅对192.168.1.1这一个ip开放;第三行的目录对abc.com域名开放,权限为可读写,并且访问者身份压缩为nobody,GID规定为99
2.3、启动nfs服务
在启动nfs服务之前,需要确保portmap已经启动,之后再启动nfs服务:
service portmap start       chkconfig --level 2345 portmap on
service nfs start           chkconfig --level 2345 nfs on
如何需要增加nfs服务器的资料一致性功能,则需要启动nfslock服务:
service nfslock start  chkconfig --level 2345 nfslock on
nfs启动之后,可以用exportfs命令重新挂载/卸载共享目录。exportfs的参数作用如下:
exportfs [-arvu]
-a  全部挂载/卸载
-r  重新挂载/etc/exports 设定
-u  卸载某一目录
-v  输出分享的目录列表
如果需要重新挂载/etc/export里的设定,可以用exportfs -ar 命令;如需输出目录共享目录和规则,可用export -v 命令;卸载目录可用exportfs -u 命令,关于-u参数的使用,下面以实例讲解、
假定/etc/exports的内容如下:
/tmp/all     211.90.88.0/24(rw,no_root_squash) 

         *(ro)
/tmp/test     *(ro)
如果需要卸载/tmp/all目录的共享,则需要通过下面两个命令来实现:
exportfs -u *:/tmp/all
exportfs -u 192.168.1.0/24:/tmp/all
第一个命令卸载了除192.168.1.0/24之外的网段对/tmp/all的共享;第二个命令则卸载了192.168.1.0/24对/tmp/all的共享。卸载目录共享后,用exportfs -v查看共享情况,则可以发现,对于/tmp/all的共享已经取消。
nfs启动后,会有相关的rpc服务与之对应。那么,如何知道rpc服务的注册情况呢?这里可以使用rpcinfo这个命令。该命令的格式如下:
rpcinfo -p [主机名或ip]
如果需要查看本机情况,可以用rpcinfo -p localhost 。输出结果如下:


2.4、固定nfs服务相关端口
在设定好nfs服务器之后,存在一个问题,就是Nfs相关的程序的端口是随机生成的,如果开启了防火墙,而防火墙策略不好指定,因为端口不固定啊。这里就 需要设定nfs相关服务的端口,将这些端口号固定住。设定nfs端口的配置文件是/etc/sysconfig/nfs。这里需要固定4个端口,也就是 说,需要设定4个参数:MOUNTD_PORT、STATD_PORT、LOCKD_TCPPORT和LOCKD_UDPPORT。设定内容如下:
MOUNT_PORT=892
STATD_PORT=662
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
这样,nfs相关服务的端口就由随机变为固定的了。
2.5iptables的nfs相关设定
由于nfs相关服务的端口已经被固定,所以固定iptables规则就很简单了。由于nfs服务监听TCP/UDP2049端口,portmap监控 TCP/UDP111端口,所以需要在Iptables中打开这些端口。此外,还需要打开mountd、statd和lockd服务的相关端口。根据上一 节的设定,Iptables还需要开放TCP/UDP的892和662端口,以及TCP的32803端口和UDP的32769端口。vim /etc/sysconfig/iptables 。。。。。。
2.6 nfs图形配置工具system-config-nfs
在安装了system-config-nfs的rpm包之后,就可以使用这个图形配置工具了。在Gnome菜单中选择“系统-管理-服务器设置-nfs”命令,可以看到下面所示:

这个就看着操作吧。。。
3、nfs客户机的使用
3.1、访问nfs共享资料
首先,确保nfs客户机已经启动了portmap服务。由于nfslock功能必须在服务器端和客户端均启用才能够工作,所以为了增加兼容性,建议在客户端也开启nfslock服务。
1.列出共享目录
使用showmount命令可以列出服务器上开放的共享目录,其用法如下:
showmunt [-ae] 主机名或IP
-a  所有与主机连接的客户端使用的目录状态

-e   显示服务器主机上/etc/exports 内的分享目录列表


假设nfs服务器的主机为nfsserver,则使用下面的命令可以查看服务器的共享目录列表:
showmount -e nfsserver
2、挂载nfs共享目录
假定nfs服务器nfsserver上的共享目录是/tmp/test,则客户端可以使用mount命令将这个目录挂接至本地目录:
mount -t nfs nfsserver:/tmp/test /tmp
3.2自动挂载nfs共享目录
1、开机自动挂载nfs共享目录
  如果要让系统在开机时自动挂载nfs共享目录,则需要修改/etc/fstab文件、假设在nfsserver上共享目录为/tmp/test,挂载点为/mnt,使用soft挂载,并且超时为5秒,挂载过程可被中断。则在/etc/fatab中加入的内容为:
nfsserver:/tmp/test             /mnt                 nfs         soft,intr,timeo=50     0       0
2、使用autofs挂载nfs共享目录
开机自动挂载nfs共享目录有个缺点,就是如果客户端挂载不成功或nfs访问不顺利,会占用较长的启动时间。如果在客户机启动机器后再手动挂载共享目录, 则客户端用户必须具有root权限。那么有没有更好的、更灵活的挂载方式呢?或者说,在需要访问nfs资源时去挂载目录?autofs就可以做到这一点。 使用autofs,可以让非root用户在系统启动后访问nfs共享目录,并且挂载目录的工作是在用户请求nfs资源时自动完成的。用户甚至不需要建立挂 载点。现在用一个例子来说明autofs的大致工作流程。当用户访问一个在autofs里配置过的挂载目录(这个目录可以不是实际存在的) 时,autofs自动挂接相应的nfs资源到这个目录(若目录不存在则自动建立目录),然后用户就可以直接访问挂载在此目录下的nfs资源了。对于用户而 言,就像是 进入了一个特定的目录,这个目录里就包含相应的nfs共享目录的内容,而完全感觉不到挂接工作的存在。
下面讲述autofs的配置。autofs有一个主设定文件/etc/auto.master,内容如下:
# $Id: auto.master,v 1.4 2005/01/04 14:36:54 raven Exp $
#
# Sample auto.master file
# This is an automounter map and it has the following format
# key [ -mount-options-separated-by-comma ] location
# For details of the format look at autofs(5).
#
/misc     /etc/auto.misc
#
# NOTE: mounts done from a hosts map will be mounted with the
           "nosuid" and "nodev" options unless the "suid" and "dev"
           options are explicitly given.
#
/net       -hosts
#
# Include central master map if it can be found using
# nsswitch sources.
#
# Note that if there are entries for /net or /misc (as
# above) in the included master map any keys that are the
# same will not be seen as the first read key seen takes
# precedence.
#
+auto.master
其中,/misc       /etc/auto.misc这一行描述了挂载目录/misc对应的配置文件是/etc/auto.misc。这个配置文件内容的格式如下:
挂载目录   挂载参数   nfs共享目录位置
下面将举例说明/etc/auto.misc这个文件。在下面的例子中,如果用户访问/music/linuxnfs这个目录,则autofs自动挂载 nfsserver:/tmp/test的内容至/misc/linuxnfs,并且使用软挂载,挂载过程可中断。挂载后的nfs资源只读:
linuxnfs               -ro,soft.intr                 nfsserver:/tmp/test
这样用户只要访问/misc/linuxnfs目录,就可以实际上访问nfsserver上的/tmp/test的内容了。
autofs服务在RHEL5安装时默认被安装,并且开机默认启动的。如果autofs被停止,则额可以手动启动他
service autofs start   chkconfig --level   2345 autofs on