NFS(网络文件系统)
1.概述:
-
NFS(Network File System,网络文件系统),是一种分布式文件系统,允许网络中不同操作系统的计算机间共享文件,其通信协议基于TCP/IP协议,可以将远程的计算机磁盘挂载到本地,读写文件像本地磁盘一样操作。
-
NFS在文件传送或信息传递过程中依赖于RPC(Remote Procedure Call,远程过程调用)协议。RPC协议可以在不同的系统间使用,此通信协议设计与主机及操作系统无关。
-
使用NFS时,客户端只需要使用mount命令就可以把远程文件系统挂载到自己的文件系统之下,操作远程文件如使用本地计算机上的文件一样。
-
NFS基于C/S结构,其本身可以认为是RPC的一个程序,只要用到NFS的地方都要启动RPC服务,不论是服务端还是客户端,NFS是一个文件系统,而RPC负责信息的传输。
2.工作流程:
(1)NFS工作流程:
当NFS启动后,会随机的使用一些端口,NFS就会向RPC去注册这些端口,此时RPC就会记录下这些端口,RPC会开启111端口。通过Client端和Sever端端口的连接来进行数据的传输。在启动NFS之前,首先要确保RPC服务启动。
(2)NFS协议模型:
(3)RPC协议模型:
3.NFS服务配置实验:
(1)NFS相关包和工具:
-
nfs-utils:NFS的主要组件,包含有rpc.nfsd以及rpc.mountd这两个核心守护进程组件
-
nfsstat:显示NFS的状态统计信息
-
exportfs:在NFS服务端,维护NFS共享资源的命令
-
showmount:在NFS客户端,查看服务器共享的资源
-
rpcinfo:显示由RPC维护的端口映射,显示已经注册的RPC服务列表
-
rpcbind:提供RPC的端口映射的守护进程及相关文件、执行文件等
(2)NFS相关服务安装:
1.安装NFS服务:
[root@localhost ~]# yum install -y nfs-utils #包含一些基本的NFS命令与控制脚本
……安装过程省略…… #安装nfs-utils的时候centos7默认安装了rpcbind,这是一个管理RPC的连接程序,负责信息传输
2.查看nfs-utils安装包的相关文件:
[root@localhost ~]# rpm -ql nfs-utils
/etc/exports.d #主配置文件
/usr/lib/systemd/system/nfs.service #配置单元
/usr/sbin/rpc.mountd #RPC守护进程
/usr/sbin/rpc.nfsd #NFS守护进程
(3)NFS服务端配置:
1)主配置文件:/etc/exports
格式:
共享文件 [主机表1[参数项....]] [主机表2[参数项....]]
参数项:控制共享目录的访问权限,用户映射等等
-
ro:只读
-
rw:读写
-
root_squash:当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
-
no_root_squash:当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
-
all_squash:无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
-
sync:同时将数据写入到内存与硬盘中,保证不丢失数据
-
async:优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
2)exportfs命令:管理NFS服务器共享的文件系统,当配置了/etc/exportfs文件后,可以使用exportfs命令直接使其生效
格式:
export [参数] [目录]
常用参数:
-
-a:全部挂载或卸载/etc/exportfs文件中的设置
-
-r:重新挂载
-
-u:卸载共享目录
-
-v:显示共享目录
1.在NFS服务器上建立用于NFS文件共享的目录,并设置足够的权限确保其他人也有写入权限:
[root@localhost ~]# mkdir /nfsfile/
[root@localhost ~]# chmod -Rf 777 /nfsfile/
[root@localhost ~]# echo "Hello World" > /nfsfile/readme
2.配置/etc/exports主配置文件:
[root@localhost ~]# vim /etc/exports
/nfsfile 192.168.32.0/24(rw,sync,no_root_squash) #NFS客户端地址与权限之间没有空格
3.先重启RPC再重启NFS服务,并加入开机自启:
[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# systemctl restart nfs-server
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# systemctl enable nfs-server
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@localhost ~]# ss -tanl | grep -E "111|2049|20048" #检查端口
LISTEN 0 128 *:111 *:*
LISTEN 0 128 *:20048 *:*
LISTEN 0 64 *:2049 *:*
LISTEN 0 128 :::111 :::*
LISTEN 0 128 :::20048 :::*
LISTEN 0 64 :::2049 :::*
(4)NFS客户端配置:
1)showmount命令:在NFS客户端,查看服务器共享的资源
格式:
showmount [参数]
常用参数:
-
-a:显示本地挂载的文件资源的情况
-
-d:仅显示已被NFS客户端挂载的目录
-
-e:显示NFS服务端上所有的共享目录
2)NFS文件系统的挂/卸载:
-
mount -t nfs [-o 参数] NFS服务端地址:/共享目录 /本地挂载点
-
umount /本地挂载点
3)开机启动时自动挂载/etc/fstab文件:
-
NFS服务端地址:/共享目录 /本地挂载点 nfs defaults 0 0
1.安装NFS服务:
[root@localhost ~]# yum install -y nfs-utils #包含一些基本的NFS命令与控制脚本
……安装过程省略…… #安装nfs-utils的时候centos7默认安装了rpcbind,这是一个管理RPC的连接程序,负责信息传输
2.查询NFS服务器的远程共享信息:
[root@localhost ~]# showmount -e 192.168.32.143 #客户端使用showmount命令前需要先安装nfs-utils包
Export list for 192.168.32.143:
/nfsfile 192.168.32.0/24
3.挂载NFS文件系统:
[root@localhost ~]# mkdir /mnt/nfsfile
[root@localhost ~]# mount ‐t nfs 192.168.32.143:/nfsfile /mnt/nfsfile
注意:卸载NFS文件系统
[root@localhost ~]# umount /mnt/nfsfile
umount.nfs4: /mnt/nfsfile: device is busy
[root@localhost ~]# umount -l /mnt/nfsfile #在该目录空闲后再umount
4.永久生效NFS文件共享服务:
[root@localhost ~]# vim /etc/fstab
192.168.32.143:/nfsfile /mnt/nfsfile nfs defaults 0 0