【Linux网络】典型NAS存储方式:NFS网络共享存储服务

news2025/2/22 18:07:46

一、关于存储的分类

二、NFS的介绍

nfs的相关介绍:

1、原理

2、nfs的特点

3、nfs软件学习

4、共享配置文件的书写格式

 关于权限,学习:

5、关于命令的学习:

三、实验操作

1、nfs默认共享权限(服务端设置)

2、客户端进行挂载 

​编辑 3、客户端测试:

4、调优

①修改共享配置文件,添加写的权限

②还需要修改文件夹,因为目前现在文件夹没有其他用户的写的权限

四、总结


一、关于存储的分类

存储类型分为三种

1、直连式存储:Direct-Attached Storage,简称DAS

特点:存储和主机直接连接,比如家用的电脑,服务和硬盘直接连接,存储和主机在一台机器上

适用范围:适用于那些数据量不大,对磁盘访问速度要求较高的中小企业

2、网络附加存储:Network-Attached Storage,简称NAS

特点:存储在远程,文件系统也在远程,这块空间是你可以直接访问上面的文件,如ftp、nfs都属于NAS(可以理解为通过网络共用一个设备,且设备的数据仅存了一份)

适用范围:适用于文件服务器,用来存储非结构化数据,虽然受限于以太网的速度,但是部署灵活,成本低

3、存储区域网络:Storage Area Network,简称SAN

特点:有一定的距离,主机距离存储设备相对较远,只提供空间不提供文件系统,管理等其他软件服务,比如ceph,gfs等

适用范围:适用于大型应用或数据库系统,缺点是成本高、较为复杂

二、NFS的介绍

nfs的相关介绍:

nfs是一种NAS存储,NFS也是一种网络文件系统基于内核的文件系统

nfs端口号不固定,早期喜欢说是2049,但是实际上是不固定的,它依赖于rpc(Remote Process Call,远程过程调用协议),通过nfs协议,客户机可以像访问本地目录一样远程访问服务器的共享资源。

1、原理

首先,服务端:nfs开启以后,服务端自己的rpc会注册相关信息;

然后,客户端:想要去连接服务端,会先找一下rpc注册中心,获取nfs的端口号(因为nfs的端口号是随机的,由rpc来进行管理) ;

最后,rpc会告诉客户端关于服务端的nfs端口号,客户端实现访问

2、nfs的特点

  • 使用tcp/ip传输网络文件(rpcbind的端口号是111,nfs的端口号不固定)
  • 比较适合局域网环境,内部操作
  • 安全性低

3、nfs软件学习

软件包:nfs-utils(包括服务器端和客户端)

相关软件包:rpcbind(必须)(centos7的rpcbind由systemd直接管理,不需要启动,会有叫醒服务,在centos7之前都需要先启rpcbind再启动nfs)

nfs端口号不固定 RPC端口号111(tcp和udp都是)

NFS服务主要进程:

  • rpc.nfsd 最主要的NFS进程,管理客户端是否可登录

  • rpc.mountd 挂载和卸载NFS文件系统,包括权限管理

  • rpc.lockd 非必要,管理文件锁,避免同时写出错

  • rpc.statd 非必要,检查文件一致性,可修复文件

日志:/var/lib/nfs/

4、共享配置文件的书写格式

/etc/exports

共享目录      共享给哪些主机(权限)
/dir           192.168.20.0/24(rw.....等)

举例:最简单的:/opt *
可获取的主机可以是一台,也可以是网段等

 关于权限,学习:

默认选项:(ro,sync,root_squash,no_all_squash)
ro,rw 只读和读写(如果允许客户端创建文件夹,写内容等,需要调为rw)

async 异步,数据变化后不立即写磁盘,先写入到缓冲区中,过一段时间再写入磁盘,性能高,安全性低
##但是异步的速度快,因为缓存在内存了

sync(1.0.0后为默认)同步  ##数据在请求时立即写入共享存储磁盘,性能低,安全性高

root_squash ##(默认)远程root映射为nfsnobody,UID为65534,CentOS8 为nobody,CentOS 
7以前的版本为nfsnobody

no_root_squash ##远程root映射成NFS服务器的root用户

all_squash 所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody

no_all_squash (默认)保留共享文件的UID和GID(这里注意是id号)

anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nobody,可配合all_squash使用

/data/nfs1        *(rw,all_squash,anonuid=1002,anongid=1002)

##以后在生产环境中,为了调优和统一化部署,建议映射为id号相同的用户

5、关于命令的学习:

服务端:

1、软件的配置文件不需要修改,需要修改共享配置文件:/etc/exports

2、修改完以后,先重启一下nfs服务,有两种方法:exportfs -r和systemctl  reload nfs

3、查看本机的共享配置文件信息:exportfs -v

客户端:

1、需要知道服务端是否开启了共享服务:showmount -e 服务端的ip

2、服务端需要挂载:

临时挂载:mount 服务端ip:/共享目录  挂载点

永久挂载:vim /etc/fstab;服务端ip:/共享目录   挂载点 nfs defaults,_netdev 0 0

注意:因为是通过网络共享,那么需要知道,万一服务器不在线,那么永久挂载的配置文件会在开机的时候加载,那么如果没有“_netdev”则开不了机。这个“_netdev”的意思是能够ping通才行,没ping通不生效

三、实验操作

1、nfs默认共享权限(服务端设置)

[root@localhost ~]#mkdir /data
[root@localhost ~]#vim /etc/exports

##exportfs -r和systemctl reload nfs用法一样
[root@localhost ~]#exportfs -r
exportfs: No options for /data 192.168.20.0/24: suggest 192.168.20.0/24(sync) to avoid warning
[root@localhost ~]#exportfs -v
/data         	192.168.20.0/24(ro,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)

2、客户端进行挂载 

[root@localhost ~]#systemctl start nfs

[root@localhost ~]#showmount -e 192.168.20.30

[root@localhost ~]#mkdir /nfsdir

##临时挂载
[root@localhost ~]#mount 192.168.20.30:/data /nfsdir/
[root@localhost ~]#df -hT

##永久挂载
[root@localhost ~]#vim /etc/fstab 
[root@localhost ~]#mount -a
[root@localhost ~]#df -hT

 

 3、客户端测试:

4、根据实验来学习权限配置

想要客户端有写的权限:

①修改共享配置文件,添加写的权限

②还需要修改文件夹,因为目前现在文件夹没有其他用户的写的权限

 

 

5、关于文件的属主

1、默认情况下,是root_squash,no_all_squash,即:root压榨为匿名用户,普通用户只是保留uid与名称无关

2、添加完rw权限以后,客户端可以写内容也可以删除内容

6、客户多台客户机使用nfs

7、比较常用的选项配置:

共享配置文件的常用选项
/data      *(rw,all_squash,anonuid=2000,anongid=2000)

测试结果 

建议在使用的时候,将所有主机的uid=2000的用户使用同一个人,这样比较方便 

拓展 

在这个使用的基础上,指定uid为2000的用户使用,这样更加安全!!

验证  在服务端和客户端只是认识uid为2000的用户,换个名字也是一样的 

 

 8、验证rpcbind是tcp和udp的111端口:

四、总结

1、服务端添加共享目录的写的权限的时候,需要注意给软件添加权限,然后还得给共享的目录添加权限,目录权限添加有两种办法:直接用chmod 777;或者使用setfacl 只给指定的用户或uid给rwx权限;

2、rpcbind用了tcp协议也用了udp协议,都是111端口,tcp用于建立可靠的客户端连接,udp用于管理注册信息nfs的端口号;

3、要知道如果系统默认是进行root压榨为nfsnobody和普通用户不压榨,但是是以uid记录,所有属主和属组都是看uid的,与用户名无关;

4、在生产环境中,建议使用全部压榨,调整为uid为统一的用户,使用setfacl限定,这样数据更安全

5、最后,nfs是一种nas存储方式,nfs本身就是一种网络文件系统,所以直接挂载就可以使用

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

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

相关文章

短视频账号矩阵系统源码/技术源码分享/技术搭建架构

短视频账号矩阵系统----技术源码分享/技术搭建架构 抖音seo又叫抖音搜索引擎,只要能做到布词,和过去的百度seo优化一样,布词,布关键词,当搜索栏搜索时可以搜索到该短视频。优化视频关键词,做好关键词的优化…

VSCode任务tasks.json中的问题匹配器problemMatcher和ProblemPattern的severity属性关系

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、引言 在 VS Code 中,tasks.json 文件中的 problemMatcher 字段用于定义如何解析任务输出中的问题(错误、警告等)。 ProblemMatcher的JSON对象和其下的子对象pattern…

Android 13.0 recovery出厂时清理中字体大小的修改

1.前言 在13.0的系统rom定制化开发中,在recovery模块也是系统中比较重要的模块,比如恢复出厂设置,recovery ota升级, 清理缓存等等,在一些1080p的设备,但是density只是240这样的设备,会在恢复出厂设置的时候,显示的字体有点小, 产品要求需要将正在清理的字体调大点,这…

【解刊】现投录用快!无版面费!CCF-B,2个月录用,2天见刊!

计算机类 • 好刊解读 今天小编带来Elsevier旗下计算机领域好刊的解读,如有相关领域作者有意向投稿,可作为重点关注!后文有真实发表案例,供您投稿参考~ 01 期刊简介 Computers & Security ☑️出版社:Elsevier …

JUNIT使用和注意、以及断言的介绍使用、SpringBoot Test测试类的使用、maven配置使用junit详细介绍

参考文章: https://www.cnblogs.com/zhukaile/p/14514238.html,https://blog.csdn.net/qq_36448800/article/details/126438339 一、什么是单元测试 在平时的开发当中,一个项目往往包含了大量的方法,可能有成千上万个。如何去保…

mysql---squid代理服务器

squid代理服务器 nginx也可以代理:反向代理--------负载均衡 squid:正向代理服务器。例:vpn squid :正向代理,缓存加速,acl过滤控制 代理的工作机制 1、代替客户端向网站请求数据,不需要访问代理的IP地址…

哈夫曼编码详细证明步骤

关于哈夫曼编码,想必大家都很清楚,这里来讲解一下他的详细证明方法。代码的话就不给了网上一大堆,我再给也没什么意思,这里主要讲明白正确性的证明。我将采取两种方法进行证明,一种常规的方法,还有一种采取…

5.以docker容器生成镜像推送到私有镜像仓库

1.创建私有仓库 1.1 拉取私有仓库镜像registry docker pull registry1.2 运行私有仓库镜像registry docker run -d -p 5001:5000 -v /data/myregistry/:/tmp/registry --privilegedtrue registry1.3 校验私有仓库registry是否安装成功 curl -XGET http://localhost:5001/v2…

Ubuntu环境下以编译源码的方式安装Vim

目录 1. Ubuntu环境 2. 下载编译vim 2.1 效果截图 3. 配置环境变量 1. Ubuntu环境 Linux chris-166 6.2.0-36-generic #37~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Oct 9 15:34:04 UTC 2 x86_64 x86_64 x86_64 GNU/Linux 2. 下载编译vim // 源码下载 chris_166chris-16…

Unity VR 开发教程 OpenXR+XR Interaction Toolkit (一) 安装和配置

文章目录 📕前言❓什么是 OpenXR❓什么是 XR Interaction Toolkit 📕教程说明📕第一步:导入 OpenXR📕第二步:导入 XR Interaction Toolkit⭐导入 Starter Assets⭐添加 Preset⭐设置 Preset Manager 的 Fil…

云ES高级监控告警

一、高级监控告警配置 1.1 操作入口 1.2 配置告警模块 1.2.1 新建联系人 添加联系人后,需要进行激活 1.2.2 新建联系人组 1.2.3 创建报警组 1.2.4 新建报警规则

城市网吧视频智能监控方案,实现视频远程集中监控

网吧环境较为复杂,电脑设备众多且人员流动性大,极易发生人员或消防事故,亟需改变,TSINGSEE青犀AI智能网吧视频监管方案可以帮助实现对网吧环境和用户活动的实时监控和管理。 1、视频监控系统 在网吧内部布置高清摄像头&#xff0…

操作系统OS/进程与线程/线程

进程和线程 进程 进程实体(进程映像)由PCB、程序段和数据段组成,其中PCB是进程存在的唯一标志。 线程 线程最直接的理解就是“轻量级进程”,它是一个基本的CPU执行单元,包含CPU现场(状态),也是程序执行…

【Linux系统化学习】探索进程的奥秘 | 第一个系统调用

个人主页点击直达:小白不是程序媛 Linux系列专栏:系统化学习Linux 目录 进程的概念 进程的管理 描述进程——pcb 组织进程 进程在排队 Linux下的进程 Linux组织进程 查看进程 查看可执行程序的进程 第一个系统调用 "杀掉进程" 进程…

一些有趣的迹象:“前端已死”难道要成真了?

移动互联网的兴起,传统行业的数字化转型,大前端技术的普及,随之而来的就是Vue为代表的前端框架和工具的兴起,前端开发的门槛降低。但发展,稳定,衰落是亘古不变的事物发展规律。 一些有趣的迹象 最近逛社区…

Linux发展史与环境安装

Linux发展史与环境安装 一、Linux发展史推动技术进步的基本模式理解操作系统的发展理解Linux操作系统的发展 一、Linux的环境安装 一、Linux发展史 Linux和window XX其实都是一样的,定位:操作系统,企业内部,要给用户提供“互联网…

C语言指针强制的本质

今天看到这样一段项目代码,某个函数传入了一个void类型的指针,并在函数内部将其强转为了某结构体类型指针,利用该指针获取结构体中变量之后,又将指针转换为char类型并偏移结构体大小的长度获取数据。代码如下 void recv_omu_data(…

为什么esp8266刷入了固件,无法接受AT指令

我遇到的解决方法是:是串口调试助手出了问题。所以需要更换一个串口调试助手软件。 上面这个就是我换了的软件 在开发的时候,经常会遇到软件故障,导致正确的方法,但是没有效果,好比以前用盗版的8.7版本的Proteus模拟…

Leetcode2760. 最长奇偶子数组

Every day a Leetcode 题目来源&#xff1a;2760. 最长奇偶子数组 解法1&#xff1a;模拟 代码&#xff1a; class Solution { public:int longestAlternatingSubarray(vector<int> &nums, int threshold){int n nums.size();int ans 0;for (int i 0; i <…

vue3基础学习(上)

##以前怎么玩的? ###MVC Model:Bean View:视图 Controller ##vue的ref reactive ref:必须是简单类型 reactive:必须不能是简单类型 ###创建一个Vue项目 npm init vuelatest ###生命周期 ###setup相关 ####Vue2的一些写法 -- options API ####Vue3的写法 组合式API Vu…