nfs服务器详解

news2024/10/5 16:30:28

        nfs(网络文件系统)---------- 其实就是通过网络将文件共享出去。

        通过TCP/IP网络去共享资源的。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

客户端和服务端需要去读写共享文件,那么就需要对应的程序来实现读写操作。

	由于NFS支持的功能比较多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此NFS的功能所对应的端口并不固定,而是随机取用一些未被使用的小于1024的端口用于传输。但如此一来就会产生客户端连接服务器的问题,因为客户端需要知道服务器端的相关端口才能够连接。
	
	
	此时就需要RPC(Remote Procedure Call,远程过程调用)的服务。由于当服务器在启动NFS时会随机选取数个端口号,并主动向RPC注册,所以RPC知道每个NFS功能所对应的端口号,RPC将端口号通知给客户端,让客户端可以连接到正确的端口上去。RPC采用固定端口号port 111来监听客户端的需求并向客户端响应正确的端口号。
注:在启动NFS之前,要先启动RPC,否则NFS会无法向RPC注册。另外,RPC若重新启动,原来注册的数据会消失不见,因此RPC重启后,它管理的所有服务都需要重新启动以重新向RPC注册。
  •         总结:NFS服务开启产生一个随机端口,NFS服务器会向RPC进行注册,在RPC上写清楚自己所开放的NFS服务的端口号。客户端访问NFS服务器时会首先访问RPC(端口号:111)获取NFS服务的端口,再通过该端口获取NFS服务器资源。

服务端配置

在配置服务端时涉及两个软件包:rpcbind和nfs-utils;

1.在配置服务端时我们需要先将两个软件包装好。

        [root@localhost ~]# yum install rpcbind

        [root@localhost ~]# yum install nfs-utils

我们需要设置谁是共享文件,将文件共享给谁。我们需要编辑/etc/exports ,如果没有exports文件我们可以自己新建一个exports文件。

        [root@localhost ~]# vim /etc/exports -----编辑共享文件。

#共享目录   主机名(权限)
#可以使用完整的IP或者是网络号,例如172.24.8.128或172.24.8.0/24或者172.24.8.128/255.255.255.0;也可以使用*表示所有主机

2.创建共享目录并写入数据

[root@localhost ~]# mkdir /data

[root@localhost ~]# echo "this is text" > /data/file

3.写好后重启nfs服务

[root@localhost ~]# systemctl status nfs-server -----重启nfs服务

[root@localhost ~]# systemctl stop firewalld ------关闭防火墙

权限参数

参数值说明
rw,ro该目录共享的权限是可读写还是只读,但最终能否读写,还是与 文件系统的rwx有关
sync,asyncsync代表数据会同步写入到内存与硬盘中,async则代表数据会 先暂存于内存当中,而非直接写入硬盘
no_root_squash root_squash若客户端在共享目录里创建的文件的所属者和所属组是root用户 和root组,那么显示文件的属主和属组时有以下两种情况: no_root_squash表示,文件的所属者和所属组是root用户和 root组;root_squash表示将root用户和组映射为匿名用户和组 (默认设置)。
all_squash no_all_squashall_squash:客户端所有用户创建文件时,客户端会将文件的用户 和组映射为匿名用户和组no_all_squash:客户端普通用户创建的 文件的UID和GID是多少,服务端就显示为多少(默认设置)
anonuid= anongid=将文件的用户和组映射为指定的UID和GID,若不指定默认为 65534(nfsnobody)

客户端配置

1.首先在客户端上我们需要装一个包:nfs-utils

[root@localhost ~]# yum install nfs-utils -y

将包装好后,我们使用一个命令查看nfs服务器的共享文件:showmount

2.查看nfs服务器共享的文件,后面的ip为nfs服务器的ip地址。

3.将nfs服务器共享目录挂载到本地的某个文件中

[root@localhost ~]# mkdir /nfs -----创建一个挂载目录

[root@localhost ~]# mount 192.168.107.10:/data /nfs/ ------挂载

查看挂载情况:发现挂载成功。

此时在本地的/nfs文件中查看:发现nfs服务器的共享文件出现在该文件中(挂载成功)

客户端的自动挂载

在一般NFS文件系统的使用过程中,如果客户端要使用服务端所提供的文件系统,可以在 /etc/rc.d/rc.local 中设置开机时自动挂载( /etc/rc.d/rc.local 文件中写入的命令,在每次启动系统用户登录之前都会执行一次);也可以在登录系统后手动利用mount来挂载。 由于网络的问题,NFS服务器与客户端的连接不会一直存在,当我们挂载了NFS服务器之后,任何一方脱机都可能造成另外一方等待超时。为了解决这样的问题,就出现了下面的想法:

  • 当客户端在有使用NFS文件系统的需求时才让系统自动挂载。

  • 当NFS文件系统使用完毕后,让NFS自动卸载。

于是就产生了autofs这个服务。

autofs这个服务是在客户端的上面,它会持续的检测某个指定的目录,并预先设置当使用到该目录的某个子目录时,将会取得来自服务器端的NFS文件系统资源,并进行自动挂载的操作。

自动挂载功能会使用到一个软件: autofs

        [root@localhost nfs]# yum install autofs -y  -----下载软件包

        [root@localhost ~]# vim /etc/auto.master  -----编辑该文件

[root@localhost ~]# grep haha /etc/auto.master
/test   			/etc/haha
本地端的目录文件	   挂载配置文件(在该文件中去写挂载的具体信息)	 
[root@localhost ~]# 
[root@localhost ~]# vim /etc/haha  ------编辑挂载配置文件
[root@localhost ~]# cat /etc/haha
shuju  192.168.107.10:/data  (吧data挂载到本地的shuju下边),这里只写了一个名字没有写路径它会将									shuju放到/test下。
自动挂载解释:autofs会去检测类似与我们之前写的/test目录,看有没有人去访问这些目录;如果有人去访问/test下的数据,它就会去读配置文件/etc/haha,将192.168.107.10:/data挂载到/test/shuju。

[root@localhost ~]# systemctl restart autofs  -----启动自动挂载服务。
[root@localhost ~]# systemctl stop firewalld  -----关闭防火墙

此时就可以发现挂载成功:

情况一:

当nfs给客户端的权限为rw时:

我们在客户端的挂载文件中写入时提示权限被拒绝(即使客户端的用户为root)

此时我们需要考虑当前账户对目录的权限:这里的root是客户端的root,不是服务端的root。这里的root是不一样的。客户端的root在服务端不被当作root,客户端的root被服务端当成nobady;

那么此时客户端root账号对于该文件的权限为其他人的权限:r-x

此时我们需要到nfs服务端给其他人加上W的权限:

当给了权限后,我们再到客户端上去创建新文件,此时发现已经有权限并能够成功创建:

情况二:

当nfs的服务端的nfs挂掉时:

在客户端上就会造成挂载目录卡掉:

        造成卡顿状态的原因:因为客户端上一直挂载着,当你去访问这些文件系统时它就会一直尝试去挂载服务端。但是服务器这边不能被访问,所以就一直开在这种状态。

解决办法:重启客户端

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1590296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Let‘s Encrypt

创建文件夹 mkdir /usr/local/develop/ 安装Certbot客户端 yum install certbot 首先确保example.com和www.example.com这两个域名通过DNS解析绑定了你的web 服务器的公网 IP 就是说先要完成域名解析到服务器 下面命令会验证 /var/www/example 他会将一些命令文件存在…

国芯科技(C*Core)双芯片汽车安全气囊解决方案

汽车安全气囊是20世纪汽车上的十大发明之一,是目前汽车的法定标准配置,成为汽车驾乘人员生命安全的保护神。随着人们对汽车安全性要求的进一步提高,已形成前排驾驶员气囊、前排副驾驶员气囊、前排侧气囊、后排侧气囊、膝部气囊、安全气帘等等…

7、Qt--QLabel使用小记

前言:QLabel作为QT中基础的控件,功能简单使用方便频繁,主要用于显示文本、图片等信息。笔者这里记录下一些开发使用心路,方便小白快速入手。 一、添加背景图片 首先需要在资源中添加好图片资源,图片资源的添加参考4.1…

工智能图像降噪软件 ON1 NoNoise AI 2024 for Mac激活版

ON1 NoNoise AI 2024 for Mac是一款专为Mac用户设计的先进人工智能图像降噪软件。其核心功能在于能够利用机器学习技术,快速并智能地消除图像中的噪点,无论是亮度噪点还是颜色噪点,都能得到显著的改善。 软件下载:ON1 NoNoise AI …

自定义协议:序列化与反序列化的深度解析与实践

⭐小白苦学IT的博客主页⭐ ⭐初学者必看:Linux操作系统入门⭐ ⭐代码仓库:Linux代码仓库⭐ ❤关注我一起讨论和学习Linux系统 1.引言 协议是一种 "约定". socket api的接口, 在读写数据时, 都是按 "字符串" 的方式来发送接收的. 如…

Java基于微信小程序的高校体育场管理小程序,附源码

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

什么是态势感知?

什么是态势感知? 同学,听说过态势感知吗?啥?不知道?不知道很正常,因为态势感知是一个比较小众、比较神秘的概念。为什么态势感知很神秘,首先是因为这是来自军事情报领域的概念,然后…

python与设计模式之工厂模式的那些事儿

一、工厂模式 工厂模式实现了按需创建的最佳模式,其目的是为了隐藏创建类的细节与过程,通过一个统一的接口来创建所需的对象。 话说没了皇位争夺权的皇三接到了一个外征的工作,始皇给了5个亿的经费让皇三组建一个军队。打权总是要进行武器采…

测试用例的编写评审

1、什么叫软件测试用例 什么是测试用例 测试用例(TestCase) 是为项目需求而编制的一组测试输入、执行条件 以及预期结果,以便测试某个程序是否满足客户需求。–测试依据 可以总结为:每一个测试点的数据设计和步骤设计。–测试用例 2、测试用例的重要性(了解) 2.1…

从IoTDB的发展回顾时序数据库演进史

面向工业物联网时代,以 IoTDB 为代表的时序数据库加速发展。 时序数据的主要产生来源之一是设备与传感器,具有监测点多、采样频率高、存储数据量大等多类不同于其他数据类型的特性,从而导致数据库在实现高通量写入、存储成本、实时查询等多个…

【数学建模】2024认证杯C题完整思路和代码论文解析

经过不懈的努力,2024认证杯数学建模C题的完整论文和代码已完成,代码为A题全部4问的代码,论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解(问题1模型的建立与求解、问题2模型的建立与求解、问题3模型的建…

Rockchip Android13 Vold(一):Native层

一:概述 Vold全称Volume Daemon是用于管理存储类设备的守护进程,负责接收驱动层设备挂载和卸载消息以及与Framework层之间的通信。Vold作为一个守护进程位于Android的Native Daemons层。 二:Vold框架图 三:Vold Sevice Android13的init.rc位于/system/etc/init/hw/其中使…

域名网络、

http://www.localhost:8080/hello http://127.0.0.1:8080/hello 一般在本机的C:\Windows\System32\drivers\etc的host文件里都有 在这个hosts配置文件中有一个127.0.0.1和默认的用户名locahost,在tomcat启动后输入的地址就是localhost端口号,默认的…

跟bug较劲的第n天,undefined === undefined

前情提要 场景复现 看到这张图片,有的同学也许不知道这个冷知识,分享一下,是因为我在开发过程中踩到的坑,花了三小时排查出问题的原因在这,你们说值不值。。。 我分享下我是怎么碰到的这个问题,下面看代码…

可视化大屏的应用(12):在智慧制造中的十大价值

一、什么是智慧制造 智慧制造是指通过信息技术、物联网、人工智能等先进技术的应用,实现生产过程的数字化、网络化、智能化,从而提高生产效率、降低成本、提高产品质量和灵活性的一种制造模式。 智慧制造的核心是将传统的制造过程与先进的信息技术相结合…

【opencv】示例-grabcut.cpp 使用OpenCV库的GrabCut算法进行图像分割

left mouse button - set rectangle SHIFTleft mouse button - set GC_FGD pixels CTRLleft mouse button - set GC_BGD pixels 这段代码是一个使用OpenCV库的GrabCut算法进行图像分割的C程序。它允许用户通过交互式方式选择图像中的一个区域,并利用GrabCut算法尝试…

【大语言模型】基础:如何处理文章,向量化与BoW

词袋模型(BoW)是自然语言处理(NLP)和机器学习中一种简单而广泛使用的文本表示方法。它将文本文档转换为数值特征向量,使得可以对文本数据执行数学和统计操作。词袋模型将文本视为无序的单词集合(或“袋”&a…

洛谷题单 -- 图论的简单入门

B3643 图的存储 链接 : 图的存储 - 洛谷 思路 : 这一题要考察图的存储方式 , 一般可以使用邻接矩阵 或 邻接表来存储 图的结点 和1 边的信息 &#xff0c;详情请看代码 : 代码 #include<bits/stdc.h> using namespace std;const int N 1010 ; int n , m ; int …

建造者模式:构造复杂对象的艺术

在面向对象的设计中&#xff0c;建造者模式是一种重要的创建型设计模式&#xff0c;专门用来构建复杂的对象。它主要目的是将对象的构造代码与其表示代码分离&#xff0c;使同样的构建过程可以创建不同的表示。本文将详细介绍建造者模式的定义、实现、应用场景以及优缺点&#…

VBA中如何对工作表进行排序

代码 在VBA中对工作表进行排序的最简单方法是直接使用Move方法来移动工作表。 Sub SortSheetsByNameDescending()Dim sheetsDim sheet As WorksheetDim i As Integer, j As IntegerDim sortedSheets() As Array 获取当前工作簿中的所有工作表Set sheets ThisWorkbook.Sheets…