问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

NFS网络文件系统详解

创作时间:
作者:
@小白创作中心

NFS网络文件系统详解

引用
CSDN
1.
https://blog.csdn.net/weixin_56617616/article/details/143210066

NFS(Network File System)是一种网络文件系统协议,允许客户端通过网络访问服务器上的文件。它广泛应用于Linux系统中,提供了高效的文件共享和访问机制。本文将详细介绍NFS的基本概念、工作原理、服务端配置以及客户端访问方法,并对比其他常见的文件共享服务。

NFS网络文件系统

基本概念

NFS(Network File System)网络文件系统,服务端启用协议将文件共享到网络上,然后允许本地NFS客户端通过网络挂载服务端共享的文件。

NFS的架构主要由三部分组成:NFS服务器、客户端和传输协议。

  • NFS服务器:这是NFS架构的核心部分,负责管理远程文件系统并将其共享给网络中的客户端。服务器运行NFS服务软件,并处理来自客户端的文件访问请求。服务器可以是一台物理服务器,也可以是虚拟机或容器化环境。

  • 客户端:客户端是访问远程文件系统的设备,可以是计算机、手机或其他智能设备。客户端通过挂载远程文件系统,使得用户可以像访问本地文件一样访问远程文件。

  • 传输协议:NFS使用TCP/IP协议进行通信,并基于RPC协议来传输数据和控制信息。RPC协议使得客户端能够与服务器建立连接,并进行文件的传输和操作。

工作原理

NFS的核心原理在于其使用了远程过程调用(RPC)机制。当客户端需要访问NFS服务器上的文件时,它会通过RPC向服务器发送请求。服务器处理这些请求,并将结果返回给客户端。这种机制确保了数据的一致性和完整性,同时提供了高效的文件访问服务。

RPC(Remote Process Call,远端过程调用)机制:主要解决用于解决分布式系统中,服务之间的调用问题,远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑,同时还支持异构型分布式系统间的传输,完成远程到本地的映射过程, 通过端口映射器(portmapper)或RPC绑定服务(rpcbind),客户端可以找到NFS服务器所提供的服务对应的端口号。

RPC请求过程:

  1. 客户端发起调用请求;
  2. client stub可以理解为一个代理,会将调用方法、参数按照固定格式进行封装,通过服务提供的地址,发起网络请求;
  3. 消息通过sockets进行网络传输到服务端;
  4. server sutb接受来自socket的消息;
  5. server stub将消息解封装,告诉服务端调用的哪个服务,参数是什么;
  6. 结果返回给server stub;
  7. server stub将结果再次打包发送给socket;
  8. 消息通过socket进行网络传输到客户端;
  9. client stub从socket拿到消息;
  10. client stub解封装消息将结果发送给client。

为了实现NFS网络文件系统,需要安装 nfs-utils、rpcbind 软件包来提供NFS共享服务,前者用于 NFS 共享发布和访问,后者用于 RPC 支持。

NFS协议:

  • 端口号:2049
  • 软件包:nfs-utils
  • 服务名:nfs
  • 配置文件:/etc/exports

RPC协议:

  • 端口号 111
  • 软件包:rpcbind
  • 服务名:rpcbind

NFS服务端配置

# 安装nfs服务端软件包
[root@localhost ~]# yum -y install nfs-utils
# 启动nfs服务
[root@localhost ~]# systemctl start nfs && systemctl enable nfs
# 查看服务端口信息
[root@localhost ~]# ss -anptul | grep 2049
udp    UNCONN     0      0         *:2049                  *:*                  
udp    UNCONN     0      0        :::2049                 :::*                  
tcp    LISTEN     0      64        *:2049                  *:*                  
tcp    LISTEN     0      64       :::2049                 :::* 
# 查看RPC服务端口信息
[root@localhost ~]# ss -anptul | grep rpcbind
udp    UNCONN     0      0         *:111 
tcp    LISTEN     0      128       *:111 
# 创建共享目录
[root@localhost ~]# mkdir /nfs-upload
# 修改nfs主配置文件:/etc/exports
[root@localhost ~]# vim /etc/exports
/nfs-upload       192.168.0.27(rw)   192.168.0.28(ro)
/test 192.168.0.0/24(rw)  #共享给指定网段
共享文件夹路径  客户机地址(权限)      客户机地址(权限)  
# 重启nfs服务
[root@localhost ~]# systemctl restart nfs

客户端访问NFS

# 列出有哪些NFS共享资源:showmount -e  服务器地址,如果客户端没有该命令需安装nfs-utils
[root@client ~]# showmount -e 192.168.0.26
Export list for 192.168.0.26:
/upload 192.168.0.28,192.168.0.27
# 手动挂载NFS共享:mount
[root@client ~]# mkdir /opt/upload
[root@client ~]# mount 192.168.0.26:/nfs-upload /opt/upload
                        服务器地址:文件夹路径  挂载点
[root@client ~]# df -h
文件系统                容量  已用  可用    已用% 挂载点
...
192.168.0.26:/upload   17G  1.2G   16G    7% /opt/upload
# 客户端验证是否可以是否共享目录
[root@client ~]# cd /opt/upload/
[root@client upload]# touch xx.txt
touch: 无法创建"xx.txt": 权限不够
# 解释:默认客户端是以nfs用户身份访问远端的nfs服务器,如果nfs服务端共享的目录属主为root用户,那客户端默认是没有写权限
# 服务端开放允许以root身份访问
[root@localhost ~]# vim /etc/exports
/upload 192.168.0.27(no_root_squash,rw) 192.168.0.28(ro)
解释:no_root_squash 不挤压root用户身份(允许以root身份访问)
[root@localhost ~]# systemctl restart nfs
# 客户端验证
[root@client upload]# touch xx.txt
[root@client upload]# ls
xx.txt
# 为普通用户授权访问nfs共享目录(通过ACL实现,nfs通过用户UID辨别用户身份)
[root@localhost ~]# setfacl -m u:lisi:rwx /nfs-upload
# 设置SBIT权限,设置了o+t以后,其他普通用户将只能删除自己所建的文件,不能删除其他文件
[root@localhost ~]# chmod o+t /nfs-upload/
# 客户端lisi用户验证授权
[lisi@client upload]$ touch lisi.txt
[lisi@client upload]$ ls
lisi.txt  xx.txt
[lisi@client upload]$ rm -rf xx.txt 
rm: 无法删除"xx.txt": 不允许的操作
# 客户端实现开机挂载配置:/etc/fstab
[root@client]# vim /etc/fstab
192.168.0.26:/xxx  /mnt/xxx nfs     defaults,_netdev   0 0
服务器地址:文件夹路径   挂载点  文件系统   defaults,_netdev   0 0
# 解释:_netdev:指定nfs是网络设备

相关技术对比

NAS(网络附加存储)存储模式中的文件共享服务:

  • samba文件共享服务:支持跨平台
  • FTP文件共享服务:支持跨平台
  • NFS文件共享服务:支持跨平台

DAS存储(直连存储):直接附加在电脑主板上的硬盘

SAN存储(存储区域网络):块级别存储,把自己电脑上的硬盘共享给其他主机

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号