在 Ubuntu 中配置 NFS 共享服务的完整指南

前言

网络文件系统(NFS)作为 Linux 系统间实现文件共享的标准协议,在分布式计算和容器化部署场景中具有重要作用。本文将详细演示如何在 Ubuntu 系统上配置 NFS 服务端与客户端,并实现可靠的持久化挂载。


一、环境准备

系统要求
  • 服务端:Ubuntu 20.04+(IP:192.168.1.93)
  • 客户端:Ubuntu/Debian 系统(IP:192.168.1.81)
  • 网络配置:确保双向连通性,建议关闭防火墙或开放 2049 端口
架构示意图
共享 /opt 目录
NFS Server
Client 1
Client 2
Client N

二、服务端配置

1. 安装核心组件
sudo apt update
sudo apt install nfs-kernel-server -y
2. 配置共享目录

编辑配置文件:

sudo nano /etc/exports

添加以下内容(注意正确路径):

/opt/ 192.168.1.81(rw,sync,no_subtree_check)
/opt/ 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)

参数解析:

  • rw:读写权限
  • sync:同步写入
  • no_subtree_check:禁用子目录检查
  • no_root_squash:允许 root 用户访问
3. 应用配置
sudo exportfs -arv  # 动态加载配置
sudo systemctl enable --now nfs-server
systemctl status nfs-server  # 验证服务状态

三、客户端配置

1. 安装基础工具
sudo apt install nfs-common -y
2. 配置持久化挂载

编辑 fstab 文件:

sudo nano /etc/fstab

添加挂载条目:

192.168.1.93:/opt  /opt  nfs  defaults,_netdev  0  0

关键参数说明:

  • _netdev:等待网络就绪
  • 文件系统类型:nfs4 可显式声明使用 NFSv4
3. 安全增强措施
sudo chattr +i /etc/fstab  # 防止误修改

四、自动化挂载保障

1. 创建 systemd 服务
sudo nano /etc/systemd/system/check-opt-mount.service

服务配置内容:

[Unit]
Description=智能挂载保障服务
After=network-online.target
Requires=network-online.target[Service]
Type=oneshot
ExecStartPre=/bin/sleep 30  # 等待网络初始化
ExecStart=/opt/scripts/mount-validator.sh
TimeoutSec=300[Install]
WantedBy=multi-user.target
2. 验证脚本实现
#!/bin/bash
# mount-validator.shattempt=0
max_retries=5while [[ $attempt -lt $max_retries ]]; doif mountpoint -q /opt; thenecho "挂载验证成功"breakelseecho "尝试挂载 ($((attempt+1))/${max_retries})"mount -a && breaksleep $((attempt++ * 2))fi
done# 后续初始化操作
ldconfig
systemctl restart app-services

五、配置验证

服务端检查
showmount -e localhost  # 查看共享列表
netstat -tuln | grep 2049  # 确认端口监听
客户端验证
df -hT | grep nfs  # 查看挂载状态
touch /opt/testfile  # 测试写入权限

六、故障排查指南

常见问题处理
  1. 挂载失败:

    • 检查 rpcinfo -p server_ip
    • 验证客户端和服务端 NFS 版本兼容性
  2. 权限拒绝:

    • 检查 /etc/exports 的 IP 白名单
    • 确认客户端 UID/GID 与服务端匹配
  3. 服务启动异常:

    journalctl -u nfs-server --since "1 hour ago"
    

结语

通过本文的配置,您已成功搭建了支持高可用性的 NFS 文件共享服务。建议在生产环境中配合 SSH 隧道或 VPN 增强安全性。对于 Kubernetes 等容器平台,可结合 PV/PVC 实现动态存储供给。

延伸学习:

  • NFS 协议规范 RFC 7530
  • 性能调优:尝试启用 async 模式并配合 UPS 电源
  • 安全增强:配置 Kerberos 认证

通过合理的配置和验证流程,NFS 能够为企业级应用提供稳定高效的共享存储解决方案。

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

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

相关文章

TypeScript Symbols 深度解析:在 Vue3 中的高级应用实践

一、Symbols 核心特性解析 1.1 什么是 Symbol? Symbol 是 ES6 引入的原始数据类型,表示唯一且不可变的值,主要解决对象属性名冲突问题。在 TypeScript 中,我们通过 symbol 类型获得完整的类型支持: const SERIAL_KE…

无需刷机、root,畅享原生安卓的丝滑体验。

Apex Launcher 是一款历史悠久的 Android 桌面启动器,诞生于 Android 系统早期(Android 4.0 时代)。当时,Android 系统的默认界面被认为较为简陋,无法满足一些追求个性化和高效操作的用户需求。因此,许多开…

Visual Studio Code安装配置优化全攻略:打造高效开发环境

目录 一、背景与意义 二、安装与配置基础 2.1 下载与安装 2.2 核心配置目录 三、深度优化配置指南 3.1 主题与界面优化 3.2 必装效率插件(精选TOP10) 3.3 性能优化设置 四、实战案例:前端开发环境配置 4.1 项目初始化 4.2 调试配置…

味觉传送器E-Taste:开启虚拟世界的味觉之门

味觉传送器E-Taste:开启虚拟世界的味觉之门 一、发明背景与动机 随着虚拟现实(VR)和增强现实(AR)技术的飞速发展,人们在虚拟世界中的沉浸感不断提升,视觉和听觉体验已经取得了显著的突破。然而…

判断质数与合数

判断质数与合数的逻辑很相似,都是判断一个属除了1和它本身,能不能被其他数整除。 其他数包括质数与合数,合数能表示能质数的乘积,因此问题就转化为:一个数能不能被除了1和它本身之外的其他质数整除。 质数2&#xff…

在Spring Boot项目中接入DeepSeek深度求索,感觉笨笨的呢

文章目录 引言1. 什么是DeepSeek?2. 准备工作2.1 注册DeepSeek账号 3.实战演示3.1 application增加DS配置3.2 编写service3.3 编写controller3.4 编写前端界面chat.html3.5 测试 总结 引言 在当今快速发展的数据驱动时代,企业越来越重视数据的价值。为了…

Cursor在内网环境配置自定义DeepSeek API

关键字 Cursor、DeepSeek、API配置、内网代理、HTTP/2 背景环境 使用Cursor集成环境开发程序。但是我使用公司的内网并不能使用cursor自带的模型,于是我就想使用DeepSeek官方的API服务。 环境:Windows 11系统 解决过程 网络检测 首先进行环境检测&am…

RabbitMQ 集群降配

这里写自定义目录标题 摘要检查状态1. 检查 RabbitMQ 服务状态2. 检查 RabbitMQ 端口监听3. 检查 RabbitMQ 管理插件是否启用4. 检查开机自启状态5. 确认集群高可用性6. 检查使用该集群的服务是否做了断开重连 实操1. 负载均衡配置2. 逐个节点降配(滚动操作&#xf…

设计模式之外观模式:原理、实现与应用

引言 外观模式(Facade Pattern)是一种结构型设计模式,它通过提供一个统一的接口来简化复杂系统的使用。外观模式隐藏了系统的复杂性,使得客户端可以通过一个简单的接口与系统交互。本文将深入探讨外观模式的原理、实现方式以及实…

进行交通流预测,使用KAN+Transformer模型

理论基础 KAN(Knowledge Augmented Network) KAN 是一种知识增强网络,其核心思想是将先验知识融入到神经网络中,以此提升模型的性能与泛化能力。在交通流预测领域,先验知识可以是交通规则、历史交通模式等。通过把这…

TF中 Arg 节点

TF中 Arg 节点 在 TensorFlow 的计算图中,_Arg 节点(Argument Node)表示函数的输入参数,是计算图中负责接收外部输入数据的节点。它的名字来源于“Argument”(参数),直接对应函数调用时传入的张…

Educational Codeforces Round 176 (Rated for Div. 2)

A.To Zero 签到题 void solve() { int n,k;cin>>n>>k;int k2k/2*2;int k1(k2<k)?k:k-1;int cnt0;if(n%21){n-k1;cnt;cnt(n/k2)(n%k2!0);}else {cnt(n/k2)(n%k2!0);}cout<<cnt<<endl;}B.Array Recoloring 手推一下可以发现&#xff0c;答案其实就…

Kubernetes的Service详解

一、Service介绍 在 kubernetes 中&#xff0c; pod 是应用程序的载体&#xff0c;我们可以通过 pod 的 ip 来访问应用程序&#xff0c;但是 pod 的 ip 地址不是固定的&#xff0c;这也就意味着不方便直接采用pod 的 ip 对服务进行访问。 为了解决这个问题&#xff0c;kuberne…

基于Nvidia Jetson Nano边缘计算设备使用TensorRT部署YOLOv8模型实现目标检测推理

0、背景 最近拿到一台边缘计算设备&#xff0c;在部署YOLO模型的过程中遇到一些问题&#xff0c;特此记录。 设备介绍信息&#xff1a;NVIDIA Jetson Orin Nano T201Developer Kit 开发套件 开发者套件&#xff1a;Jetson Orin Nano T201 8GB开发套件 使用指南文档&#x…

让人感到疑惑的const

const 关键字在不同的编程语言中有着不同的含义和限制&#xff0c;但通常它被用来声明一个常量或只读变量。然而&#xff0c;在 JavaScript 中&#xff0c;const 的行为有时可能会让人感到困惑&#xff0c;因为它并不总是意味着“不可变”&#xff08;immutable&#xff09;。让…

Python 列表全面解析

关于Python列表的详细教程&#xff0c;涵盖增删改查、切片、列表推导式及核心方法 一、 列表基础 1.1 创建列表 列表是Python中最常用的数据结构之一&#xff0c;支持动态存储多种类型的元素。 # 空列表 empty_list []# 初始化列表 numbers [1, 2, 3, 4] fruits ["a…

【Ratis】ReferenceCountedObject接口的作用及参考意义

Apache Ratis的项目源码里,大量用到了自定义的ReferenceCountedObject接口。 本文就来学习一下这个接口的作用,并借鉴一下它解决的问题和实现原理。 功能与作用 ReferenceCountedObject 是一个接口,用于管理对象的引用计数。它的主要功能和作用包括: 引用计数管理: 提供…

leetcode-50.Pow(x,n)

快速计算次方的方法。 首先&#xff0c;先保证n是正数。 如果n<0&#xff0c;就让x取反&#xff0c;n取绝对值。 然后考虑怎么快速乘法。 考虑 x 7 x 1 2 4 x ∗ x 2 ∗ x 4 x^7x^{124}x*x^2*x^4 x7x124x∗x2∗x4&#xff0c;可以发现&#xff0c;本来乘6次x&#xff0…

基于javaweb的SpringBoot公司日常考勤系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

游戏引擎学习第167天

回顾和今天的计划 我们不使用引擎&#xff0c;也不依赖库&#xff0c;只有我们自己和我们的小手指在敲击代码。 今天我们会继续进行一些工作。首先&#xff0c;我们会清理昨天留下的一些问题&#xff0c;这些问题我们当时没有深入探讨。除了这些&#xff0c;我觉得我们在资产…