网络文件系统—NFS

news2024/11/15 8:28:56

目录

一、概述

二、NFS挂载原理

三、NFS相关协议及软件安装管理

1.协议:

2.软件:

四、NFS系统守护进程

五、NFS服务器的配置

六、NFS服务器的启动与停止

1. 启动NFS服务器

2.查询NFS服务器状态

3.停止NFS服务器

4.设置NFS服务器的自动启动状态

5.查看RPC服务器开启了哪些端口

七、实验相关实例

1.将NFS服务器的/home/zhangsan共享给192.168.115.0网段,rw权限

2.重启rpcbind 和nfs 服务

3.服务器端查看nfs共享状态

4.客户端查看nfs共享状态

5.客户端挂载nfs服务器共享目录

6.卸载和自动挂载

八、相关命令

九、实验

1.服务器端:将新增加的磁盘设置成lv逻辑卷

2.安装nfs服务

3.编辑nfs配置

4.打开客户端进行连接

5.服务器端调整权限

6.客户端测试创建删除

7.服务器修改目录共享范围

8.用户映射选项

9.nfs用户映射关系:

10.说明

a.查看本机的rpc端口 

b.客户端查看服务器允许挂载的用户IP 

c.客户端永久挂载格式如下

d.服务器禁止所有客户端挂载

 十、NFS v3和v4的区别

1.问题现象:

2.问题原因:

3.解决方案:


一、概述

       NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法

       它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录。NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中。在本地的NFS客户端的机器看来,NFS服务器端共享的目录就好像自己的磁盘分区和目录一样。一般客户端挂载到本地目录的名字可以随便,但为方便管理,我们要和服务器端一样比较好。

初级:单磁盘、单主机、存储管理方案

    分区、格式化、挂载

    逻辑卷、磁盘阵列、磁盘配额{对现有的存储空间进行使用约束}

中级:网络文件系统

    samba:cifs

    NFS:nfs

    解决单设备存储上限问题!

NFS一般用来存储共享视频,图片等静态数据。

二、NFS挂载原理

       NFS是通过网络来进行服务端和客户端之间的数据传输。两者之间要传输数据就要有想对应的网络端口来进行传输。NFS服务器到底使用什么网络端口来传输数据的,NFS服务器端其实是随机选择端口来进行数据传输。那NFS客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?其实NFS服务器时通过远程过程调用(remote procedure call 简称RPC)协议/服务来实现的。也就是说RPC服务会统一管理NFS的端口,客户端和服务端通过RPC来先沟通NFS使用了哪些端口,之后再利用注册端口来进行数据的传输。

       也就是RPC管理服务端的NFS端口分配,客户端要传数据,那客户端的RPC会先跟服务端的RPC去要服务器的端口,要到端口后再建立连接,然后传输数据。

RPC和NFS之间又是如何之间相互通讯的?

       首先当NFS启动后,就会随机的使用一些端口,然后NFS就会向RPC去注册这些端口。RPC就会记录下这些端口。并且RPC会开启111端口,等待客户端RPC的请求,如果客户端有请求,那服务端的RPC就会将记录的NFS端口信息告知客户端。

RPC和NFS的启动顺序是怎样的?

       在启动NFS SERVER之前,首先要启动RPC服务(即portmap服务,下同)否则NFS SERVER就无法向RPC服务区注册,另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。特别注意:一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行/etc/init.d/nfs  reload

总结:客户端NFS和服务端NFS通讯过程

1)首先服务器端启动RPC服务,并开启111端口

2)启动NFS服务,并向RPC注册端口信息

3)客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口

4)服务端的RPC(portmap)服务反馈NFS端口信息给客户端。

5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。

三、NFS相关协议及软件安装管理

1.协议:

        RPC(Remote Procedure Call Protocol)——远程过程调用协议

2.软件:

        nfs-utils-* :包括NFS命令与监控程序

        rpcbind-* :支持安全NFS RPC服务的连接

注:通常情况下,是作为系统的默认包安装的

CentOS 6.*之前rpcbind叫portmap

四、NFS系统守护进程

nfs:

        它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器

rpcbind:

        主要功能是进行端口映射工作。当客户端尝试连接并使用RPC服务器提供的服务(如NFS服务)时,rpcbind会将所管理的与服务对应的端口提供给客户端,从而使客户可以通过该端口向服务器请求服务。

五、NFS服务器的配置

       NFS服务器的配置相对比较简单,只需要在相应的配置文件中进行设置,然后启动NFS服务器即可。

       NFS服务的配置文件为 /etc/exports,这个文件是NFS的主要配置文件,不过系统并没有默认值,所以这个文件不一定会存在,可能要使用vim手动建立,然后在文件里面写入配置内容。

/etc/exports文件内容格式:

共享目录  客户端1(访问权限,用户映射,其他)  客户端2(访问权限,用户映射,其他)

a.共享目录:共享目录是指NFS服务器共享给客户机使用的目录

b.客户端:客户端是指网络中可以访问这个NFS共享目录的计算机

客户端常用的指定方式:

        指定ip地址的主机:192.168.0.200

        指定子网中的所有主机:192.168.88.0

        指定域名的主机:www.kernel.com

        指定域中的所有主机:*.kernel.com

        所有主机:*

c.设置共享目录的访问权限、用户映射等。

访问权限选项:

       设置输出目录只读:ro

       设置输出目录读写:rw

用户映射选项:

       root_squash:将root用户的访问映射为匿名(nfsnobody)用户uid和gid;(默认生效)

       no_root_squash:保留管理员权限,以服务器管理员的权限管理;

       all_squash:将远程访问的用户及所属组都映射为指定uid、gid的匿名用户;

                 anonuid=xxx:将远程访问的所有用户都映射为指定uid的匿名用户;

                 anongid=xxx:将远程访问的所有用户组都映射为指定gid匿名组账户;

其它选项:

        sync:   将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性(同步);

        async:将数据先保存在内存缓冲区中,必要时才写入磁盘(异步);

六、NFS服务器的启动与停止

1. 启动NFS服务器

#为了使NFS服务器能正常工作,需要启动rpcbind和nfs两个服务,并且rpcbind一定要先于nfs启动。
service rpcbind start

service nfs start

2.查询NFS服务器状态

service rpcbind status

service nfs status

3.停止NFS服务器

#要停止NFS运行时,需要先停止nfs服务再停止rpcbind服务,对于系统中有其他服务(如NIS)需要使用时,不需要停止rpcbind服务
service nfs stop

service rpcbind stop

4.设置NFS服务器的自动启动状态

#设置rpcbind和nfs服务在系统运行级别2345自动启动。
chkconfig --level 2345 rpcbind on

chkconfig --level 2345 nfs on

5.查看RPC服务器开启了哪些端口

rpcinfo –p localhost

七、实验相关实例

1.将NFS服务器的/home/zhangsan共享给192.168.115.0网段,rw权限

vi /etc/exports

/home/zhangsan 192.168.115.0(rw)

2.重启rpcbind 和nfs 服务

service rpcbind restart

service nfs restart

exportfs

3.服务器端查看nfs共享状态

#查看自己共享的服务
showmount -e 本机ip

4.客户端查看nfs共享状态

showmount -e NFS服务器IP

5.客户端挂载nfs服务器共享目录

#命令格式:mount NFS服务器IP:共享目录 本地挂载点目录
mount 192.168.115.10:/home/zhangsan/ /media/zhangsan/

mount | grep nfs

#指定挂载使用nfs V3版本(避免同步延迟)
mount -o vers=3 共享 本地

验证客户端和nfs服务器端文件是否一致: 

修改服务器端相应权限,不然客户端无法正常访问和使用

6.卸载和自动挂载

卸载:

1.卸载客户端的挂载目录
    umount 挂载点

2.停止服务器端的共享
    exportfs –au

自动挂载:/etc/fstab

#格式:<server>:</remote/export> </local/directory> nfs < options> 0 0

vim /etc/fstab

192.168.115.10:/home/zhangsan /media/zhangsan nfs defaults 0 0

#挂载
mount –a

八、相关命令

exportfs命令

    如果我们在启动了NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs 命令来使改动立刻生效,该命令格式如下:

exportfs [-aruv]

    -a    #全部挂载或卸载 /etc/exports中的内容

    -r    #重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab

    -u    #卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)

    -v    #在export的时候,将详细的信息输出到屏幕上。

具体例子:

#卸载所有共享目录
exportfs -au

#重新共享所有目录并输出详细信息
exportfs -ra

rpcinfo命令

利用rpcinfo -p 可以查看出RPC开启的端口所提供的程序有哪些

其中nfs 开启的是2049,portmapper(rpcbind) 开启的是111,其余则是rpc开启的

九、实验

实验准备:

两台虚拟机,一台服务器端,一台客户端。服务器端新加一块磁盘(防止根分区被写满)

1.服务器端:将新增加的磁盘设置成lv逻辑卷

#创建pv
pvcreate /dev/sdb

#创建vg
vgcreate nfs_vg /dev/sdb

#创建lv
lvcreate -L 15G -n nfs_lv nfs_vg

#格式化文件系统
mkfs.xfs /dev/nfs_vg/nfs_lv

#创建共享目录
mkdir /nfs_share

#永久挂载
vim /etc/fstab
/dev/nfs_vg/nfs_lv    /nfs_share    xfs    defaults    0    0

mount -a

2.安装nfs服务

yum search rpcbind

yum -y install rpcbind nfs-utils

systemctl start rpcbind && systemctl enable rpcbind

3.编辑nfs配置

vim /etc/exports
    #将/nfs_share目录共享给192.168.88.120,使其拥有读写权限
    /nfs_share	192.168.88.120(rw)

systemctl start nfs

4.打开客户端进行连接

#客户端创建nfs共享的挂载目录
mkdir /mnt/nfs_share

#如果客户端不识别nfs文件系统就进行安装。yum -y install nfs-utils
mount 192.168.88.110:/nfs_share /mnt/nfs_share && df -h

#验证是否有权限写入文件
cd /mnt/nfs_share && touch a.txt
#发现没有权限进行创建文件。

5.服务器端调整权限

#在服务器端给目录最大权限,是所有人都可以写,以此来查看客户端写入借用的身份
chmod 777 /nfs_share/

#客户端创建测试
touch a.txt		#创建成功

#查看客户端创建文件的所借用的身份
ll /nfs_share

#将权限改回正常值
chmod 755 /nfs_share

#给nfsnobody设置acl权限
setfacl -m u:nfsnobody:rwx /nfs_share/

6.客户端测试创建删除

#删除文件需要用户对文件所在目录拥有w写权限
rm -rf /mnt/nfs_share

touch a.txt

useradd zhangsan

setfacl -m u:zhangsan:rw a.txt

7.服务器修改目录共享范围

vim /etc/exports
    #如果要让多个客户端共享,IP之间用空格隔开,ro为只读的意思
    /nfs_share	192.168.88.120(rw) 192.168.88.130(ro)

8.用户映射选项

root_squash:将root用户的访问映射为匿名(nfsnobody)用户uid和gid;(默认生效)

no_root_squash保留管理员权限,以服务器管理员的权限管理;

all_squash将远程访问的用户及所属组都映射为指定uid、gid的匿名用户;

        anonuid=xxx:将远程访问的所有用户都映射为指定uid的匿名用户;

        anongid=xxx:将远程访问的所有用户组都映射为指定gid匿名组账户;

9.nfs用户映射关系:

选项:root_squash

     超级管理员:借用服务器端的nfsnobody用户的身份进行管理

     普通管理员:保留客户端自己的身份进行文件管理{前提:有权限}

选项:no_root_squash

     超级管理员:保留客户端root的身份,创建并管理文件

     普通管理员:保留客户端自己的身份进行文件管理{前提:有权限} 

选项:all_squash

     超级管理员:借用服务器端的nfsnobody用户的身份进行管理

     普通管理员:借用服务器端的nfsnobody用户的身份进行管理

选项:all_squash;anonuid=xxx;anongid=xxx

     超级管理员:借用服务器端的【指定用户】的身份进行管理

     普通管理员:借用服务器端的【指定用户】的身份进行管理

10.说明

a.查看本机的rpc端口 

rpcinfo -p localhost

b.客户端查看服务器允许挂载的用户IP 

showmount -e 192.168.88.110

c.客户端永久挂载格式如下

d.服务器禁止所有客户端挂载

如果服务器端单方面禁止客户端挂载,客户端则一直进行尝试连接,并且无法访问挂载目录。

#服务器禁止所有用户挂载
exportfs -au

#服务器恢复所有用户进行挂载
exportfs -ar

 十、NFS v3和v4的区别

1.问题现象:

    NFS客户端在使用v4版本挂载NFS服务器共享目录时,所创建的文件属于nobody用户

2.问题原因:

    NFS 在 v4 版本中修改了用户映射关系模式,通过调用NIS服务来完成用户映射,但NIS服务在未配置的情况下无法提供正常映射关系,所以出现了上述错误。

    #拓展:NIS(Network Information Service)网络信息服务

    #相关配置文件:/etc/idmapd.conf

3.解决方案:

服务器端:

    1.创建并编写配置文件

vim /etc/modprobe.d/nfs.conf
    #关闭掉RPC服务对rpc.idmapd模块的调用
    options nfs nfs4_disable_idmapping=1

    2.正常编辑NFS配置文件并重启

vim /etc/exports
    /nfs_share	192.168.88.120(rw)

#重启服务
service nfs restart

    3.手动关闭rpcidmapd服务

service rpcidmapd stop

客户端:

    正常挂载即可

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

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

相关文章

games103作业2(未完)

PBD方法 首先是每个质点的力的分析&#xff0c;不考虑碰撞和弹簧弹力的情况下&#xff0c;每个质点受重力的影响&#xff0c;所以需要对每个质点进行速度和位置的重力影响更新。 float t 0.0333f; float damping 0.99f; int[] E; float[] L; Vector3[] V; Vector3 gra…

【数学建模】——数学规划模型

目录 一、线性规划&#xff08;Linear Programming&#xff09; 1.1 线性规划的基本概念 1.2 线性规划的图解法 模型建立&#xff1a; 二、整数规划&#xff08;Integer Programming&#xff09; 2.1 整数规划的基本概念 2.2 整数规划的求解方法 三、非线性规划&#x…

<数据集>绝缘子缺陷检测数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;2139张 标注数量(xml文件个数)&#xff1a;2139 标注数量(txt文件个数)&#xff1a;2139 标注类别数&#xff1a;8 标注类别名称&#xff1a;[insulator, broken disc, pollution-flashover, Two glass, Glassdirt…

220V降压5ⅤIC-AH8652

220V降压至5V的IC - AH8652 在电子设计中&#xff0c;电压转换是一个常见的需求&#xff0c;尤其是在需要将高电压转换为低电压以供电给微电子设备时。AH8652是一款专为降压转换设计的集成电路&#xff0c;它能够将220V的交流输入电压转换为稳定的5V直流输出&#xff0c;非常适…

Camunda如何通过外部任务与其他系统自动交互

文章目录 简介流程图外部系统pom.xmllogback.xml监听类 启动流程实例常见问题Public Key Retrieval is not allowed的解决方法java.lang.reflect.InaccessibleObjectException 流程图xml 简介 前面我们已经介绍了Camunda的基本操作、任务、表&#xff1a; Camunda组件与服务与…

spring6之容器:IOC

容器&#xff1a;IOC 控制反转&#xff08;Ioc&#xff09; IoC容器在Spring的实现 Spring 的 IoC 容器就是 IoC思想的一个落地的产品实现。IoC容器中管理的组件也叫做 bean。在创建 bean 之前&#xff0c;首先需要创建IoC 容器。Spring 提供了IoC 容器的两种实现方式&#xf…

华为HCIP Datacom H12-821 卷39

1.填空题 请2001 :0DB8:0000:C030:0000: 000: 09A0:CDEF地址进行压缩。() (若答案中存在字母&#xff0c;请采用大写格式) 参考答案&#xff1a;2001 :DB8:0:C030: :9A0:CDEF 解析&#xff1a; IPv6地址的表示方法 IPv6地址总长度为128比特&#xff0c;通常分为8组&#xff0c…

防御综合实验作业2

办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP NAT策略&#xff1a; 安全策略&#xff1a; 测试&#xff1a; 分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器 是怎么转换的&#xff0c;首先分公司的用户需…

温度如何影响输入失调电压

目录 一、概念理解 二、仿真理解 一、概念理解 在手册中有这样一个参数&#xff1a;输入失调电压漂移&#xff08;input offset voltage drift / offset drift&#xff09; 以上图为例&#xff0c;这个参数理解为&#xff1a;常温下&#xff08;25℃&#xff09;每增减1摄氏度…

【STM32开发笔记】搭建VSCode+PyOCD的STM32开发环境

【STM32开发笔记】搭建VSCodePyOCD的STM32开发环境 一、安装软件1.1 安装STM32CubeMX1.2 安装VSCode1.3 安装Arm GNU Toolchain1.4 安装Make for Windows1.5 安装Python1.6 安装PyOCD 二、安装插件2.1 VSCode插件2.2 PyOCD支持包 三、创建项目3.1 创建STM32CubeMX项目3.2 查阅原…

PostgreSQL 中如何处理数据的并发读写和锁等待超时?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 PostgreSQL 中如何处理数据的并发读写和锁等待超时一、并发读写的基本概念&#xff08;一&#xff09;…

org/openxmlformats/schemas/spreadsheetml/x2006/main/CTWorkbook$Factory

org/openxmlformats/schemas/spreadsheetml/x2006/main/CTWorkbook$Factory POI的问题 在操作Excel时&#xff0c;出现这个问题是因为缺少了poi-ooxml-schema jar包&#xff0c;并且与poi的jar包版本一致

html02-标签继续学习

1.列表标签 1.1 列表标签的使用场景 场景&#xff1a;在网页中按照 行 展示关联性的内容&#xff0c;如&#xff1a;新闻列表、排行榜、账单等 特点&#xff1a;按照行的方式&#xff0c;整齐显示内容 种类&#xff1a;无序列表、有序列表、自定义列表 1.2无序列表 <!--…

LPRNet 车牌识别部署 rk3588(pt-onnx-rknn)包含各个步骤完整代码

虽然车牌识别技术很成熟了&#xff0c;但完全没有接触过。一直想搞一下、整一下、试一下、折腾一下&#xff0c;工作之余找了一个简单的例子入个门。本博客简单记录一下 LPRNet 车牌识别部署 rk3588流程&#xff0c;训练参考 LPRNet 官方代码。 1、导出onnx   导出onnx很容易…

短剧营销:品牌传播的新风口?

7月10日&#xff0c;麦当劳首部短剧《重生之我在麦当劳修炼魔法》&#xff0c;在微信视频号、小红书、抖音等平台上线。这部短剧以「短剧脱口秀」 的模式&#xff0c;将麦当劳的品牌形象与「土味霸总」 的网络热点相结合&#xff0c;上线一小时内&#xff0c;全平台播放量破千。…

Flutter实现局部刷新的几种方式

目录 前言 1.局部刷新的重要性 1.概念 2.重要性 2.局部刷新实现的几种方式 1.使用setState方法进行局部刷新 2.使用StatefulWidget和InheritedWidget局部刷新UI 3.ValueNotifier和ValueListenableBuilder 4.StreamBuilder 5.Provider 6.GetX 7.使用GlobalKey 前言 …

【PyQt】

PyQT5线程基础&#xff08;2&#xff09; 线程案例案例一案例二 线程案例 案例一 案例一代码通过线程实现点击按钮向线程传输地址&#xff0c;程序等待20秒后&#xff0c;返回结果。 通过QtDesigner创建如下图所示的界面ui&#xff0c;并用UIC工具转成对应的py文件。 Ui_tes…

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(十四)-无人机操控关键绩效指标(KPI)框架

引言 本文是3GPP TR 22.829 V17.1.0技术报告&#xff0c;专注于无人机&#xff08;UAV&#xff09;在3GPP系统中的增强支持。文章提出了多个无人机应用场景&#xff0c;分析了相应的能力要求&#xff0c;并建议了新的服务级别要求和关键性能指标&#xff08;KPIs&#xff09;。…

GEO数据挖掘从数据下载处理质控到差异分析全流程分析步骤指南

综合的教学视频介绍 GEO数据库挖掘分析作图全流程每晚11点在线教学直播录屏回放视频&#xff1a; https://www.bilibili.com/video/BV1rm42157CT/ GEO数据从下载到各种挖掘分析全流程详解&#xff1a; https://www.bilibili.com/video/BV1nm42157ii/ 一篇今年近期发表的转…

技术成神之路:设计模式(六)策略模式

1.介绍 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一系列算法&#xff0c;封装每一个算法&#xff0c;并使它们可以相互替换。策略模式使得算法的变化独立于使用算法的客户端。 2.主要作用 策略模式的主要作用是将算法或行为…