一、NFS 简介
NFS(Network File System),即网络文件系统。一种使用于分散式文件协定,由SUN公司开发。功能是通过网络让不同的机器、不同的操作系统能够分享个人数据,让应用程序通过网络可以访问位于服务器磁盘中的数据。
NFS在文件传送或信息传送的过过程中,依赖于RPC协议。RPC,远程过程调用(Remote Procedure Call),是使客户端能够执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,就是因为NFS使用了RPC提供的传输协议,可以说NFS就是使用PRC的一个程序。
二、NFS 安装
首先确定一下是否已经安装了NFS,因为在通常情况下,是作为系统的默认包安装的。
未安装的情况下,可以使用下面的命令进行安装:
NFS服务器端安装配置:(在CentOS6.3当中,portmap服务由rpcbind负责)
[root@localhost ~]# yum -y install nfs-utils rpcbind
NFS客户端安装配置:(安装无需启动NFS服务,直接挂载目录)
[root@localhost ~]# yum -y install nfs-utils
三、系统环境
系统平台:CentOS release 6.3 (Final)
NFS Server IP:192.168.86.53
NFS Client IP:192.168.86.66
防火墙已关闭/iptables: Firewall is not running.
注:这里仅是测试环境下临时关闭防火墙,不过这样做很不安全。被访问的NFS服务器上的防火墙没有添加规则,向iptables里面添加以下命令查看的所有端口即可。
rpcinfo -p 192.168.86.53
四、NFS服务的启动与停止
1、开启RCP服务
[root@localhost ~]# service rpcbind start
Starting rpcbind: [ OK ]
查看rpcbind服务端口
[root@localhost ~]# netstat -antlp|grep rpcbind
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1368/rpcbind
2、开启NFS服务
[root@localhost ~]# service nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ] #磁盘检查。这是一个定义用户最多使用多少磁盘空间的线程(实现磁盘配额的控制)。
Starting NFS mountd: [ OK ] #等待客户端挂载 挂载守护进程,负责客户端来源认证的进程
Starting NFS daemon: [ OK ]#守护进程,文件读写nfs 。不受rpc的管理,监听在TCP和UDP的2049端口。
Starting RPC idmapd: [ OK ]#id号映射
3、进程说明
[root@localhost ~]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper #rpc
100005 3 tcp 48973(随机) mountd
100003 2 tcp 2049 nfs #文件读写
100227 3 tcp 2049 nfs_acl #访问控制列表
100021 1 udp 41315(随机) nlockmgr #锁管理器
100011 2 tcp 875 rquotad #磁盘资源配额
4、停止NFS服务
[root@localhost ~]# service nfs stop
[root@localhost ~]# service rpcbind stop
五、NFS服务器端配置
NFS的常用目录
/etc/exports NFS服务的主要配置文件
/usr/sbin/exportfs NFS服务的管理命令
/usr/sbin/showmount 客户端的查看命令
/var/lib/nfs/etab 记录NFS分享出来的目录的完整权限设定值
/var/lib/nfs/xtab 记录曾经登录过的客户端信息
NFS服务的配置文件为 /etc/exports,文件内容格式如下:
<共享目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]
例:/home/nfs 192.168.86.66(insecure,rw)
格式说明
◆共享目录:
共享目录是指NFS系统中需要共享给客户机使用的目录;
◆客户端:
客户端是指网络中可以访问这个NFS共享目录的计算机
客户端常用的指定方式:
指定ip地址的主机:192.168.86.66
指定子网中的所有主机:192.168.86.0/24 192.168.86.0/255.255.255.0
指定域名的主机:www.sample.com
指定域中的所有主机:*.sample.com
所有主机:*
◆选项:
选项用来设置共享目录的访问权限、用户映射等。
NFS主要有3类选项:
●访问权限选项
设置共享目录只读:ro
设置共享目录读写:rw
●用户映射选项
all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
no_all_squash:与all_squash取反(默认设置);
root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);
no_root_squash:与rootsquash取反;对于登陆NFS主机的共享目录用户如果是root的话则对该目录具有root权限。 这样做极不安全,建议不用为好!
anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);
●其它选项
secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
no_wdelay:若有写操作则立即执行,应与sync配合使用;
subtree_check:若共享目录是一个子目录,强制NFS检查父目录的权限(默认设置)。
no_subtree_check:和上面相对,即使共享目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
hide:不共享NFS目录的子目录
no_hide:共享NFS目录的子目录
六、实例演示
将NFS服务器端 的/home/nfs/ 共享给客户端(192.168.86.66),权限读写。
服务器端配置如下:
1、/etc/exports文件配置
[root@localhost ~]# vi /etc/exports
/home/nfs 192.168.86.66(rw)
2、重启rpcbind和nfs 服务
[root@localhost ~]# service rpcbind restart
[root@localhost ~]# service nfs restart
客户端:
1、[root@bogon ~]# showmount -e 192.168.86.53#显示server段共享出来的目录
Export list for 192.168.86.53:
/home/nfs 192.168.86.66
2、[root@bogon ~]# mount 192.168.86.53:/home/nfs /tmp/nfs #挂载server端的/home/nfs 目录到client端的/tmp/nfs目录
3、[root@bogon ~]# mount | grep nfs
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
192.168.86.53:/home/nfs on /tmp/nfs type nfs (rw,vers=4,addr=192.168.86.53,clientaddr=192.168.86.66)
挂载成功。
4、卸载已挂载的NFS共享目录
[root@bogon ~]# umount /tmp/nfs/
七、遇到的问题
问题:
[root@bogon ~]# showmount -e 192.168.86.53
clnt_create: RPC: Program not registered
解决方法:
在服务器端执行下记命令:
[root@localhost ~]# rpc.mountd