NFS 文件共享服务

一、NFS

1.1 什么是NFS

NFS(Network File System,网络文件系统)是一种分布式文件系统协议,最初由Sun Microsystems开发,用于在计算机网络上共享文件。NFS 允许用户在不同的机器之间挂载远程文件系统,使得远程文件像本地文件一样访问和操作
NFS 主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。 NFS 也是 NAS 存储 设备必然支持的一种协议

1.2 NFS 基本的原理

NFS 服务器:负责共享其本地文件系统,使其在网络上可访问

NFS 客户端:通过网络挂载来自 NFS 服务器的文件系统,并将其集成到本地文件系统中

1.3 NFS 的常见使用场景

  1. 文件共享:在多个用户和设备之间共享文件,简化协作和数据访问。
  2. 备份与恢复:集中存储备份数据,方便快速恢复。
  3. 虚拟化与云计算:为虚拟机或容器提供共享存储,支持动态资源分配。
  4. 大数据处理:在集群计算环境中共享数据,提高数据处理效率。

1.4 NFS 实现原理

NFS 服务的实现依赖于 RPC ( Remote Process Call ,远端过程调用)机制,以完成远程到本地的映射过程,在 CentOS 7 系统中,需要安装 nfs-utils 、 rpcbind 软件包来提供 NFS 共享服务,前者用于 NFS 共享发布和访问,后者用于 RPC 支持手动加载 NFS 共享服务时,应该先启动 rpcbind ,再启动 nfs
NFS端口号2049 ;RPC端口号111

1 、假如访问的是 NFS 客户端,先调用不同的函数(例如 Read() 函数,读功能、 Write() 函数,写功能、 Create()函数,创建功能、 Remove() 函数、删除功能、 Rename() 函数,重命名功能)对数据进行处理
2 、调用完函数后,首先 NFS 客户端会建立 TCP 连接,通过 TCP/IP 的方式传递给 NFS 服务端,连上远端的服务器。
3 、接着 NFS 服务端接收到请求后, NFS 服务器会做 3 步系列操作(环环相扣,先映射端口,然后验证是 否能登录服务器,最后验证文件使用权限),如下: 首先,调用portmap 进程进行端口映射。
接着,调用 Rpc.nfsd 进程来验证 NFS 客户端是否拥有对应的权限连接 NFS 服务端。
最后,调用 Rpc.mount 进程来验证客户端是否拥有对应的文件使用权限;
4 、 Portmap 进程实现用户映射和压缩
5 、最后 NFS服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件

二、NFS****文件共享系统实验步骤

2.1 NFS 部署思路以及步骤

部署思路:

1 、安装 nfs 和 rpcbind 软件
2 、修改配置文件设置共享
3 、创建共享目录
4 、开启服务
5 、客户端验证共享目录可访问

部署步骤:

1.服务端配置

先检测一下服务有没有安装

vim /etc/exports #NFS 的配置文件为/etc/exports,文件内容默认为空

rw 表示可以读写;sync 表示同步;
no_root_squash 表示当客户机以 root 身份访问时赋予本地 root权限(默认是root_squash)

按顺序开启 rpcbind ;nfs 服务:

showmount -e localhost 可以查看共享是否成功:

2.客户端配置
首先先验证一下服务有没有安装

客户端验证共享

下载httpd服务

将服务端的/opt/web 挂载到/var/www/html

我们在客户端生成的目录和内容在服务端同步:

开启web服务之后可以成功访问网页内容:

2.2 NFS 工作流程总结:

挂载

客户端通过 mount命令挂载远程 NFS 文件系统

客户端向 NFS 服务器发送挂载请求,服务器验证并返回确认信息

文件操作

一旦挂载成功,客户端可以执行各种文件操作(如读、写、打开等)

每个文件操作通过 RPC 请求发送到 NFS 服务器

数据传输

NFS 服务器处理请求并返回操作结果或数据。客户端将这些数据集成到本地文件系统,用户无感知地进行操作。

相关推荐
阿珊和她的猫29 分钟前
v-scale-scree: 根据屏幕尺寸缩放内容
开发语言·前端·javascript
一只栖枝2 小时前
华为 HCIE 大数据认证中 Linux 命令行的运用及价值
大数据·linux·运维·华为·华为认证·hcie·it
wuicer5 小时前
ubuntu 20.04 安装anaconda以及安装spyder
linux·运维·ubuntu
加班是不可能的,除非双倍日工资5 小时前
css预编译器实现星空背景图
前端·css·vue3
wyiyiyi5 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
gnip6 小时前
vite和webpack打包结构控制
前端·javascript
excel6 小时前
在二维 Canvas 中模拟三角形绕 X、Y 轴旋转
前端
cui__OaO6 小时前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习
小狗爱吃黄桃罐头6 小时前
正点原子【第四期】Linux之驱动开发篇学习笔记-1.1 Linux驱动开发与裸机开发的区别
linux·驱动开发·学习
阿华的代码王国6 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端