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

一个案例弄懂nfs

nfs示例要求

NFS 叫网络文件系统,是用于多个服务器进行文件共享或存储的,它是 C/S 架构。

  • 安装nfs-utils软件,在这个软件中包括服务端和客户端。
  • 创建共享目录
  • 将共享目录暴露给客户端使用

服务端

下载nfs-utils

[root@nfs-server ~]# dnf install nfs-utils -y
Updating Subscription Management repositories.
Unable to read consumer identityThis system is not registered with an entitlement server. You can use subscription-manager to register.Repository baseOS is listed more than once in the configuration
Last metadata expiration check: 0:12:40 ago on Thu 18 Sep 2025 04:06:45 PM CST.
Dependencies resolved.
====================================================================================Package                Architecture   Version                 Repository      Size
====================================================================================
Installing:nfs-utils              x86_64         1:2.5.4-20.el9          baseOS         458 k
Installing dependencies:gssproxy               x86_64         0.8.4-6.el9             baseOS         114 kkeyutils               x86_64         1.6.3-1.el9             baseOS          78 klibev                  x86_64         4.33-5.el9              baseOS          56 klibnfsidmap            x86_64         1:2.5.4-20.el9          baseOS          66 klibverto-libev         x86_64         0.3.2-3.el9             baseOS          15 kquota                  x86_64         1:4.06-6.el9            baseOS         202 kquota-nls              noarch         1:4.06-6.el9            baseOS          81 krpcbind                x86_64         1.2.6-5.el9             baseOS          62 ksssd-nfs-idmap         x86_64         2.9.1-2.el9             baseOS          45 kTransaction Summary
====================================================================================
Install  10 PackagesTotal size: 1.1 M
Installed size: 3.0 M
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transactionPreparing        :                                                            1/1 Installing       : libnfsidmap-1:2.5.4-20.el9.x86_64                         1/10 Running scriptlet: rpcbind-1.2.6-5.el9.x86_64                                2/10 Installing       : rpcbind-1.2.6-5.el9.x86_64                                2/10 Running scriptlet: rpcbind-1.2.6-5.el9.x86_64                                2/10 
Created symlink /etc/systemd/system/multi-user.target.wants/rpcbind.service → /usr/lib/systemd/system/rpcbind.service.
Created symlink /etc/systemd/system/sockets.target.wants/rpcbind.socket → /usr/lib/systemd/system/rpcbind.socket.Installing       : quota-nls-1:4.06-6.el9.noarch                             3/10 Installing       : quota-1:4.06-6.el9.x86_64                                 4/10 Installing       : libev-4.33-5.el9.x86_64                                   5/10 Installing       : libverto-libev-0.3.2-3.el9.x86_64                         6/10 Installing       : gssproxy-0.8.4-6.el9.x86_64                               7/10 Running scriptlet: gssproxy-0.8.4-6.el9.x86_64                               7/10 Installing       : keyutils-1.6.3-1.el9.x86_64                               8/10 Running scriptlet: nfs-utils-1:2.5.4-20.el9.x86_64                           9/10 Installing       : nfs-utils-1:2.5.4-20.el9.x86_64                           9/10 Running scriptlet: nfs-utils-1:2.5.4-20.el9.x86_64                           9/10 Installing       : sssd-nfs-idmap-2.9.1-2.el9.x86_64                        10/10 Running scriptlet: sssd-nfs-idmap-2.9.1-2.el9.x86_64                        10/10 Verifying        : gssproxy-0.8.4-6.el9.x86_64                               1/10 Verifying        : keyutils-1.6.3-1.el9.x86_64                               2/10 Verifying        : libev-4.33-5.el9.x86_64                                   3/10 Verifying        : libnfsidmap-1:2.5.4-20.el9.x86_64                         4/10 Verifying        : libverto-libev-0.3.2-3.el9.x86_64                         5/10 Verifying        : nfs-utils-1:2.5.4-20.el9.x86_64                           6/10 Verifying        : quota-1:4.06-6.el9.x86_64                                 7/10 Verifying        : quota-nls-1:4.06-6.el9.noarch                             8/10 Verifying        : rpcbind-1.2.6-5.el9.x86_64                                9/10 Verifying        : sssd-nfs-idmap-2.9.1-2.el9.x86_64                        10/10 
Installed products updated.Installed:gssproxy-0.8.4-6.el9.x86_64              keyutils-1.6.3-1.el9.x86_64             libev-4.33-5.el9.x86_64                  libnfsidmap-1:2.5.4-20.el9.x86_64       libverto-libev-0.3.2-3.el9.x86_64        nfs-utils-1:2.5.4-20.el9.x86_64         quota-1:4.06-6.el9.x86_64                quota-nls-1:4.06-6.el9.noarch           rpcbind-1.2.6-5.el9.x86_64               sssd-nfs-idmap-2.9.1-2.el9.x86_64       Complete!

创建共享目录

[root@nfs-server ~]# mkdir /nfs/data -p

配置暴露共享目录的文件**(/etc/exports)**

[root@nfs-server ~]# vim /etc/exports
/nfs/data	192.168.30.12(rw,sync)
#服务端共享目录	客户端ip

配置规则(说明)

  1. 在这个文件中每一行代表一个要暴露的共享目录信息

  2. 第一行的第一个字段就是要共享的目录,第二个字段是由客户端IP(权限)组成

  3. 在第二个字段中IP地址和小括号之间不能有空格,括号中也不能有空格

  4. 第二个字段可以出现多次,他们之间使用空格隔开

/nfs/data 192.168.72.135(rw,sync) 192.168.72.136(rw,sync)

  1. 在第二个字段中IP地址可以写成如下几种形式:
/nfs/data 192.168.72.135(rw,sync) # 只能192.168.72.135可以使用/nfs/data 192.168.72.0/24(rw,sync) # 只是192.168.72段的主机都可以使用/nfs/data *(rw,sync) # 表示所有主机都可以使用
  1. 所有权限都有默认值

  2. ro:只读,如果希望共享目录可以读写,那么就明确指定为(rw)

  3. sync:同步,如果希望指定异步方式,则需要明确指定(async)

  4. root_squash:指定操作共享目录的用户,默认使用的是 nobody 用户来操作。

启动服务

[root@nfs-server ~]# systemctl start nfs-server

检验:查看暴露的共享目录信息

[root@nfs-server ~]# showmount -e 192.168.30.10
Export list for 192.168.30.10:
/nfs/data 192.168.30.12

客户端

下载nfs-utils

#略

创建挂载点

[root@nfs-client ~]# mkdir /share/nfs -p

挂载服务端共享目录

[root@nfs-client ~]# mount -t nfs 192.168.30.10:/nfs/data /share/nfs
#可以发现一直不回应,卡起了

问题:挂载不起

可以发现一直不回应,卡起了

why???

首先我们了解一些输入这个指令后流程是什么

流程图

分析原因:

已知条件:服务端/客户端防火墙是默认的

1.是开启的

2.默认规则里面没有允许nfs相关服务

所以在客户端与服务器 rpcbind(端口111)的初次握手阶段就失败了。

当执行 mount -t nfs 192.168.30.10:/nfs/data /share/nfs 时,流程立即开始:

  • 客户端尝试连接服务器端口111(rpcbind服务)。

  • 由于服务器防火墙之前没有放行任何NFS相关服务,这个发往端口111的SYN包被服务器防火墙静默丢弃了(不是拒绝,是直接丢弃)。

  • 客户端一直在等待服务器的SYN-ACK响应包,但永远等不到。根据TCP协议,它会进行多次重试,等待超时时间非常长(通常是几分钟)。这就是命令“卡起” 的原因——它被困在TCP连接的第一次握手阶段。

解决方法:服务端开启nfs服务

一定要在服务器

[root@nfs-server ~]# firewall-cmd --permanent --add-service={nfs,mountd,rpc-bind}
success
[root@nfs-server ~]# firewall-cmd --reload
success

为什么加上规则后“马上”就好了?

分析原因:

其中 --add-service=rpc-bind 这条规则至关重要。它告诉防火墙:“允许访问端口111”。

  • rpc-bind 服务规则直接对应端口111。

  • nfs 服务规则对应端口2049。

  • mountd 服务规则对应一个动态端口(需要rpcbind来查询)。

规则生效后:

  1. 客户端再次发起挂载请求。

  2. 发往服务器端口111的SYN包这次被防火墙允许通过。

  3. 服务器的rpcbind服务收到请求并回复SYN-ACK。

  4. TCP连接迅速建立,后续的挂载流程(询问mountd端口、获取文件句柄等)得以继续,整个过程在几秒内完成。

流程对比图:

再挂载&验证

[root@nfs-client ~]# df -Th /share/nfs
Filesystem              Type  Size  Used Avail Use% Mounted on
192.168.30.10:/nfs/data nfs4   17G  1.5G   15G   9% /share/nfs
#成功

测试

服务端操作

#初始
[root@nfs-server ~]# cd /nfs/data
[root@nfs-server data]# ls
[root@nfs-server data]# [root@nfs-server ~]# cd /nfs/data
[root@nfs-server data]# ls
[root@nfs-server data]# #在服务端创建文件
[root@nfs-server data]# touch 1.dox
[root@nfs-server data]# 
#客户端
[root@nfs-client nfs]# ls
1.dox

客户端操作

[root@nfs-client nfs]# echo "hello" > 1.dox
-bash: 1.dox: Permission denied
#没有权限

问题:没有权限

办法:将服务端共享目录用户&用户组改为nobody

[root@nfs-server ~]# ll /nfs/data
total 0
-rw-r--r--. 1 root root 0 Sep 18 17:28 1.dox#现在是root[root@nfs-server ~]# chown -R nobody: /nfs/data
[root@nfs-server ~]# ll /nfs/data
total 0
-rw-r--r--. 1 nobody nobody 0 Sep 18 17:28 1.dox
[root@nfs-server ~]# ll -d /nfs/data
drwxr-xr-x. 2 nobody nobody 19 Sep 18 17:28 /nfs/data
#目录用户用户组都是nobody了

客户端重新操作

[root@nfs-client nfs]# echo "hello" > 1.dox
[root@nfs-client nfs]# cat 1.dox
hello#服务端查看
[root@nfs-server ~]# cat /nfs/data/1.dox
hello
#一致
http://www.dtcms.com/a/394523.html

相关文章:

  • 在飞牛NAS使用Lucky做动态解析到域名?
  • 多实例 MySQL 部署
  • 使用批处理脚本快速切换 Claude API 实现多平台环境配置
  • SkyDiffusion:用 BEV 视角打开街景→航拍图像合成新范式
  • 免费下载适用于 Windows PC 的 Pixologic Zbrush 2026
  • 10.eNSP下载及安装教程(2025年9月21日)
  • Qt 实战 之 打包部署
  • QT-文件
  • 2001-2022年全国地级市高铁开通数据
  • TenstoRT加速YOLOv11——C++端加速
  • 面试技巧第三篇:嵌入式操作系统基础考点:任务、调度和中断
  • 简单使用Vanna
  • 【面板数据】各省环境保护支出统计数据集(2007-2023年)
  • 无需格式转换!FileOptimizer将文件体积压至极致的软件
  • 【论文速递】2025年第17周(Apr-20-26)(Robotics/Embodied AI/LLM)
  • Spring Framework 入门:传统 XML 配置启动方式详解
  • 构建AI智能体:四十、K-Means++与RAG的融合创新:智能聚类与检索增强生成的深度应用
  • Python 中,判断元素是否存在于列表(list)和判断键是否存在于字典(dict)
  • 如何在 Windows 上恢复已删除/未保存的 PowerPoint 文件 - 4 种快速方法
  • 【含文档+PPT+源码】基于过滤协同算法的城市旅游网站的设计与实现
  • week 2
  • Core Animation基础
  • OpenVLC解析
  • 【AI论文】ScaleCUA:借助跨平台数据扩展开源计算机使用代理(系统/工具)规模
  • NW951NW916美光固态闪存NW926NW927
  • Python 如何优雅处理 100GB 数据集——实战案例
  • 快速学习Python(有其他语言基础)
  • 全网首发! Nvidia Jetson Thor 128GB DK 刷机与测评(六)常用功能测评 pi0、pi0.5 环境部署
  • git环境操作指南
  • 【C语言数据结构】题目解析:第1章课后习题