【NFS】NFS使用汇总

news2024/11/27 14:54:15

1. NFS介绍

NFS(Network File System),网络文件系统,它可以让不同主机能够通过 TCP/IP 网络共享资源。它从宏观主体上简化来看,就是两部分:服务端和客户端。

服务端,可以认为它就是来存东西的,这个东西对外是共享的。

客户端,可以认为它是访问服务端上的东西的,可以对服务端共享出来的东西进行读/写。当然读还是写,这些权限在服务端是可以控制的。

举个例子的话,可以想象一下仓库和员工,仓库可以认为是服务端,员工是客户端,员工只要有访问仓库的权限,那就可以看仓库有什么东西,从仓库拿东西或者往仓库放东西。

画个草图如下:

NFS

想弄得再明白一点,NFS具体是如何传输数据的?它是怎么把数据从服务端计算机A传送给客户端计算机B的?

网络传输的话,想起之前用python写过socket的demo,服务端绑定一个端口,并监听是否有客户端来连接;客户端那边通过端口向服务端发起连接;等连接建立之后,就可以发送数据了,实现计算机A和计算机B之间的数据传输。

NFS也可以类比,既然是网络传输,那就必然有传输端口,但是NFS有很多功能,每个功能都要启动端口传输数据,这些端口是随机的,那客户端那边就会疑惑到底要通过哪个端口连接服务端传输数据。于是引入了RPC。

RPC(Remote Procedure Call),远程过程调用,主要功能就是指定每个NFS功能所对应的端口,并返回给客户端,使客户端可以连接到正确的端口上。

下面画了一个简图,NFS服务端RPC和NFS服务端程序启动顺序,以及客户端是如何访问共享目录中的内容的。

在这里插入图片描述

2. NFS 安装

yum -y install nfs-utils

3. NFS配置

3.1 NFS服务端

配置文件有两个地方可以配置

3.1.1 配置文件/etc/exports

/storage/nfs_server *(fsid=0, rw,sync,all_squash)

3.1.2 配置文件/etc/exports.d/*.exports

在目录下/etc/exports.d目录下新建一个配置文件 {自己起名字}.exports

文件内容语法和 /etc/exports 写法一样的。

这两种方法可以同时配置。

3.1.3 配置文件参数

exports配置文件中的参数说明:

参数含义
fsid
ro该主机对该共享目录有只读权限
rw该主机对该共享目录有读写权限
sync资料同步写入到内存与硬盘中
async资料会先暂存于内存中,而非直接写入硬盘
all_squash

重点参数详解

3.1.3.1 fsid

文件系统都有id, 在NFS上伪文件系统的id称为fsid。

NFS的fsid可以不用填,通常如果文件系统有uuid的话,它会用文件系统的uuid作为fsid,或者文件系统存储在设备上的话,使用设备号作为fsid。(从官网资料【5.3】上翻译过来的,我理解这里指的是共享目录所在的文件系统或设备,也有可能不对,后面了解更多再修改补充。)

但不是所有的文件系统都存储在设备上,也不是所有的文件系统都有uuid,这个时候就需要手动明确fsid了。

针对NFS4,fsid=0有特殊含义

fsid=0 或 fsid=root, 表示共享的这个目录为根目录,啥意思?下方给个例子:

服务端的配置文件里,我设置了一个目录: /mnt/nfs,参数中加了fsid=0

在这里插入图片描述

在客户端如果我想挂载这个目录到/mnt/test,会怎么去挂载?一般会这样写:mount -t nfs4 {server_ip}:/mnt/nfs /mnt/test,这样写的执行效果如下,服务端传过来的报错是:没有/mnt/nfs这个目录,不死心又看了下服务端共享的目录,发现存在的,怎么挂不上呢?原因就在于服务端把/mnt/nfs这个目录的共享参数中加了fsid=0。

在这里插入图片描述

似乎知道fsid=0的效果是啥了,当做根目录,那挂载命令换成: mount -t nfs4 192.168.13.37:/ /mnt/test,执行效果如下,发现挂载上了,内容都可以访问到。【5.2】

在这里插入图片描述

验证一

如果我在配置文件里设置了两个目录,fsid都设置为root或0,客户端挂载根目录会有什么效果呢?

测试了下如果配置2个root,挂载也不会报错,哪个目录配置在前面,挂载的根目录就是哪个,如下图所示,客户端挂载根目录后,展示的是/mnt/nfs1下的内容。

在这里插入图片描述

验证二

这里我又有疑惑了,fsid不设置为0,假设共享两个目录/mnt/nfs和/mnt/nfs1,fsid我都设置为1,在客户端挂载会有什么效果呢?会不会和上面都设置为root效果一样呢?

在这里插入图片描述

于是我在客户端这边建了两个目录分别挂载试试:

客户端将服务端的/mnt/nfs挂载到本地 /mnt/test

mount -t nfs4 192.168.13.37:/mnt/nfs /mnt/test

挂载效果符合预期

在这里插入图片描述

客户端将服务端的/mnt/nfs1挂载到本地 /mnt/test1

mount -t nfs4 192.168.13.37:/mnt/nfs1 /mnt/test1

发现异常了,挂载不会报错,但是通过 df -h 查不到挂载目录/mnt/test1,查看/mnt/test1目录展示的又是服务端/mnt/nfs目录下的内容,这里明显不符合预期。效果看起来和验证一是一样的,配置文件中只有第一个目录/mnt/nfs是生效的。

在这里插入图片描述

通过这个验证可以得出一个结论:配置共享目录时,如果指定fsid,编号不能重复,否则生效的目录永远是靠前的目录。

3.1.4 使配置文件生效

exportfs -r

导出目录之后会在文件中 /var/lib/nfs/etab 中写入记录。

3.1.5 查看服务端共享出来的目录

showmount -e {服务端ip}

给个例子:

如下图所示: /etc/exports和/etc/exports.d/*.exports中配置的目录都共享出来了。

在这里插入图片描述

3.2 NFS客户端

挂载NFS服务端共享出来的目录

最简单直接的挂载

mount 192.168.xx.xx:/storage/nfs_server  /mnt/nfs

挂载的时候也能指定其他参数,例如:

mount -tnfs4 -o rw,nfsvers=4.1,sync,lookupcache=positive,hard,timeo=600,wsize=1048576,rsize=1048576,namlen=255 192.168.xx.xx:/storage/nfs_server  /mnt/nfs

参数说明:
pass

4. 常见问题

4.1 exportfs: /mnt/nfs1 requires fsid= for NFS export

在/etc/exports中的目录权限中添加fsid参数。

4.2 mount.nfs4: mounting 192.168.xx.xx:/storage/nfs_server failed, reason given by server: No such file or directory

修改服务端配置文件/etc/exports中的fsid,不要设置为0,可能是设置成根目录导致的。参考3.1.3.1 fsid章节。

5. 参考资料

5.1 man exportfs(exportfs命令中文手册) 骏马金龙

https://www.cnblogs.com/f-ck-need-u/p/7302589.html

5.2 The /etc/exports Configuration File

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/deployment_guide/s1-nfs-server-config-exports

5.3 exports(5) - Linux man page

https://linux.die.net/man/5/exports

5.4 NFS基本应用 骏马金龙 (大佬)

https://www.cnblogs.com/f-ck-need-u/p/7305755.html#auto_id_5

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

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

相关文章

jupyter 设置工作目录

本博客主要介绍: 如何为jupyter设置工作目录 1.打开 anaconda prompt , 执行 jupyter notebook --generate-config 执行这个命令后会生成一个配置文件 2. 打开jupyter_notebook_config.py文件编辑 搜索notebook_dir,把这行代码的注释取消,…

Pillow教程03:图像处理的基本步骤+分离split+合并merge+混合blend+composite遮罩

--------------Pillow教程集合--------------- Python项目18:使用Pillow模块,随机生成4位数的图片验证码 Python教程93:初识Pillow模块(创建Image对象查看属性图片的保存与缩放) Pillow教程02:图片的裁剪…

vue3使用富文本编辑器 Editor.js

一、安装 Editor.js npm i editorjs/editorjs --save 二、在页面中引入并使用 样式就不发了,自己按自己的来 三、转换语言,默认是英文 editor new EditorJS({holder: this.$refs.editor,// 自动聚焦autofocus: true,// 其他配置... tools: {},i18…

第十四届蓝桥杯第十题:蜗牛分享

问题描述 输入格式 输出格式 输出共一行,一个浮点数表示答案(四舍五入保留两位小数)。 样例输入 3 1 10 11 1 1 2 1样例输出 4.20样例说明 蜗牛路线:(0,0)→(1,0)→(1,1)→(10,1)→(10,0)→(11,0)(0,0)→(1,0)→(1,1)→(10,1…

浏览器工作原理与实践--栈空间和堆空间:数据是如何存储的

对于前端开发者来说,JavaScript的内存机制是一个不被经常提及的概念 ,因此很容易被忽视。特别是一些非计算机专业的同学,对内存机制可能没有非常清晰的认识,甚至有些同学根本就不知道JavaScript的内存机制是什么。 但是如果你想成…

【aws】架构图工具推荐

碎碎念 以前以为日本冰箱论是个梗,结果居然是真的。用光盘传真其实还能理解(毕竟我也喜欢电子古董2333),但是画架构图居然用的是excel+截图!啊苍天呐,然后看到隔壁工位用excel画web原型又感觉释…

【力扣】300. 最长递增子序列(DFS+DP两种方法实现)

目录 题目传送最长递增子序列[DFS 方法]DFS方法思路图思路简述代码大家可以自行考虑有没有优化的方法 最长递增子序列[DP]方法DP方法思路图思路简述代码方案 题目传送 原题目链接 最长递增子序列[DFS 方法] DFS方法思路图 思路简述 对于序列中的每一个数字只有选择和不选择两…

Echarts地图之——如何给地图添加外边框轮廓

有时候我们希望给地图外围加一圈边框来增加美感 但实际情况中,我们需要把国界的边框和各个省份属于国界的边框相吻合,否则就会造成两者看起来是错位的感觉 这就需要我们把echarts registerMap的全国省份json和国界边框json的坐标相一致。 这个json我们可…

Java项目实战笔记--基于SpringBoot3.0开发仿12306高并发售票系统--(二)项目实现-第五篇-核心功能车票预定开发及nacos集成

本文参考自 Springboot3微服务实战12306高性能售票系统 - 慕课网 (imooc.com) 本文是仿12306项目实战第(二)章——项目实现 的第五篇,本篇讲解该项目的核心功能——余票查询、车票预定功能的基础版开发,以及讲解项目与Nacos的集成…

图的基础和图的遍历(--蓝桥云)

图的基础概念 度数&#xff1a;出边入边的条数 有向边&#xff1a;有箭头 图的存储方式 //邻接表 List<int []> list[N] list<x>//存放x的所有出点的信息 list[i][j]{first,second}//其中first表示从i出发的某个出点的编号&#xff08;这个出点是i的第j个出点&…

【Entity Framework】EF中DbSet类详解

【Entity Framework】EF中DbSet类详解 文章目录 【Entity Framework】EF中DbSet类详解一、概述二、定义DbSet2.1 具有DbSet属性的DbContext2.2 具有 IDbSet 属性的 DbContext 2.3 具有 IDbSet 属性的 DbContext三、DbSet属性四、DbSet方法五、DbContext动态生成DbSet 一、概述 …

【JavaSE】java刷题--数组练习

前言 本篇讲解了一些数组相关题目&#xff08;主要以代码的形式呈现&#xff09;&#xff0c;主要目的在于巩固数组相关知识。 上一篇 数组 讲解了一维数组和二维数组的基础知识~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎…

JavaEE 初阶篇-深入了解多线程安全问题(出现线程不安全的原因与解决线程不安全的方法)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 多线程安全问题概述 1.1 线程不安全的实际例子 2.0 出现线程不安全的原因 2.1 线程在系统中是随机调度且抢占式执行的模式 2.2 多个线程同时修改同一个变量 2.3 线…

C++基础之虚函数(十七)

一.什么是多态 多态是在有继承关系的类中&#xff0c;调用同一个指令&#xff08;函数&#xff09;&#xff0c;不同对象会有不同行为。 二.什么是虚函数 概念&#xff1a;首先虚函数是存在于类的成员函数中&#xff0c;通过virtual关键字修饰的成员函数叫虚函数。 性质&am…

c语言:用do-while输出前40项的斐波那契数值

求Fibonacci数列的前40个元素。该数列的特点是第1、2两个数为1、1。从第3个数开始&#xff0c;每数是其前两个数之和。 分析&#xff1a;从题意可以用如下等式来表示斐波那契数列&#xff1a; 1&#xff0c; 1&#xff0c; 2&#xff0c; 3&#xff0c; 5&#xff0c; 8&#x…

如何确保实物档案的安全

确保实物档案的安全有以下几个关键点&#xff1a; 1. 建立完善的安全措施&#xff1a;为实物档案建立专门的存储区域&#xff0c;控制进出口&#xff0c;限制访问权限&#xff0c;并使用安全锁和监控设备等物理安保措施。 2. 规范档案管理制度&#xff1a;建立档案管理制度&…

深度学习入门简单实现一个神经网络

实现一个三层神经网络 引言测试数据 代码 引言 今天我们实现一个简单的神经网络 俩个输入神经元 隐藏层两个神经元 一个输出神经元 激活函数我们使用sigmoid 优化方法使用梯度下降 我们前期准备是需要把这些神经元的关系理清楚 x1&#xff1a;第一个输入 x2&#xff1a;第二个…

Android ImageView 的scaleType 属性图解

目录 前言测试素材测试布局xmlscaleType前言 一、ScaleType.FIT_CENTER 默认二、ScaleType.FIT_START三、ScaleType.FIT_END四、ScaleType.FIT_XY五、ScaleType.CENTER六、ScaleType.CENTER_CROP七、ScaleType.CENTER_INSIDE八、ScaleType.MATRIX 前言 原文链接&#xff1a; A…

接口自动化框架搭建(三):pytest库安装

1&#xff0c;使用命令行安装 前提条件&#xff1a;已安装python环境 pip install pytest 或者 pip3 install pytest2&#xff0c;从编译器pycharme中安装

STM32 | PWM脉冲宽度调制(第五天呼吸灯源码解析)

STM32 | PWM脉冲宽度调制(第五天)PWM 技术在以下其他机器学习领域和应用中也可以发挥作用: 自然语言处理 (NLP):调节文本生成模型(例如 GPT-3)的输出长度和多样性。 强化学习:控制代理在环境中采取行动的频率和持续时间。 时间序列预测:调节模型预测未来事件的时间间隔…