1、nfs安装

yum install nfs-utils-*
然后安装portmap服务,portmap在centos6中改名为rpcbind
yum install rpcbind(centos6)
yum install portmap(centos5)

注:CentOS 6.2以后版本变更了portmap服务为rpcbind,在使用nfs时这点与centos5不同

2、创建NFS文件系统服务端目录(例:/home/ shareStoreDir),并赋予用户权限,这里一定要注意,否则不能在该目录进行文件操作

mkdir /home/shareStoreDir
chmod 777 /home/shareStoreDir

3、配置exports文件
NFS的常用目录
/etc/exports NFS服务的主要配置文件
/usr/sbin/exportfs NFS服务的管理命令
/usr/sbin/showmount 客户端的查看命令
/var/lib/nfs/etab 记录NFS分享出来的目录的完整权限设定值
/var/lib/nfs/xtab 记录曾经登录过的客户端信息
NFS服务的配置文件为 /etc/exports,这个文件是NFS的主要配置文件,不过系统并没有默认值,所以这个文件不一定会存在,可能要使用vim手动建立,然后在文件里面写入配置内容。
/etc/exports文件内容格式:
<输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]
例如:/home/shareStoreDir 192.168.56.0/24(rw,sync)
a. 输出目录:
输出目录是指NFS系统中需要共享给客户机使用的目录;
b. 客户端:
客户端是指网络中可以访问这个NFS输出目录的计算机
客户端常用的指定方式
• 指定ip地址的主机:192.168.0.200
• 指定子网中的所有主机:192.168.0.0/24 192.168.0.0/255.255.255.0
• 指定域名的主机:david.bsmart.cn • 指定域中的所有主机:.bsmart.cn
• 所有主机:

c. 选项:
选项用来设置输出目录的访问权限、用户映射等。
NFS主要有3类选项:
访问权限选项
• 设置输出目录只读:ro
• 设置输出目录读写:rw
用户映射选项
• all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
• no_all_squash:与all_squash取反(默认设置);
• root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);
• no_root_squash:与rootsquash取反;
• anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
• anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);
其它选项
• secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
• insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
• sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
• async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
• wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
• no_wdelay:若有写操作则立即执行,应与sync配合使用;
• subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
• no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;

4、启动nfs服务器
为了使NFS服务器能正常工作,需要启动portmap(rpcbind)和nfs两个服务,并且portmap(rpcbind)一定要先于nfs启动。

service portmap start(service rpcbind start)

service nfs start

如果报以下错误,请检查rpcbind服务是否启动:

5、客户端挂载
先查看下nfs服务器分享出来的目录,检查下客户端与服务器端nfs通信是否正常

输入命令# showmount -e NFS服务器IP,正常应该出以下内容:

如果出现下面的错误原因为:
被访问的NFS服务器上的防火墙没有添加规则,向iptables里面添加以下查看的所有端口即可(或关闭防火墙service iptables stop  //关闭防火墙)

注意,service iptables stop/start这个命令即时生效,重启后失效
chkconfig iptables off/on 重启后生效,永久性生效

挂载nfs服务器的共享目录
mount NFS服务器IP:共享目录 本地挂载点目录

如果目标目录不存在会报does not exist的错误,建好目录后再次挂载成功。
使用mount命令查看挂载情况

6、自动挂载
网上提供了三种方法:

  • 开机自动挂载:/etc/fstab里添加 (不推荐)
    server_IP:/remote_dir /local_dir nfs defaults 1 1
    例如:192.168.56.101:/home/shareStoreDir /home/shareStoreDir nfs defaults 0 0
    第1个1表示备份文件系统,第2个1表示从/分区的顺序开始fsck磁盘检测,0表示不检测。
    这种方法不推荐,尝试过程中发现开机很慢,而且开机后并没有挂载成功。后查找原因是开机时,系统还没有完全完成所有服务的启动,包括网络服务:network。在网络无法连入时试图mount NFS当然会失败。
  • 开机自动挂载:在/etc/rc.d/rc.local文件中添加记录(不推荐)
    mount -t nfs -o nolock hostname(orIP):/directory /mnt
    还是会遇到上面的问题,网友提供解决方法可以休眠几秒后尝试,命令修改为:sleep 5;mount -t nfs xx.xx.xx.xx:/home /mnt/nfs
  • 自动挂载autofs(推荐)
    没有安装autofs可以先进行安装
    yum install autofs
    主要有两个配置文件:
    /etc/auto.master
    /etc/auto.xxx (这个文件可以自己指定,只要和auto.master中的配置文件名称对应即可)
    示例:

在auto.master文件中添加红框标注的内容,其中:
/home/shareStoreDir:是要挂载的本地目录,我们在向NFS服务器发送请求信号时,一定要在这个目录下面进行操作,否则是无效的。
/etc/auto.nfs: 是一个配置 NFS服务器共享文件的路径,及本地在/home/shareStoreDir目录中要与远程共享文件挂载的目录及权限,在auto.nfs文件中还要详细说明。
–timeout=60:指NFS客户端在多久没有向NFS服务器请求数据时断开挂载连接。(如果一个NFS服务器上有许多的客户端一直连接的话,NFS服务器会承受很大的带宽压力,这对NFS服务器的正常使用会造成很大的影响,因此,为了解决这一弊端,我可以设定超时时间:让NFS客户端在获取数据时与NFS服务器进行连接,而在没有获取数据的时间内,自动的断开与NFS服务器之间的连接,这就是NFS的自动挂载技术)

auto.nfs文件(系统本身没有这个文件,我们新建一个就好,模板参考auto.misc)

红框标注的就是我们要添加的内容
注: server : 它是一个本地目录,我们不需要创建它,用于挂载远程共享文件192.168.56.102:/home/shareStoreDir,在我们想要使用远程共享文件/home/shareStoreDir时,只要在本地目录/home/shareStoreDir下键入:cd share系统就会自动挂载到远程共享目录:192.168.20.6:/public,我们就可以正常使用里面的共享文件了 ,在到达超时时间时就会自动卸载。
不好理解的话可以对两个文件做如下修改:
auto.master
/home /etc/auto.nfs –timeout=60
auto.nfs
shareStoreDir -fstype=nfs,rw 192.168.56.102:/home/shareStoreDir
这样在home目录下直接执行cd shareStoreDir就可以自动挂载。

修改完配置文件后需重启autofs服务:
执行命令service autofs restart,如下图:

测试结果:
自动挂载前

进入/home/shareStoreDir目录执行 cd share

可以看到已成功挂载,退出目录1分钟后,再次观察挂载情况,如下图

实现了自动卸载。

7、常用命令

exportfs
如果我们在启动了NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs 命令来使改动立刻生效,该命令格式如下:

# exportfs [-aruv]
   -a 全部挂载或卸载 /etc/exports中的内容
   -r 重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab
   -u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)
   -v 在export的时候,将详细的信息输出到屏幕上。


具体例子:
 

# exportfs -au 卸载所有共享目录
   # exportfs -rv 重新共享所有目录并输出详细信息

nfsstat

查看NFS的运行状态,对于调整NFS的运行有很大帮助。

rpcinfo

查看rpc执行信息,可以用于检测rpc运行情况的工具,利用rpcinfo -p 可以查看出RPC开启的端口所提供的程序有哪些。

showmount
-a 显示已经于客户端连接上的目录信息
-e IP或者hostname 显示此IP地址分享出来的目录