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

相关推荐
吕彬-前端5 分钟前
使用vite+react+ts+Ant Design开发后台管理项目(五)
前端·javascript·react.js
学前端的小朱8 分钟前
Redux的简介及其在React中的应用
前端·javascript·react.js·redux·store
guai_guai_guai17 分钟前
uniapp
前端·javascript·vue.js·uni-app
€☞扫地僧☜€36 分钟前
docker 拉取MySQL8.0镜像以及安装
运维·数据库·docker·容器
hjjdebug41 分钟前
linux 下 signal() 函数的用法,信号类型在哪里定义的?
linux·signal
其乐无涯42 分钟前
服务器技术(一)--Linux基础入门
linux·运维·服务器
Diamond技术流42 分钟前
从0开始学习Linux——网络配置
linux·运维·网络·学习·安全·centos
写bug的小屁孩1 小时前
前后端交互接口(三)
运维·服务器·数据库·windows·用户界面·qt6.3
斑布斑布1 小时前
【linux学习2】linux基本命令行操作总结
linux·运维·服务器·学习
紅色彼岸花1 小时前
第六章:DNS域名解析服务器
运维·服务器