当前位置: 首页 > news >正文

linux下的nfs概述与实验(openEuler22.03)

目录

  • 什么是NFS
  • NFS工作原理
  • NFS常用文件
    • /etc/exports文件
      • /etc/exports格式
    • /var/lib/nfs/etab文件
  • NFS常用选项
  • NFS配置方式
    • 1. 安装NFS和RPC
    • 2. 启动rpcbind和nfs
    • 3. 准备目录
    • 4. 配置/etc/exports并重启服务
    • 5. 连接测试
      • 服务端自我测试
      • 客户端测试
  • 补充
    • 常用命令
    • 永久挂载
      • 注意
    • 什么是NFS用户映射
      • 修改默认的用户映射——实验
    • NFS安全优化

什么是NFS

NFS(Network File System,网络文件系统)是一种允许网络上的计算机之间共享文件系统的协议。通过NFS,用户和程序可以像访问本地存储一样访问远程服务器上的文件。NFS广泛应用于各种场景,例如在不同的服务器之间共享配置文件、共享数据存储等。


NFS工作原理

在这里插入图片描述
NFS 服务的实现依赖于 RPC (Remote Process Call,远端过程调用)机制,以完成远程到本地的映射过程。

在CentOS 6 以后,已经将RPC从原本的postmapper更名为rpcbind


NFS常用文件

/etc/exports文件

/etc/exports 文件是NFS服务器的核心配置文件,它用于定义哪些目录将被导出(即共享)以及导出的目录可以被哪些客户端访问,以及访问权限和选项。每一行都代表一个共享配置。
使用/etc/exports 文件,其实就是在systemctl启动nfs时,调用了exportsfs这个文件。

/etc/exports格式

假设我们有一个共享目录 /data,我们可以为不同的客户端设置不同的访问权限:

/shared 192.168.1.101(rw) 192.168.1.102(ro)
# shared 是本地要共享的目录。
# 192.168.1.101 和 192.168.1.102 是允许访问此共享目录的客户端IP地址。(也可以是网段、域名)
# rw 表示读写权限,ro 表示只读权限。

/var/lib/nfs/etab文件

实际上/etx/exports文件的选项特别多,但是我们最少仅需写共享目录 IP/网段(ro/rw)即可工作,这是因为,nfs有一个默认配置文件。
对于在/etc/exports中的共享目录权限设置,会自动映射到/var/lib/nfs/etab中,并补全默认配置。

假设对所有网段均可以访问/data目录

cat /etc/exports
/data *(rw)
cat /var/lib/nfs/etab
/data   *(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)

NFS常用选项

在上一部分,我们可以看到nfs的选项实际特别多,那么常用的选项及其解释如下:

rw:允许客户端读写访问共享目录。
ro:客户端只能读取共享目录。
sync:同步写操作,数据会在写入请求完成后立即写入到磁盘。
async:异步写操作,数据可能会被缓存在内存中,提高性能但可能在系统崩溃时导致数据丢失。
no_subtree_check:禁用子目录检查,可以提高性能。
subtree_check:启用子目录检查,确保NFS服务器只允许访问被导出的目录,而不是其子目录。
no_root_squash:保留根用户权限,客户端上的root用户在服务器上依然是root用户。
root_squash:将客户端上的root用户映射为匿名用户,默认选项,提高安全性。
all_squash:将所有客户端用户都映射为匿名用户。
anonuid 和 anongid:指定匿名用户的UID和GID。

NFS配置方式

部署:nfs-utils,rpcbind
准备环境:目录,权限
配置服务:/etc/exports
启动服务:rpc,nfs
服务端本地测试

1. 安装NFS和RPC

#检查是否安装
rpm -qa | grep nfs*
rpm -qa | grep rpc*#安装
yum install -y nfs-utils rpcbind

2. 启动rpcbind和nfs

systemctl enable rpcbind --now
rpcinfo -p #查看rpc注册信息program vers proto   port  service100000    4   tcp    111  portmapper100000    3   tcp    111  portmapper100000    2   tcp    111  portmapper100000    4   udp    111  portmapper100000    3   udp    111  portmapper100000    2   udp    111  portmapper100024    1   udp  45864  status100024    1   tcp  40741  statussystemctl enable nfs --now
rpcinfo -p  #开启nfs后可以查看到新的信息program vers proto   port  service
...100003    3   tcp   2049  nfs100003    4   tcp   2049  nfs100227    3   tcp   2049  nfs_acl100021    1   udp  42221  nlockmgr100021    3   udp  42221  nlockmgr100021    4   udp  42221  nlockmgr100021    1   tcp  46639  nlockmgr
...

3. 准备目录

mkdir -p /data
chown -R nobody.nobody /data
# nfs默认的用户是id为65534的用户
# 在centos7中这个用户叫做nfsnobody,在8版本之后,nfsnobody和nobody用户合并了

4. 配置/etc/exports并重启服务

#配置/etc/exports
echo "/data *(rw)" >> /etc/exports
cat /etc/exports
/data *(rw)
cat /var/lib/nfs/etab
/data   *(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)#重启服务
#reload-已连接nfs服务的用户端不会断开连接
#restart-已连接nfs服务的用户会被强制断开连接
systemctl reload nfs

5. 连接测试

服务端自我测试

mount -t nfs  10.0.0.124::/data/   /mnt/#查看挂载情况
df -h /mnt
Filesystem        Size  Used Avail Use% Mounted on
10.0.0.124:/data   40G  3.8G   37G  10% /mnt#查看nfs挂载情况
showmount -e
Export list for ecm:
/data *

客户端测试

#想使用nfs服务的客户端,同样需要安装nfs-utils
yum install -y nfs-utils
#不需要启动nfs服务#挂载方式如上<服务端测试>
mount -t nfs  10.0.0.124::/data/   /mnt/

补充

常用命令

rpcinfo -p 检查nfs服务端的rpc信息. 主要检查是否有NFS信息即可. showmount -e ip 检查nfs服务端共享信息(共享哪些目录)

永久挂载

  1. /etc/fstab
cat /etc/fstab
设备                 挂载点     文件系统类型   挂载参数   是否检查 是否备份
10.0.0.124:/data/   /upload/     nfs        defaults   0       0
  1. /etc/rc.d/rc.loacl
tail -1 /etc/rc.d/rc.local
mount -t nfs  10.0.0.124::/data/   /mnt/chmod +x /etc/rc.d/rc.local

注意

如果配置了永久挂载。若在nfs服务器之前启动客户端,因为无法连接到该nfs,客户端启动会卡住(大约90s)。
因此如果配置了永久挂载,nfs服务器需要提前启动。

什么是NFS用户映射

NFS客户端挂载NFS服务端后,创建的文件默认属于nobody,这种操作就叫用户压缩(映射)。

[root@ecm ~]# ll /mnt
total 0
-rw-r--r-- 1 nobody nobody 0 May 19 20:35 test1.txt

用户压缩是通过NFS服务端的配置实现。(所有常用选项见上文)

服务端配置选项-用户压缩系列说明
root_squash如果客户端是root用户访问,则到了nfs服务端会被压缩( 默认的 )
no_all_squash如果客户端不是root用户访问,则不进行压缩(保存原始用户, 默认的 )
all_squash所有用户都进行压缩(不是太安全)
anonuid 和 anongid用于指定压缩的匿名用户(默认是nobody用户)anonuid=65534,anongid=65534

用户压缩/用户映射: NFS客户端访问NFS共享目录的时候变成了什么用户
nfs客户端用户 -> nfs服务端用户
root -> noboby

默认情况下:

  • 所有的root用户的操作都会被映射为anonuid和anongid所指定的用户root_squash
  • 而其他用户则默认保留原始用户no_all_squash
  • 可以通过anonuid anongid 修改映射后的用户。

修改默认的用户映射——实验

设置/nfsdata共享目录,匿名用户为www. 客户端挂载到/upload-video/,www用户的uid,gid:1999 (服务端,客户端)

#创建用户
groupadd -g 1999 www
useradd  -u 1999 -g www  -s /sbin/nologin  -M www#添加目录映射
echo "/nfsdata *(rw,all_squash,anonuid=1999,anongid=1999)" >> /etc/exports#创建目录并重启服务
mkdir /nfsdata
chown -R www.www /nfsdata/ #不修改属主会导致创建命令时被拒绝
systemctl reload nfs#挂载测试
showmount -eExport list for ecm:/nfsdata */data    *
mount -t nfs 10.0.0.124:/nfsdata testnfswww
touch testnfswww/testa{1..5}.txt
ll testnfswww/total 0-rw-r--r-- 1 www www 0 May 20 13:05 testa1.txt

NFS安全优化

让客户端挂载只能上传不能执行

mount  -o noexec,nosuid,nodev  -t nfs 10.0.0.124:/data   /video/
#这几个是客户端挂载选项
# noexec 挂载的nfs目录中如果有命令,无法运行。
# nosuid 带有suid的命令
# nodev 带有特殊属性的文件。

相关文章:

linux下的nfs概述与实验(openEuler22.03)

目录 什么是NFSNFS工作原理NFS常用文件/etc/exports文件/etc/exports格式 /var/lib/nfs/etab文件 NFS常用选项NFS配置方式1. 安装NFS和RPC2. 启动rpcbind和nfs3. 准备目录4. 配置/etc/exports并重启服务5. 连接测试服务端自我测试客户端测试 补充常用命令永久挂载注意 什么是NF…...

影响Oracle数据库打开速度的因素

当Oracle发起一个事务需要更改数据时&#xff0c;如果所涉及的数据块不在BUFFER CACHE中&#xff0c;那么Oracle服务进程首先会将相关数据块从数据文件中读进BUFFER CACHE进行更改&#xff08;直接路径读除外&#xff09;&#xff0c;更改后的数据块称之为脏块&#xff08;DIRT…...

dify:开源 LLMOps平台。

单纯笔记&#xff1a; 一、关于 Dify dify/README_CN.md at main langgenius/dify GitHub Dify 是一款开源的大语言模型&#xff08;LLM&#xff09;应用开发平台。它融合了后端即服务&#xff08;Backend as Service&#xff09;和 LLMOps 的理念&#xff0c;使开发者可以…...

CCF20220601——归一化处理

CCF20220601——归一化处理 代码如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int n,a[1000],sum0;scanf("%d",&n);for(int i1;i<n;i){scanf("%d",&a[i]);suma[i];}double aver1.0,b0.0,d1.0;aversum/(n*1…...

用Ai编写一个电机驱动程序

问&#xff1a;帮我写一个步进电机的控制程序&#xff0c;要有包括加减速&#xff0c;以及电机步中断处理函数。 答&#xff1a;编写一个步进电机的控制程序涉及到硬件层面的操作&#xff0c;通常需要依赖特定的硬件平台和相应的驱动程序。以下是一个简化的示例&#xff0c;它展…...

【C++入门】—— C++入门 (下)_内联函数

前言&#xff1a;在了解完前面的C基础内容后&#xff0c;马上我们就要真正不如C的学习了&#xff0c;但在之前让我们最后了解最后一点点C入门知识&#xff01;来迟的520特别篇&#xff01; 本篇主要内容&#xff1a; 内联函数 auto关键字 范围for 指针空值nullptr C入门 1. 内联…...

Java数据结构与算法(最小栈)

前言 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。i…...

7 Series FPGAs Integrated Block for PCI Express IP核 Advanced模式配置详解(三)

1 TL Settings Transaction Layer (TL)设置只在Advanced模式下有效。 Endpoint: Unlock and PME_Turn_Off Messages: 与端点的电源管理相关&#xff0c;允许发送解锁和电源管理事件关闭消息。 Root Port: Error Messages: Error Correctable&#xff08;错误可纠正&#xff09…...

k8s 部署mqtt简介

在Kubernetes&#xff08;K8s&#xff09;中部署MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;服务通常涉及以下几个步骤&#xff1a; 选择MQTT Broker MQTT Broker是MQTT消息传递的中间件。流行的MQTT Broker包括Mosquitto, HiveMQ, EMQ X等。你需要选择一…...

汇凯金业:量化交易中常用的数学模型有哪些

量化交易中运用了多种数学模型来识别市场的潜在机会和建立交易策略。以下是一些在量化交易中常用的数学模型&#xff1a; 1. 时间序列分析模型 时间序列分析是研究和预测数据点随时间顺序变化趋势的方法。在量化交易中&#xff0c;常用的时间序列模型包括&#xff1a; 自回归&a…...

局部直方图均衡化去雾算法

目录 1. 引言 2. 算法流程 3. 代码 4. 去雾效果 1. 引言 局部直方图算法是一种基于块的图像去雾方法&#xff0c;它将图像分割为若干个块&#xff0c;并在每个块内计算块的局部直方图。通过对各个块的直方图进行分析和处理&#xff0c;该算法能够更好地适应图像中不同区域的…...

selenium环境安装和web自动化基础

webUI自动化背景 因为web页面经常会变化&#xff0c;所以UI自动化测试的维护成本很高。不如接口的适用面广&#xff0c;所以大部分公司会做接口自动化测试&#xff0c;但是未必会做UI自动化测试&#xff1b; UI自动化测试要做也是覆盖冒烟测试&#xff0c;不会到很高的覆盖率&a…...

【UE Websocket】“WebSocket Server”插件使用记录

1. 在商城中下载“WebSocket Server”插件 该插件具有如下节点&#xff0c;基本可以满足WebSocket服务端的所有需求 2. 如果想创建一个基本的服务端&#xff0c;我们可以新建一个actor蓝图&#xff0c;添加如下节点 3. UE运行后&#xff0c;我们可以使用在线的websocket测试助手…...

spring中依赖注入(DI)是什么?

好的&#xff0c;让我以尽可能通俗易懂的方式来解释什么是依赖注入&#xff08;DI&#xff0c;Dependency Injection&#xff09;。 假设你正在制作一款游戏&#xff0c;游戏中有个角色需要使用武器。在没有依赖注入的情况下&#xff0c;这个角色可能需要自己创建一个武器。这…...

paligemma、Grounding-DINO-1.5简单无需标注无需训练直接可以使用的VLM图像到文本模型

1、paligemma 参考:https://github.com/google-research/big_vision/blob/main/big_vision/configs/proj/paligemma/README.md 模型架构: 文本与图像特征一起送入大模型 在线体验网址: https://huggingface.co/spaces/big-vision/paligemma 通过文字prompt既可与图片对话…...

FreeRTOS学习——FreeRTOS队列(下)之队列创建

本篇文章记录我学习FreeRTOS队列创建的知识。主要分享队列创建需要使用的初始化函数、队列复位函数。 需要进一步了解FreeRTOS队列的相关知识&#xff0c;读者可以参考以下文章&#xff1a; FreeRTOS学习——FreeRTOS队列&#xff08;上&#xff09;_freertos 单元素队列-CSDN博…...

js实现鼠标拖拽多选功能

实现功能 在PC端的H5页面中&#xff0c;客户拖动鼠标可以连选多个选项 效果展示 具体代码如下 <!DOCTYPE html> <html><head><title>鼠标拖拽多选功能</title><script src"https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js&quo…...

postgres_exporter 监控pg坑一:备库无延迟但是监控告警备库延迟

1.问题背景 监控告警某套pg的两个备库延迟大于300s 2.pg备库延迟告警策略 通过postgres_exporter(version 0.13.2)监控生产pg&#xff0c;延迟告警策略如下&#xff1a; pg_replication_lag_seconds{instance!~"host_ip_18801"} > 300 and ON(instance) pg_re…...

vue打包部署到springboot,通过tomcat运行

tomcat默认端口 8080springboot端口 9132vue 端口 9131 框架 项目是基于SpringBootVue前后端分离的仓库管理系统 后端&#xff1a;SpringBoot MybatisPlus前端&#xff1a;Node.js Vue element-ui数据库&#xff1a;mysql 一. 打包Vue项目 cmd中输入命令 npm run build 后…...

如何有效防止数据丢失

在数字时代&#xff0c;数据成为了个人和企业最宝贵的资产之一。不幸的是&#xff0c;数据丢失的威胁无时无刻不在潜伏着&#xff0c;无论是由于技术故障、人为错误还是恶意攻击&#xff0c;都可能对我们的数据造成不可逆转的损失。因此&#xff0c;采取有效的预防措施至关重要…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

微服务通信安全:深入解析mTLS的原理与实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言&#xff1a;微服务时代的通信安全挑战 随着云原生和微服务架构的普及&#xff0c;服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...