一、NFS简介
NFS就是Network FileSystem的缩写,最早之前是由Sun公司所发展出来的。他最大的功能就是可以透过网络,让不同的机器、不同的操作系统可以彼此分享个别档案(share file)。这个NFS Server可以让你的PC来讲网络远程的NFS主机分享的目录,挂载到本地端的机器当中,所以,在本地端的机器看起来,那个远程主机的目录就好像是自己的一个磁盘分割操一样。说白了,就相当于Windows下面的文件共享一样.....
NFS使用的协议是RPC(远程过程调用)协议来协助NFS本身的运作! NFS本省的服务并没有提供数据传输的协议,但是NFS却能够让我们进行档案的分享,这其中的原因就是NFS使用到一些其它相关的传输协议!而这些传输的协议,就是使用到这个所谓的RPC的功能!这也就是说,NFS本身就是使用RPC的一个程序了,NFS可以视作一个RPC server,NFS管理主要管理分享出来的目录,而至于数据的传输,就直接丢给RPC协议来运作!
NFS Server总过需要启动至少两个进程(rpc.nfsd和rpc.mountd),一个管理Client是否可以登入的问题,另一个管理登入主机后的用户是否能够使用的档案权限!nfsd这个进程主要在管理客户端是否能够登入主机的权限,mountd这个进程则在管理NFS的档案系统,当客户端顺利通过nfsd后,登入到主机之后,在他使用可以NFS Server分享的档案之前,还会经过档案使用权限的认证程序!只有通过这一关之后,Client才能够使用NFS服务所分享的档案。
当客户端尝试使用RPC Server所提供的服务时,由于Client需要取得一个可以连接的端口(port)才能够使用RPC Server所提供的服务,因此,客户端首先去请求rpcbind(旧版本是portmp),然后,rpcbind将自己管理的端口映射告知客户端,好让客户端可以连接上服务,因此:启动NFS之前,一定要先启动rpcbind
总结一下安装NFS都需要什么,首先需要rpcbind,将端口告知客户端。其次需要nfs-utils,提供nfsd进程和mountd这两个NFS进程。
二、安装环境
这里我们提供两台主机,一台用来安装NFS服务器,一台用来挂载服务器分享的目录,操作系统全部采用的是centOS6.4,下载地址我的博文《Hadoop完全分布式模式搭建》中有,如果,对Hadoop感兴趣的话,可以看看:http://blog.sina.com.cn/s/blog_c09822a40102v9ja.html
主机名 IP地址 分享目录/挂载目录
centosDateNode3 192.168.10.71 /home/roboson
centosNameNode 192.168.10.66 /home/roboson1
三、大致流程
<1>.安装NFS Server
<2>.启动服务
<3>.设定分享的目录
<4>.分享目录的范围详解(给哪些客户端分享)
<5>.分享目录的权限详解(客户端能对分享的目录进行哪些操作)
<6>.服务器分享目录
<7>.服务器对分享目录的操作(卸掉,修改后重新分享使生效等)
<8>.服务器和客户端如何查看分享的目录
<9>.客户端挂载目录
<10>.客户端卸载目录
<11>.NFS Server如何设置开机自动启动
<12>.客户端如何设置开机自动挂载分享目录
四、开工
<1>.安装NFS Server
首先查看NFS Server是否已经安装,其实在默认情况下,NFS Server已经安装好了,下面查看是否安装了NFS Server,打开命令行,输入以下指令:
rpm -qa|grep nfs #前面的博文中这个指令用过好多次了
前面也说过,在运行NFS Server之前,一定要先启动rpcbind,所以,用相同的方法,查看是否安装
了rpcbind,在命令行下输入以下指令:
rpm -qa|grep rpcbind
如上图所示,说明系统已经安装了NFS Server和rpcbind,如果没有安装,也无所谓,centos操作系统中自带有安装包,打开系统挂载的地方,然后,进行安装!打开命令行,输入以下指令:
cd /media/CentOS_6.4_Final/Packages #切换到挂载光驱的位置 ls rpcbind* #列出所有以rpcbind开头的包 rpm -ivh rpcbind-0.2.0-11.el6.x86_64.rpm #安装列出的软件包(一个)
如上图所示,安装成功,那么下来,就是安装NFS Service,同上面一样,先进入软件安装包中,然后,在命令行中输入以下指令:
cd /media/CentOS_6.4_Final/Packages #切换到挂载光驱的位置 ls nfs* #列出所有以rpcbind开头的包 rpm -ivh nfs-utils-1.2.-.el6.x86_64.rpm #安装列出的软件包(一个)
<2>.启动服务
在安装完成后,我们就需要启动NFS Server所需要的进程,查看一下服务的状态,看是否启动,在命令行下输入以下指令:
service nfs status #查看NFS Server的状态 service rpcbind status #查看rpcbind的状态
如上图所示,所需要的进程都已经开启!接下来nfs就可以设定分享目录了。
<3>.设定分享的目录
Linux把要分享的目录的路径都放在一个文件中,并且有分享的客户端范围,有分享的权限,这个目录
在/etc/exports,如果没有这个文件,可以自己手动建一个,记录分享目录的格式:
【分享的目录】【单个或多个主机名称】或【IP范围】(权限)
/home/roboson *(rw)
如上所示,分享的目录是/home/roboson,对所有人开放 ,权限是可读可写!
好,分享的范围都有哪些定义法,权限都有哪些呢?
<4>.分享目录的范围详解(给哪些客户端分享)
(1).指定ip地址的主机:192.168.10.71
只允许IP地址为192.168.10.71的主机可以登录到此共享目录
(2).指定子网中的所有主机:192.168.0.0/24或者192.168.0.0/255.255.255.0
只允许192.168.10.1~192.168.10.254这个网段内的IP登录到此共享目录
(3).指定域名的主机:centosNameNode.roboson.cn
只允许主机名为centosNameNode.roboson.cn的可以登录到此共享目录
(4).指定域内的所有主机:*.roboson.cn
只允许域名为.roboson.cn的可以登录到此共享目录
(5).指定所有的主机:*
<5>.分享目录的权限详解(客户端能对分享的目录进行哪些操作)
(1).rw:可读可写的权限
(2).ro:只读的权限
(3).no_root_squash:登入分享目录的使用者如果是root的话,那么对于这个分享的目录来说,他就具有root的权限!这一项不安全,不建议使用!
(4).root_squash:登入分享目录的使用者如果是root的话,那么这个使用者的权限将被压缩成匿名使用者,通常他的UID与GID都会变成nobody那个系统账号的身份。
(5).all_squash:不论登入分享目录的使用者是什么身份,都会被压缩成匿名使用者。
(6).anonuid:可以自行设定使用者UID的值!也就是使用者登录到分享目录中,身份成为UID这个使用者,必须在/etc/passwd中存在这个UID。
(7).anongid:可以自行设定使用者GID的值!也就是使用者登录到分享目录中,身份成为GID这个使用者,必须在/etc/group中存在这个GID。
(8).sync:数据同步写入到内存与硬盘当中
(9).async:数据会先暂存于内存当中,而非直接写入硬盘
<6>.服务器分享目录
将centosDateNode3上的/home/roboson目录分享出去,对centosNameNode.roboson.cn主机开放,并且具有读写权限,在命令行中输入以下指令:
注意:centosDateNode3必须要能够解析centosNameNode.roboson.cn这台主机,要么在DNS服务器上有记录,要么在/etc/hosts文件下有记录
hosts文件域名映射IP地址的添加,在我的博文《Hadoop完全分布式模式搭建》中有,如果,对Hadoop感兴趣的话,可以看看:
http://blog.sina.com.cn/s/blog_c09822a40102v9ja.html
<7>.服务器对分享目录的操作(卸掉,修改后重新分享使生效等)
修改好了/etc/exports文件 后,通过以下指令可以让分享目录生效,不需要重新启动nfsd等守护进程只需要使用exportfs重新扫描一次/etc/exports文件,并且重新加载一次就可以了,以下是它的用法:
exportfs
<8>.服务器和客户端如何查看分享的目录
通过showmount可以查看共享的目录,showmount语法如下:
服务器端查看自己分享的目录:
showmount -e
客户端查看自己分享的目录:
showmount -e centosDateNode3.roboson.cn
注意:如果出现上图Unknown host说明识别不了主机,所以,hosts或者DNS服务器没有记录你的主机与IP地址的映射关系。前面已经提到过了!
<9>.客户端挂载目录
前面的安装环境中,说过,将分享 的目录挂载到/home/roboson1下,输入:
mkdir /home/roboson1 #创建要挂载的目录
mount -t nfs centosDateNode3.roboson.cn:/home/roboson /home/roboson1
cd /home/roboson1 #看是否能够登录到共享目录
注意:如果出现上图权限不够,因为centosDateNode3.roboson.cn:/home/roboson本身也有权限(drwx-xxx-xxx),不允许组内其他成员和组外的成员访问,只允许自己访问,所以要修改权限。
然后,再进入到挂载的目录,并且新建一个文件夹,看有没有读写权限:
如图所示,说明挂载共享目录成功,并且拥有读写权限(rw)
<10>.客户端卸载目录
客户端卸载共享目录是通过umount实现的
umount /home/roboson1
<11>.NFS Server如何设置开机自动启动
说到这里,先说说Linux的开机启动模式,Linux的开机启动模式有多种,那么如果要设置开机启动项,就得说明,哪一种开机启动模式下,我的服务要自动启动!先看看Linux都有哪几种启动模式,在命令行输入以下指令:
cat /etc/inittab #这个文件下有Linux的开机启动模式
从上图可以看出,总共有七种开机模式:
0:表示关机
1:表示单用户模式,可以通过这个模式修改root的密码
2:无网络连接的多用户命令行模式
3:有网络连接的多用户命令行模式
4:不可用
5:图形界面
6:重启
看见下面有一句话:id:5:initdefault:这句话的主要作用就是修改默认的启动模式,如果把5改为3, 那么就进入命令行模式!同理,修改开机启动项,也需要看给哪种模式设置开机自动启动,是用多用户命令行登录后,进程自动启动,还是以图形界面登录的时候,进程自动启动等等.....
chkconfig --list rpcbind #查看rpcbind的开机启动情况
chkconfig --list nfs #查看nfs的开机启动
如图所示,一般我们用的要么是3,要么是5,所以,只需要设置3、5开机自动启动就可以了
<12>.客户端如何设置开机自动挂载分享目录
每次客户端重启的话,都需要重新挂载分享目录,挺麻烦的,最好能够设置开机自动挂载,Linux下可以通过/etc/fstab文件来记录,格式如下:
共享目录 本地挂载目录 nfs 选项 0 0
五、关机或结束时的注意事项
由于NFS使用的这个RPC在client端连上主机时,那么主机在想要关机的时候,可能关不了,如果,主机上面还有Client在联机,那么最好关机之前,关掉portmap与nfs这两个东西