一.Nfs简介
NFS是Network File System的缩写即网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网, NFS用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS。
二.Nfs原理
1.用户进程访问NFS客户端目录
2.NFS将请求转化成函数
3.NFS客户端与服务端建立TCPIP连接
4.NFS服务端接收请求,会调用portmap进行端口映射
5.服务端rpc.nfsd进程进行判断NFS客户端是否可以连接
6.如果可以连接,rpc.mount进程会对客户端进行判断允许的操作
7.都通过则可以对服务端磁盘进行操作
三.安装实践
1.服务端
#关闭防火墙
[root@nfs ~]# systemctl stop firewalld
[root@nfs ~]# systemctl disable firewalld
#关闭selinux
[root@nfs ~]# setenforce 0
[root@nfs ~]# vim /etc/selinux/config
SELINUX=disabled
#安装NFS和Rpcbind
[root@nfs ~]# yum install -y nfs-utils rpcbind
注意:如果是centos6需要单独安装rpcbind,centos7可以不单独安装
#配置
NFS服务程序的配置文件为/etc/exports,需要严格按照共享目录的路径允许访问的NFS客户端(共享权限参数)格式书写。定义要共享的目录与相应的权限,具体书写方式如下:
[root@nfs ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)
语法 : /data | 172.16.1.0/24 | (rw,sync,all_squash)
共享的目录名称| 允许连接的客户端网段| 允许的操作(参数1,参数2)
权限属性:
| nfs共享参数 | 参数作用 |
| ---------------------- | ------------------------------------------------------------ |
| rw(常用) 读写权限
| ro(不常用) 只读权限
| root_squash (不常用) | 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
| no_root_squash (不常用) | 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
| all_squash(常用) 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
| no_all_squash(不常用) 无论NFS客户端使用什么账户访问,都不进行压缩
| sync(常用) 同时将数据写入到内存与硬盘中,保证不丢失数据
| async(不常用) 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
| anonuid(常用) 配置all_squash使用,指定NFS的用户UID,必须存在系统
| anongid(常用) 配置all_squash使用,指定NFS的用户UID,必须存在系统
#根据配置文件创建目录
[root@nfs ~]# mkdir /data
#启动NFS
[root@nfs ~]# systemctl start rpcbind nfs-server
注意:如果是centos6,启动时必须先启动rpcbind,centos7会自动启动
#验证启动
[root@nfs ~]# ps -ef | grep nfs
#验证NFS配置
[root@nfs ~]# cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,all_squash)
2.客户端
#关闭防火墙和selinux
#安装NFS和rpcbind
[root@web ~]# yum install -y nfs-utils rpcbind
#查看挂载点
[root@web~]# showmount -e 172.16.1.31【服务端ip】
Export list for 172.16.1.31: #显示以下信息表示服务端挂载点正常,可以进行挂载
/data 172.16.1.0/24
#启动服务
[root@web~]# systemctl start rpcbind nfs-server
#挂载
[root@web01 ~]# mkdir /data
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /data
#验证
[root@web01 ~]# df -h
172.16.1.31:/data 98G 1.2G 97G 2% /data
#写入文件测试
[root@web~]# cd /data
[root@web /data]# mkdir dir
mkdir: cannot create direct‘dir’: Permission denied
#权限不足,服务端data目录权限是root
#服务端修改权限
[root@nfs ~]# chown -R nfsnobody.nfsnobody /data/
#客户端再次写入数据
[root@web/data]# mkdir dir
[root@web/data]# ll
total 0
drwxr-xr-x 2 nfsnobody nfsnobody 6Apr 13 23:43 dir
四.Nfs使用
1.挂载
NFS客户端的配置步骤也十分简单。先使用showmount命令,查询NFS服务器的远程共享信息,其输出格式为“共享的目录名称 允许使用客户端地址”。
1)查看挂载点
[root@web~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
2)挂载命令
[root@web ~]# mount -t nfs 172.16.1.31:/data /data
mount #挂载命令
-t #指定挂载的文件类型
nfs #挂载类型是NFS
172.16.1.31 #远端挂载的主机IP
:/data #远端挂载的主机目录
/data #本地要挂载的目录
2.卸载
1)卸载命令
[root@web01 ~]# umount 172.16.1.31:/data
[root@web01 ~]# umount /data
2)卸载时需要注意
卸载时,不要在要卸载的目录里面进行卸载【空手到别人家里还想弄死人家,不可行】
[root@web/data]# umount /data
umount.nfs4: /data: device is busy
#强制卸载 【带着棍子去那就可以了】
[root@web01 /data]# umount -lf /data #避免这种卸载方式
注意事项:
1.卸载时,不要在要卸载的目录里面进行卸载
2.执行挂载目录时,本地要挂载的目录尽量不要有数据,如果有数据,不会丢失只是被盖住,取消挂载后仍然存在