详解linux之NFS文件共享服务

前言:
Network File System 网络文件系统,基于内核的文件系统。Sun公司开发,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,基于RPC(Remote Procedure Call Protocol远程过程调用)实现。
一、NFS服务的安装与启动
NFS服务是一种基础服务,一般装好的centos系统中都装有此服务,如果没有装,或者系统是最小化的,就需要我们自己安装了,安装包是nfs-tils

yum install -y nfs-utils 

因为centos6和centos7系统存在较大的差异,故对NFS服务的启动也有很大的不同,centos6的nfs的辅助服务监听的端口要注册端口号到rpcbind,如果rpcbind服务没启动,nfs服务的辅助服务不能启动,nfs服务也将不能正常启动,所以要先启动rpcbind服务。

service rpcbind start
service nfs start 

而centos7上,服务是按需启动的,就是说nfs服务启动依赖的服务,会自动在nfs服务启动之前启动,不需要手动启动。

systemctl start nfs 

centos7上的rpcbin.service和rpcbind.socket是分离的,rpcbind.service依赖于rpcbind.socket,故启动rpcbind.service服务,rpcbind.socket也会启动。
主要进程:
rpc.nfsd最主要的NFS进程,管理客户端是否可登录
rpc.mountd挂载和卸载NFS文件系统,包括权限管理
rpc.lockd非必要,管理文件锁,避免同时写出错
rpc.statd非必要,检查文件一致性,可修复文件

二、客户端NFS挂载

所谓客户端挂载,指的是,NFS服务器共享出来的目录,客户端通过网络,把此次目录挂载到自己的某个目录下,在此目录下进行的操作都会同步到NFS服务器上。还值得注意的是,操作能否同步到服务器上,能否正常执行,还需要拥有相应的权限。下面演示一个实验来讲解如何挂载:
实验一:
实验环境:两台主机,一台作为NFS服务器,两台作为客户机。
NFS服务器 :CentOS7操作系统,IP为172.18.24.17/16

mkdir /app/nfsdir1 -pv
touch /app/nfsdir1/nfsfile1
mkdir /app/nfsdir2
touch /app/nfsdir2/nfsfile2
vim /etc/exports 
/app/nfsdir1 *(rw)    # *表示把/app/nfsdir1共享给所有的主机,并且设定权限,可读,可写,如果口号为空,默认只读
/app/nfsdir2 172.18.24.7(rw)   #把/app/nfsdir1共享给主机172.18.24.7,设定权限,可读可写
exportfs -r   #重读,修改配置文件后,不需要重启服务,只需要重读生效文件

exportfs -v #查看本机共享出去的所有目录

这里写图片描述

一台客户机 172.18.24.7/16

showmount -e 172.18.24.17  #查看nfs服务器上共享出来的目录,自己有权挂载没权挂载都有看到

这里写图片描述

客户机上也需要安装nfs-utils才可以实现挂载

mkdir /app/nfsdir -pv 
mount 172.18.24.17:/app/nfsdir1 /mnt/nfs1  #挂载

在客户机172.18.24.6上

yum install -y nfs-utils 
mkdir /mnt/nfs1
mkdir /mnt/nfs2
mount 172.18.24.17:/app/nfsdir1  /mnt/nfs1 
mouont 172.18.24.17:/app/nfsdir2 /mnt/nfs2

详解linux之NFS文件共享服务_第1张图片
挂载后,可做如下操作,验证是否具有读写权限

[root@localhost /mnt/nfs1]#ls  
nfsdir1     #NFS服务器上创建的文件nfsdir1
[root@localhost /mnt/nfs1]#touch a   #可写
[root@localhost /mnt/nfs1]#ls
a  nfsdir1
[root@localhost /mnt/nfs1]#rm -rf a  #可删除
[root@localhost /mnt/nfs1]#ls
nfsdir1
[root@localhost /mnt/nfs1]#
[root@localhost /mnt/nfs1]#pwd  #查看路径
/mnt/nfs1     #还是本机的路径,操作却同步到NFS服务器上

在另外一台主机172.18.24.6上

[root@CentOS6 ~]#mount 172.18.24.17:/app/nfsdir1 /mnt/nfs1 #挂载
[root@CentOS6 ~]#mount 172.18.24.17:/app/nfsdir2 /mnt/nfs2  #挂载NFS服务器上/app/nfsdir2到本机/mnt/nfs2目录上,因为NFS服务器,设置了/app/nfsdir2目录只共享给172.18.24.7主机,所以不能挂载
mount.nfs: access denied by server while mounting 172.18.24.17:/app/nfsdir2   #挂载被拒绝
#可以在挂载的目录下读写操作,跟上面的步骤一样,这里就不再一一演示了

在/etc/exports配置文件中,每个条目指定目录导出到的哪些主机,及相关的权限和选项:
•默认选项:(ro,sync,root_squash,no_all_squash)
•ro,rw 只读和读写
•async异步,数据变化后不立即写磁盘,性能高
•sync(1.0.0后为默认)同步,数据在请求时立即写入共享
•no_all_squash (默认)保留共享文件的UID和GID
•all_squash 所有远程用户(包括root)都变成nfsnobody
•root_squash (默认)远程root映射为nfsnobody,UID为65534,早期版本是4294967294 (nfsnobody)
•no_root_squash 远程root映射成root用户
•anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nfsnobody,可配合all_squash使用。
同时,我们还应该注意到,文件所属主,所属组的问题。

#在NFS服务器上
[root@localhost ~]#getent passwd apache   #查看httpd服务的用户id
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
#我们可以把共享的文件id和uid都设成apache用户,这样共享的文件都属于apache用户,apache用户就对共享文件具有完全控制权限
[root@localhost ~]#vim /etc/exports
/app/nfsdir1/ *(rw,all_squash,anonuid=48,anongid=48) 
#把所有用户的id和uid都变成48

在客户机上
因为客户机上安装httpd服务,所以所属主和所属组都是apache,如果没有安装httpd服务,并且没有其他的用户使用48号,那么id和uid就直接显示的是48。

这里写图片描述

在NFS服务器上
因为NFS服务上,安装httpd服务,并且此服务的用户为apache,故所属主和所属组都为apache

这里写图片描述

三、家目录共享

在客户机上

[root@CentOS6 ~]#useradd zhang 
[root@CentOS6 ~]#getent passwd zhang
zhang:x:500:500::/home/zhang:/bin/bash

NFS服务器上,把/app/homedir/zhanghome/目录共享出去

[root@localhost ~]#mkdir /app/homedir/zhanghome/
[root@localhost ~]#cp /etc/skel/.[^.]* /app/homedir/zhanghome/ -r  #拷贝家目录下必要文件
[root@localhost ~]#vim /etc/exports
/app/homedir/zhanghome/ *(rw)
[root@localhost ~]#cat /etc/passwd | grep 500 
[root@localhost ~]#useradd -u -r 500 xiaozhang  #创建一个和客户端上相同ID号的用户xiaozhang 

客户机上挂载并测试

[root@localhost ~]#mount 172.18.24.17:/app/homedir/zhanghome/ /home/zhang
[root@localhost ~]#su - zhang
[root@localhost ~]#touch a
[root@localhost ~]#ll a
total 0
-rw-rw-r-- 1 zhang zhang 0 Oct 16  2017 a

NFS服务器上

[root@localhost ~]#cd /app/homedir/zhanghome/
[root@localhost /app/homedir/zhanghome]#ll
total 0
-rw-rw-r-- 1 xiaozhang xiaozhang 0 Oct 16 18:50 a 

如上所示,共享家目录成功,客户端家目录里面的数据都写入到了NFS服务器。

总结

NFS优势:节省本地存储空间,将常用的数据如:home目录,存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用

你可能感兴趣的:(服务)