NFS服务
NFS服务经常会用到,用于在网络上共享。eg:假如有三台机器A,B,C他们需要访问同一个目录,目录都是图片,传统的做法是把这些图片分别放在A,B,C上。若是使用NFS,只需要把图片放在A上共享给B和c上即可,只要A中图片改变,b,c中的内容会同时改变!
NFS原理:nfs本身的服务并没有提供文件传递协议,但NFS却能让我们进行文件的共享,因为nfs使用rpc协议。所以只要用得到nfs的地方就要启动rpc协议,不论是客户端还是服务端!可以这样理解,NFS是一个文件系统,而rpc负责信息传输。nfs的客户端和服务端才能由rpc协议进行端口的对应。nfs主要主管分享出来的目录,rpc协议主管文件传递!
NFs服务的工作端口并没有完全的确定,这是因为nfs是一个很复杂的组件,它涉及文件传输,身份验证等方面的需求,每个功能都会占用一个端口。为了防止nfs服务占用过多的端口,它采用动态端口方式来工作,每个功能提供服务都会随机取一个小于1024的端口来服务!但是客户端到底选择那一个端口,此时就需要rpc协议,rpc最主要的功能就是记录每一个nfs功能对应的端口号,它工作在固定端口111,当客户端需求nfs服务时,就会访问服务器的111端口,rpc会将nfs工作端口返回给客户端。nfs启动时会自动向rpc服务器注册,告诉它自己各个功能使用的端口!
常规:nfs服务启动的流程:
1:nfs启动时,自定选择端口号小于1024的端口,并向rpc(工作在111端口)汇报,rpc记录在案!
2:客户端需要nfs提供服务时,首先向111端口rpc查询,nfs工作在那个端口
3:rpc回答客户端,它工作的端口号
4:于是,客户端直接访问rpc提供的nfs服务器工作得端口号,请求服务!
5:nfs服务经过授权认证,允许客户端访问自己的数据!
注意:因为nfs需要向rpc注册,所以rpc服务必须先于nfs服务启用。并且rpc服务重新启动以后,要重新nfs服务,让它重新向rpc注册,这样nfs才能正常工作!
nfs守护进程:
必须的3个进程:
1,rpc.nfsd:nfs基本守护进程,管理客户端是否成功能够连接到nfs服务器上!
2,rpc.mountd:它是rpc安装守护进程,主要功能是管理nfs文件系统。当客户端连接到nfs服务器后,它会读取/etc/exports文件,检验客户端权限!
3,portmap:主要功能进行端口映射工作。记录nfs服务对应的端口信息,并提供给客户端,使客户端正确请求服务!
nfs服务器可能启动的进程:
4,rpc.lockd:当多个用户对共享目录的同一个文件进行写入时,使用该进程锁定,来保证文件数据的一致性!
5,rpc.statd:用来维护nfs服务器上的共享目录中文件的一致性,和rpc.lockd进程有关!
在centos上使用NFs服务,需要安装两个包(nfs-utils和rpcbind),使用yum安装nfs-utils时会把rpcbind一起装上!
修改nfs配置使其共享:
#vim /etc/exports //修改nfs的配置文件 /wang/ 192.168.1.114(ro,sync) //使其共享/wang目录到192.168.1.114的子机上
在主机上启动nfs服务 [root@lianxi ~]# /etc/init.d/rpcbind start //启动 主机上的rpcbind,rpcbind是用来通信的 正在启动 rpcbind: [确定] [root@lianxi ~]# /etc/init.d/nfs start //启动主机上的nfs服务 启动 NFS 服务: [确定] 启动 NFS mountd: [确定] 启动 NFS 守护进程: [确定] 正在启动 RPC idmapd: [确定] [root@lianxi ~]#
在自己上显示主机所共享的目录 [root@slave ~]# showmount -e 192.168.1.108 //在子机上显示共享的内容 Export list for 192.168.1.108: /wang 192.168.1.114
注意关闭防火墙,主机和客户端都要关闭 [root@slave ~]# showmount -e 192.168.1.108 //自己上上出现这样的错误,可能是防火墙未关闭,关闭防火墙! clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route t o host)
查看共享的目录: [root@slave ~]# mount -t nfs 192.168.1.108:/wang/ /opt/ //挂载共享的目录 [root@slave ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 14G 2.8G 11G 21% / tmpfs 504M 0 504M 0% /dev/shm /dev/sda1 97M 25M 68M 27% /boot 192.168.1.108:/wang/ 18G 2.6G 15G 16% /opt [root@slave ~]# cd /opt 、//进入共享的目录 [root@slave opt]# ls //查看共享的内容 111 在使用mount命令来挂载nfs服务时,用-t nfs来指定要挂在的类型为nfs,另外一个常用的选项就是-o nolock,即在挂载nfs服务时,不加锁!
介绍nfs共享的一个命令:
exportfs命令可以很好的帮助管理员维护nfs共享目录列表!/exportfs命令是在服务端执行! exportfs的命令格式为 exportfs 【option】 -a:导出所有在/etc/exports中的目录 -o:指定导出参数,格式与/etc/exports文件相同 -i:忽略exportfs文件,使用默认或者命令行设定选项 -r:重新输出所有目录。删除/var/lib/nfs/xtab的内容,并使用/etc/exports文件,同步/var/lib/nfs/xtab文件 -u:不导出指定目录。与-a共用则不导出所有目录 -f:指定新的导出文件,而不是用/etc/exports -v:显示输出列表的同时,显示导出设定的参数
查看nfs服务器上所有的共享目录以及那些客户端可以使用这些共享目录
:showmount -e IP地址
查看nfs服务器上有哪些共享目录被客户端挂载了
showmount -d IP地址
实例2:在nfs服务器上发布一系列共享目录。这些目录分别给不同的客户群使用,具体要求如下:
1):/media目录
共享/media目录,允许所有的客户端访问该目录,但只具有读权限!
2):/NFS/public目录
共享/NFS/public目录,允许192.168.1.0/24和192.168.2.0/24网段的客户端访问,并且对该目录具有读权限。
3):/nfs/team目录
共享此目录,并且此目录只有来自.team.apple域的成员可以访问并且具有读写权限!
4):/nfs/works目录
共享/nfs/works目录。192.168.1.0/24网段的客户端具有只读权限,并且将root权限用户映射成为匿名用户。
5):/nfs/test 目录
共享此目录,所有人都具有读写权限,但当用户使用该共享目录时候将账号映射成匿名用户。并且制定匿名用户的uid和gid均为65534
6):/nfs/security目录
共享此目录,仅允许192.168.1.112的客户端访问。并且具有读权限!
打开exports配置文件加入以下内容:
/media *(ro) /NFS/public 192.168.1.0/24(ro) 192.168.2.0/24(ro) /nfs/team *.team.apple(rw) /nfs/works 192.168.1.0/24(ro,root_squash) /nfs/test *(rw, all_aquash,anonuid=65534,anongid=65534) /nfs/security 192.168.1.112 (rw)