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 分钟前
【Linux】深入理解GCC/G++编译流程及库文件管理
linux·运维·服务器
乐大师6 分钟前
Deepin登录后提示“解锁登陆密钥环里的密码不匹配”
运维·服务器
ac.char12 分钟前
在 Ubuntu 上安装 Yarn 环境
linux·运维·服务器·ubuntu
敲上瘾12 分钟前
操作系统的理解
linux·运维·服务器·c++·大模型·操作系统·aigc
Myli_ing19 分钟前
HTML的自动定义倒计时,这个配色存一下
前端·javascript·html
长弓聊编程31 分钟前
Linux系统使用valgrind分析C++程序内存资源使用情况
linux·c++
dr李四维36 分钟前
iOS构建版本以及Hbuilder打iOS的ipa包全流程
前端·笔记·ios·产品运营·产品经理·xcode
cherub.38 分钟前
深入解析信号量:定义与环形队列生产消费模型剖析
linux·c++
雯0609~1 小时前
网页F12:缓存的使用(设值、取值、删除)
前端·缓存
℘团子এ1 小时前
vue3中如何上传文件到腾讯云的桶(cosbrowser)
前端·javascript·腾讯云