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

使用 Linux 搭建并配置一个 NFS 服务器

目录

  • 1. 安装相关软件包
  • 2. 启动并启用相关服务
  • 3. NFS 配置文件
    • 3.1 /etc/exports 文件
    • 3.2 共享目录
    • 3.3 客户端列表
    • 3.4 参数选项
      • 3.4.1 访问权限选项
      • 3.4.2 数据写入硬盘模式
      • 3.4.3 root 用户权限
      • 3.4.4 子树检查
      • 3.4.5 匿名用户
      • 3.4.6 安全性(特权端口)
      • 3.4.7 网络传输
      • 3.4.x 更多 (More)
    • 3.5 基本示例
  • 4. 导出 NFS 共享
  • 5. 配置防火墙
  • 6. 客户端挂载 NFS 共享
  • 7. 自动挂载(可选)

系统环境:

  • Rocky Linux 9.3;适用于 Red Hat / Centos 等红帽系发行版;其他发行版需要查找对应的软件包。
  • NFS 软件包版本:nfs-utils-1:2.5.4-26.el9_4.x86_64

NFS:Network File System , 网络文件系统。

1. 安装相关软件包

首先,确保系统已经更新并安装了 NFS 所需的软件包:

sudo dnf update -y# 安装 nfs 软件包
# 如果是较新的版本中,也会自动安装 rpcbind
sudo dnf install nfs-utils -y

【注】在 NFSv4 中,不再需要 rpcbind,因为它使用了更简单的通信机制,不依赖于 RPC 服务的映射。但是如果需要兼容 NFSv2 或 NFSv3,则必须安装并运行 rpcbind。因为这两个版本的 NFS 依赖 rpcbind 来协商和管理通信。

sudo dnf install rpcbind -y

2. 启动并启用相关服务

安装完成后,启动 NFS 服务并将其设置为开机自启:

# 开机自启
sudo systemctl enable nfs-server# 启动 nfs 服务
sudo systemctl start nfs-server

如果安装了 rcpbind 也需要设置进行启动以及设置为开机自启:

# 开机自启
sudo systemctl enable rpcbind# 启动服务
sudo systemctl start rpcbind

3. NFS 配置文件

3.1 /etc/exports 文件

/etc/exports 是 NFS(Network File System)的配置文件,用于定义哪些目录要共享、共享给哪些客户端以及每个客户端的访问权限。

/etc/exports 文件的语法:

# 每一行都是一个配置
<共享目录> <客户端列表>(<选项>)# 每行进行配置多个客户端列表
<共享目录> <客户端列表>(<选项>) <客户端列表>(<选项>)
  • 共享目录:要共享的本地目录的绝对路径。
  • 客户端列表:指定可以访问该目录的客户端,支持 IP 地址、主机名或通配符。
  • 选项列表:定义客户端的访问权限和其他行为,放在括号中。

简单示例:

# 将 /home/shared 目录共享给 192.168.1.0/24 网络的所有主机,并且允许读写访问:
/home/shared 192.168.1.0/24(rw,sync,no_subtree_check)# 将 /var/nfs 目录共享给多个特定的客户端,并指定不同的访问权限
/var/nfs 192.168.1.10(ro,sync) 192.168.1.11(rw,sync,no_root_squash)

3.2 共享目录

指定本地要共享的目录的绝对路径,不能使用相对路径。

共享目录的权限一般为 755777,根据实际情况设置即可。

3.3 客户端列表

客户端可以用以下几种常用的方式表示:

  • 单个 IP 地址:如 192.168.1.10,只允许指定的客户端访问。
  • IP 地址范围(子网):如 192.168.1.0/24,允许特定网络范围内的所有客户端访问。
  • 主机名:如 client.example.com,允许指定主机访问(需要配置 DNS 或 /etc/hosts)。
  • 通配符:如 *,允许所有客户端访问(不推荐用于生产环境)。

客户端列表可以指定多个客户端,使用空格分隔。

3.4 参数选项

在括号内指定的选项用来配置共享的权限和行为。

参数选项挺多的,但是可以进行一下归纳,常用的参数主要分为下面几类:

3.4.1 访问权限选项

  • 默认为: ro
  • rw:读写权限,允许客户端对共享目录进行读和写操作。
  • ro:只读权限,客户端只能读取共享目录中的文件,无法修改。

3.4.2 数据写入硬盘模式

  • 默认值:sync
  • sync:同步写入;确保数据在写入时立即写入磁盘,保证数据一致性。
  • async:异步写入;数据会先暂存在内存中,然后再批量写入磁盘,可能提升性能但存在数据丢失风险。

3.4.3 root 用户权限

  • 默认值:root_squash
  • no_root_squash:允许 NFS 客户端以 root 身份访问共享目录。
  • root_squash:将客户端的 root 用户映射为 nobody (旧版本为:nfsnobody ),默认设置,增加安全性以防止权限提升。

3.4.4 子树检查

  • 默认值:subtree_check
  • no_subtree_check:禁用子树检查,当客户端访问共享目录中的文件(含目录)时,NFS 服务器不会检查该文件所属的子目录是否在导出的目录树中,只会检查顶级并不是其路径,只有顶级)共享目录的权限。
  • subtree_check:启用子树检查,当客户端请求访问共享目录中的文件(含目录)时,NFS 服务器会检查该文件是否属于实际被导出的子目录,并检查其路径上的所有权限。

3.4.5 匿名用户

  • 默认值:no_all_squash
  • all_squash:将所有客户端用户(不论是 root 还是普通用户)都映射为匿名用户 nobody (旧版本为:nfsnobody )。
  • no_all_squash:访问用户先与本机用户匹配,匹配失败后再映射为匿名用户 nobody (旧版本为:nfsnobody );
  • anonuid / anongid:分别指定匿名用户的 UID 和 GID,当使用 root_squash 或 all_squash 时使用。
# 示例
/home/shared 192.168.1.0/24(rw,all_squash,anonuid=1001,anongid=1001)

3.4.6 安全性(特权端口)

  • 默认值:secure

  • secure:仅允许客户端通过特权端口(0-1023)连接。

    默认情况下,只有当客户端使用特权端口时,NFS 服务器才允许访问。特权端口只能由 root 用户绑定,因此这个选项提供了额外的安全性。

  • insecure:允许客户端通过非特权端口(1024 以上)连接。

    启用该选项会使 NFS 服务器接受来自任何端口的连接,这样可以允许不使用特权端口的客户端(例如某些非标准 NFS 实现或特定的客户端设备)访问共享目录。

# 配置示例
/home/shared 192.168.1.0/24(rw,sync,insecure)

3.4.7 网络传输

  • 默认值:wdelay
  • wdelay:延迟写入;当 NFS 服务器在接收到多个写入请求时,会稍微延迟处理,以便合并多个请求为一次写操作,从而减少磁盘 I/O 操作次数。
  • no_wdelay:禁用延迟写入;当 NFS 服务器立即处理每个写入请求,而不等待更多的写操作。

3.4.x 更多 (More)

X 表示未知,哈哈哈!😆

除了上面的参数外,还有很多其他的参数,后续如果有比较重要的将不定时整理一下。

3.5 基本示例

下面是一个常用的配置,可根据实际需求去做调整。

编辑 /etc/exports 文件,定义需要共享的目录及权限。

sudo vim /etc/exports

在文件中添加共享目录及权限,例如:

/home/shared 192.168.1.0/24(rw,sync,no_root_squash,no_subtree_check)

参数说明:

  • /home/shared:要共享的目录路径。
  • 192.168.1.0/24:允许访问的客户端 IP 地址段。
  • rw:读写权限。
  • sync:数据同步写入。
  • no_root_squash:允许客户端以 root 身份访问(根据需求配置)。
  • no_subtree_check:提高性能,禁用子目录检查。

4. 导出 NFS 共享

编辑完 exports 文件后,导出 NFS 共享:

sudo exportfs -r

参数说明:

  • -r :重新导出所有已定义的共享目录,读取 /etc/exports 文件中的更改。

5. 配置防火墙

  • 为了让客户端能够访问 NFS 共享,需要开放相应的防火墙端口
  • 如果是内网或测试环境,可以选择关闭防火墙
sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --permanent --add-service=mountd
sudo firewall-cmd --permanent --add-service=rpc-bind
sudo firewall-cmd --reload

6. 客户端挂载 NFS 共享

这里的客户端挂载是最常用且简单的挂载,没有考虑太多 NFS 的稳定性;为了保障稳定性 NFS 还提供了很多配置参数,后续有时间单独出一篇文章来具体描述。


在客户端机器上,安装 nfs-utils,并使用以下命令挂载 NFS 共享:

sudo dnf install nfs-utils -y
sudo mount -t nfs <server_ip>:/home/shared /mnt/xxx

<server_ip> 替换为 NFS 服务器的 IP 地址,/mnt/xxx 为客户端的挂载目录。

7. 自动挂载(可选)

如果希望客户端在每次启动时自动挂载 NFS 共享,可以将其添加到 /etc/fstab 文件中:

<server_ip>:/home/shared  /mnt/xxx   nfs    defaults    0 0

这样,系统启动时会自动挂载 NFS 共享。

想了解更多 /etc/fstab 文件的配置,可参考文章:Linux 再入门整理:详解 /etc/fstab 文件。

相关文章:

使用 Linux 搭建并配置一个 NFS 服务器

目录 1. 安装相关软件包2. 启动并启用相关服务3. NFS 配置文件3.1 /etc/exports 文件3.2 共享目录3.3 客户端列表3.4 参数选项3.4.1 访问权限选项3.4.2 数据写入硬盘模式3.4.3 root 用户权限3.4.4 子树检查3.4.5 匿名用户3.4.6 安全性(特权端口)3.4.7 网络传输3.4.x 更多 (More…...

python发包

Python 中我们经常会用到第三方的包&#xff0c;默认情况下&#xff0c;用到的第三方工具包基本都是从 Pypi.org 里面下载。这些第三方的包都是开发者们发布的自己的库。我们有自己的想法&#xff0c;或者有一些常用的方法想要分享出去&#xff0c;就可以发布自己的库&#xff…...

农行1面:说说 final,finally,finalize的区别

你好&#xff0c;我是猿java。 在 Java中&#xff0c;“final”、“finally”和“finalize”是三个不同的关键字或方法&#xff0c;尽管它们的名字相似&#xff0c;但在功能和用途上却有显著的区别&#xff0c;这篇文章我们继续分析一篇农行1面的题目&#xff1a;说说 final&a…...

ChatGPT实时语音将于本周向免费用户推出:OpenAI DevDay 2024详细解读

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…...

一个月学会Java 第7天 字符串与键盘输入

Day7 字符串与键盘输入 字符串作为所有程序都很重要的东西&#xff0c;这个东西必须好好的学习&#xff0c;在Java中String会比较好学习&#xff0c;比起C和C里面会更加的简单&#xff0c; 在Java之中也是很好理解的&#xff0c;因为底层已经封装好了char数组&#xff0c;也就是…...

Java后端面试题(day16)

目录 java常见的引用类型java中深拷贝和浅拷贝如何设计一个秒杀系统?谈一下对高并发的理解&#xff0c;平时怎么处理高并发问题?Comparable和Comparator区别&#xff1f;解决hash冲突有哪些方法&#xff1f;Synchronized锁的升级过程 java常见的引用类型 java的引用类型一般分…...

Auto-Animate:是一款零配置、即插即用的动画工具,可以为您的 Web 应用添加流畅的过渡效果

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 用户体验成为了检验产品成功与否的关键因素。而动画效果&#xff0c;作为提升用户体验的重要手段&#xff0c;在网页和应用开发中扮演着举足轻重的角色…...

k8s之ingress-nginx-controller安装

作者&#xff1a;程序那点事儿 日期&#xff1a;2024/01/30 01:25 要在master节点上安装 helm repo add ingress-nginx Welcome - Ingress-Nginx Controller helm search repo ingress-nginx helm pull ingress-nginx/ingress-nginx --version 4.4.2 mv ingress-nginx-4.4.…...

力扣SQL仅数据库(1098~1132)

1098 小众书籍 需求 编写解决方案&#xff0c;筛选出过去一年中订单总量 少于 10 本 的 书籍&#xff0c;并且 不考虑 上架距今销售 不满一个月 的书籍 。假设今天是 2019-06-23 。 返回结果表 无顺序要求 。 数据准备 Create table If Not Exists Books (book_id int, nam…...

优惠点餐api接口对接的具体步骤是什么?

优惠点餐API接口对接的具体步骤通常包括以下几个阶段&#xff1a; 需求分析&#xff1a;明确对接的目标和需求&#xff0c;例如实现在线点餐、订单管理、支付集成等 。选择API服务提供商&#xff1a;根据业务需求选择合适的点餐API服务提供商 。注册和获取API密钥&#xff1a;…...

【韩顺平Java笔记】第8章:面向对象编程(中级部分)【297-313】

文章目录 297. super基本语法297.1 基本介绍297.2 基本语法 298. super使用细节1299. super使用细节2300. super使用细节3301. 方法重写介绍302. 方法重写细节303. 重写课堂练习1304. 重写课堂练习2输出结果&#xff1a; 姓名&#xff1a;田所浩二 年龄:24305. 养宠物引出多态3…...

快递批量查询物流追踪只揽收无物流信息的单号

在电子商务和物流领域&#xff0c;快递单号的追踪是确保货物顺利送达的关键环节。然而&#xff0c;在实际操作中&#xff0c;经常会遇到一些只显示揽收信息而没有后续物流更新的单号&#xff0c;这给商家和买家都带来了不小的困扰。本文将介绍如何通过快递批量查询物流的方法&a…...

【动态网站资源保存下载】

文章目录 概要解决思路技术细节小结 概要 我们在网上浏览网站时&#xff0c;经常有这样的需求&#xff1a;将浏览的网页保存下来&#xff0c;即使无网的情况下也可以继续浏览。比如一些教育类网站的PPT&#xff0c;内容为HTML格式的&#xff0c;无法作为PPT格式下载下来&#…...

Selenium自动化测试中如何处理数据驱动?

在自动化测试中&#xff0c;数据驱动&#xff08;Data-Driven Testing&#xff09;是指通过外部数据源&#xff08;如Excel、CSV、数据库等&#xff09;来控制测试用例的执行&#xff0c;而不是直接在代码中硬编码数据。这种方式可以提高测试的灵活性和可维护性&#xff0c;使得…...

淘宝API接口系列有哪些内容?

淘宝API&#xff08;Application Programming Interface&#xff09;接口系列是一套允许开发者与淘宝平台进行数据交互的接口集合&#xff0c;涵盖了商品信息、订单信息、物流信息、用户信息以及营销等多个方面的数据接口。以下是对淘宝API接口系列内容的详细归纳&#xff1a; …...

华为OD机试 - 冠亚军排名(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…...

VmWare中安装CenterOs(内网服务器)

VmWare中安装CenterOs(内网服务器) 文章目录 VmWare中安装CenterOs(内网服务器)[toc] 一 、CentOS 7的下载与安装1、下载2、安装&#xff08;1&#xff09;前期准备&#xff08;2&#xff09;正式安装 开始等待&#xff01;&#xff01;&#xff01; 二、软件仓库更换1、root用…...

JS 数组去重 — 各类场景适合方法大全

JS 数组去重 — 各类场景适合方法大全 本文介绍各种场景 JS 去重 方法使用 性能最好、用的最多、场景大全 文章目录 JS 数组去重 — 各类场景适合方法大全 一、基础篇&#xff1a;简单直观的去重方法1. 使用Set数据结构2. 利用filter和indexOf方法3. reduce方法的应用 二、进阶…...

【Java 问题】集合——List

List 1.说说有哪些常见集合&#xff1f;2.ArrayList和LinkedList有什么区别&#xff1f;3.ArrayList的扩容机制了解吗&#xff1f;4.ArrayList怎么序列化的知道吗&#xff1f; 为什么用transient修饰数组&#xff1f;5.快速失败(fail-fast)和安全失败(fail-safe)了解吗&#xf…...

xss 跨站脚本攻击

XSS 的全称是 Cross-Site Scripting&#xff08;跨站脚本攻击&#xff09;。是一种常见的web安全漏洞。 1. XSS 的定义 XSS 是一种注入类型的攻击&#xff0c;攻击者将恶意脚本注入到受信任的网站中。当其他用户访问该网站时&#xff0c;这些脚本会在用户的浏览器中执行。 2…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...