一、介绍
网络文件系统,英文Network File System(NFS),是一种基于TCP传输协议的文件共享习通。
NFS的CS体系中的服务端启用协议将文件共享到网络上,然后允许本地NFS客户端通过网络挂载服务端共享的文件。
1、来源
2、特点
1、方便
2、资源占用少
3、使用率高
输出 export
二、NFS原理
当NFS服务器设置好一个共享目录,且设置好授权ip以及权限后,有访问权的客户机就可以将此目录挂载到自己某个挂载点。
既然NFS的客户及服务器是基于TCP会话建立访问的,那么两者能够互访的前提是知道互相的IP和程序的端口号。
对于IP,服务器是设置对某一IP网段授权的;客户机是设置挂载某个网络目录的。所以他们IP互知。
对于端口号。NFS的端口号大概位于2049,但是因为文件系统非常复杂,往往的情况是端口号不固定(2049+的形式),以及NFS需要启动额外的端口,这些端口是1024以下的随机端口。那么客户机如何知道服务器的端口号呢?答案是:通过rpcbind实现。
三、NFS工作机制
1)首先服务器端启动RPC服务,并开启111端口
2)服务器端启动NFS服务,并向RPC注册端口信息
3)客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
4)服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。
注:rpc重启后,nfs的注册信息会丢失,因此需要重启nfs完成注册。
四、部署
1.安装:
yum install nfs-utils -y
2.启动:
systemctl status rpcbind.server 确保rpc启动
systemctl start nfs 启动nfs
systemctl enable nfs 确保开机启动
3.验证:
systeam is-active nfs
4.配置共享文件
vim /etc/exports
5.共享格式: 共享目录绝对路径 授权的ip或网段(权限1,权限2)
权限 | 用途 |
---|---|
ro | 只读 |
rw | 读写访问 |
sync | 客户端写入数据同步到服务器后才会返回 |
no_root_squash | 客户端root用户具有完全的权限 |
root_squash | root用户权限被映射成服务端上的普通用户nobody |
anonuid | 指定匿名用户的UID |
anongid | 指定匿名用户的GID |
1、进程
rpc.nfsd NFS守护进程 remote Procedure call
rpc.mountd 管理文件系统和权限
portmap,rpcbind 端口映射
uid,gid
2、常用目录和文件
/etc/exports
/usr/sbin/exportfs
/usr/sbin/showmount
/var/lib/nfs/*tab
etab 记录NFS分享出来的目录的完整权限设定值
xtab 记录曾经链接到此NFS主机的相关客户端数据
3、配置文件
vim /etc/exports
格式
输出目录 客户端 选项 [访问权限,用户映射,其他]
/haha 192.168.153.0/24(rw)
输出目录: 需要共享的目录路径
客户端: 服务的用户对象
选项: 共享的权限,紧跟客户端列
4、客户端
指定ip地址的主机:192.168.171.144
指定子网中的所有主机:192.168.171.0/24, 192.168.171.0/255.255.255.0
指定域名的主机:www.baidu.com
指定域中的所有主机:*.baidu.com
所有主机:*
5、选项
访问权限选项:
ro 只读
rw 读写
用户映射选项:
all_squash 将所有用户和组映射为匿名用户和组
no_all_squash 对普通用户不映射(默认设置)
root_squash 将root用户和组映射为匿名用户和组(默认设置)
no_root_squash 对root用户和组不映射
anonuid=xxx 将用户映射为服务器上的指定UID
anongid=xxx 将用户组映射为服务器上的指定GID
其他选项:
secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
no_wdelay:若有写操作则立即执行,应与sync配合使用;
subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
#配置完成后,重启服务
systemctl restart nfs-server.service
#用以下命令来查看共享的nfs
showmount -e 192.168.254.138
#在客户端上进行挂载使用
mount 192.168.254.136:/test /mnt