NFS概述
什么是NFS?
NFS:Network File System 网络文件系统,基于内核的文件系统。Sun 公司开发,通过使用 NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,基于RPC(Remote Procedure Call Protocol 远程过程调用)实现。
RPC远程调度
RPC全称是 Remote Procedure Call ,翻译过来就是——远程过程调用/调度,RPC 服务会指定一个端口(111)来对外提供服务,这个服务主要功能就是去记录 NFS server 上每个 NFS 功能所对应的端口,并且通知给 client,让 client 可以连接到正确的端口上去。
RPC是如何知道每个NFS功能的端口呢?
当 NFS server 服务启动时,会启用一些功能,然后这些功能会去随机调用一些端口,这时候 NFS server 就会向 RPC 去注册这些端口,RPC 将注册端口记录下来,并且 RPC 开启 111 去监听 client 的请求,如果 client 有请求,那么 RPC 就会将记录的 NFS 端口信息通知给 client,client 获取到 NFS server 的端口信息后就能够与 NFS server 进行通信了
NFS的工作原理 ![](https://i-blog.csdnimg.cn/direct/b7baa2126be246789425d65809bc1fef.png)
1、首先 server 启动 RPC 服务,并开启 111 端口
2、接着 server 启动 NFS 服务,并向 RPC 注册端口信息
3、client 启动 RPC(portmap服务),向 server 的 RPC (portmap) 服务发送请求,请求 server 的 NFS 端口
4、server 的 RPC(portmap) 服务返回 NFS 端口信息给 client
5、client 通过获取的 NFS 端口来建立和 server 的 NFS 连接并进行数据的传输
NFS的优缺点
NFS 优点:
1)将常用的数据放在一台可以通过网络访问的服务器上,以此来节省 client 本地存储空间
2)部署简单快捷,上手容易
3)维护简单NFS 缺点:
1)容易发生单点故障,一旦 server 宕机,那么所有的 client 就访问不到数据了
2)因为后端只有一台 server,在高并发情况下 server 端容易出现性能瓶颈
3)NFS 数据是明文传输,而且不会对数据完整性做验证,所以安全性较差(建议在局域网内使用)
NFS的常见应用场景
1、家庭网络存储:家庭网络存储设备使用NFS协议来提供共享文件和媒体,家庭成员可以从各自的设备上访问和播放共享的照片、音乐和视频。
2、云存储服务:许多云存储服务(如Dropbox、Google Drive)使用NFS协议来提供文件共享和同步功能,用户可以轻松地访问和分享文件,而无需考虑文件在哪个设备上。
3、远程办公:随着越来越多的人在家里工作,远程办公变得越来越普遍。在这种情况下,NFS可以提供一种方便的方式,让员工可以从家里的电脑上直接访问共享文件和数据,以便于工作。
4、大型零售商:一些大型零售商使用NFS来管理其海量的产品图像和描述信息。通过使用NFS,这些零售商可以确保其数百万的产品信息保持同步,并在需要时快速地检索和访问。
NFS安装
NFS软件安装介绍
相关软件包:nfs-utils,rpcbind
端口:2049(nfsd),其他端口有rpc(111)分配
NFS服务主要进程:
rpc.nfsd 最主要的NFS进程,管理客户端是否可登录
rpc.mountd 挂载和卸载NFS文件系统,包括权限管理
rpc.lockd 非必要,管理文件锁,避免同时写出错
rpc.statd 非必要,检查文件一致性,可修复文件
NFS的管理文件
1、NFS 文件系统维护指令:/usr/sbin/exportfs
维护 NFS 共享资源的命令,可以对共享资源进行更新、删除等
2、共享资源的登录文件:/var/lib/nfs/*tab
在 NFS server的登录文件都放置到 /var/lib/nfs/ 目录里面,在该目录下有两个比较重要的登录文件,一个是 etab ,主要记录了 NFS 所共享出来的目录的完整权限设定值;另一个 xtab 则记录曾经连接到此 NFS 服务器的相关客户端数据
3、客户端查询服务器分享资源的指令:/usr/sbin/showmount
showmount 则主要用在 Client 端, 可以用来查看 NFS server 共享出来的目录资源
NFS配置文件
/etc/exports
/etc/exports.d/*.exports
NFS共享配置文件
vim /etc/exports
其中添加内容如下:
共享资源(共享目录) 主机1(op1,op2) 主机2(op1,op2)
其中主机格式为
anonymous:表示使用通配所有客户端
单个主机:ipv4,ipv6,FQDN
IP networks:两种掩码格式均支持
172.18.0.0/255.255.0.0
172.18.0.0/16
wildcards:主机名通配,例如:.test.com,IP不可以
netgroups:NIS域的主机组,@group_name
op1格式为:
默认选项:(ro,sync,root_squash,no_all_squash)
ro,rw 只读和读写
async 异步,数据变化后不立即写磁盘,先写入到缓冲区中,过一段时间再写入磁盘,性能高,安全性低
sync(1.0.0后为默认)同步,数据在请求时立即写入共享存储磁盘,性能低,安全性高
root_squash (默认)远程root映射为nfsnobody,UID为65534,CentOS8 为nobody,CentOS 7以前的版本为nfsnobody
no_root_squash 远程root映射成NFS服务器的root用户
all_squash 所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody
no_all_squash (默认)保留共享文件的UID和GID
anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nobody,可配合all_squash使用
NFS配置示例:
# vim /etc/exports
/myshare server.example.com
/myshare *.example.com
/myshare server?.example.com
/myshare server[0-20].example.com
/myshare 172.25.13.10
/myshare 173.25.0.0/16
/myshare 2000:472:18:b51:c32:a21
/myshare 2000:472:18:b51::/64
/myshare *.example.com 172.28.0.0/16
/myshare desktop.example.com(ro)
/myshare desktop.example.com(ro) server[0-20].example.com(rw)
/myshare diskless.example.com(rw,no_root_squash)
NFS一些工具
rpcinfo
可以查看RPC相关信息,查看注册在指定主机的RPC程序
rpcinfo -p IP
rpcinfo -p 192.168.2.11
exportfs
可用于管理NFS导出的文件系统
常见选项
-v #查看本机所有NFS共享
-r #重读配置文件,并共享目录
-a #输出本机所有共享
-au #停止本机所有共享
showmount
查看远程主机的NFS共享目录
showmount -e IP
实现两台服务器之间的NFS文件共享
1、安装两个包
yum -y install nfs-utils rpcbind
2、启用服务
systemctl start rpcbind
systemctl start nfs-server
3、编辑服务器的配置文件
vim /etc/exports
在中添加一行
共享资源 共享给谁(共享的权限) 允许所有人可以访问用%
/test 客户机ip(rw)读和写的权限
/test 192.168.143.129(rw)
4、重启服务
systemctl restart nfs-server 不建议
exportfs -r 建议
exportfs -v
5、客户端挂载和查看
showmount -e 服务器ip地址
mount.nfs 服务器IP地址:共享文件目录 挂载到什么地方
mount.nfs 192.168.143.7:/test /data
df -h 查看是否挂载成功
6、进行测试
在服务器共享目录下创建一个文件
touch /test/file1
在客户端查看是否有内容7、客户端测试
在挂载点下创建文件
touch file
发现没有权限创建
8、服务器赋予目录所有权限
chmod 777 /test
9、客户端再次测试
touch file
创建成功
10、服务器查看创建文件的所有者
ll /test
发现客户端映射到目录中的所有者为nfsnobody
11、给nfsnobody设置ACL权限
先恢复目录原本的权限
chmod 755 /test
setfacl -m u:nfsnobody:rwx /test
12、客户端再次测试ACL权限
touch /data/file
总结
最后用一个案例来应用上面的一些命令,才能让我们更加深刻的体会到这些命令的作用,NFS是一种广泛应用于Linux系统中的文件共享协议,它可以帮助不同计算机之间共享文件和目录。使用NFS可以减少数据冗余、提高效率和数据可靠性。要使用NFS,需要在服务器上安装NFS服务器软件,并配置要导出的目录,然后在客户端计算机上安装NFS客户端软件,并将共享资源挂载到本地文件系统。然而,使用NFS也存在一些风险,如需要确保服务器的安全性以防止未经授权的访问,并受到网络带宽和延迟的影响。因此,在正确配置和管理NFS时,需要仔细考虑这些因素以确保数据的安全性和共享效率。
到这里NFS的基本使用就结束了,谢谢大家!