前言:
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 startservice 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 -pvtouch /app/nfsdir1/nfsfile1mkdir /app/nfsdir2touch /app/nfsdir2/nfsfile2vim /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/nfs1mkdir /mnt/nfs2mount 172.18.24.17:/app/nfsdir1 /mnt/nfs1 mouont 172.18.24.17:/app/nfsdir2 /mnt/nfs2
挂载后,可做如下操作,验证是否具有读写权限
[root@localhost /mnt/nfs1]#ls nfsdir1#NFS服务器上创建的文件nfsdir1[root@localhost /mnt/nfs1]#touch a #可写[root@localhost /mnt/nfs1]#lsa nfsdir1[root@localhost /mnt/nfs1]#rm -rf a #可删除[root@localhost /mnt/nfs1]#lsnfsdir1[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服务的用户idapache: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 zhangzhang: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 atotal 0-rw-rw-r-- 1 zhang zhang 0 Oct 16 a
NFS服务器上
[root@localhost ~]#cd /app/homedir/zhanghome/[root@localhost /app/homedir/zhanghome]#lltotal 0-rw-rw-r-- 1 xiaozhang xiaozhang 0 Oct 16 18:50 a
如上所示,共享家目录成功,客户端家目录里面的数据都写入到了NFS服务器。
总结
NFS优势:节省本地存储空间,将常用的数据如:home目录,存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用
如果觉得《详解linux之NFS文件共享服务》对你有帮助,请点赞、收藏,并留下你的观点哦!