在 Ubuntu 中配置 NFS 共享服务的完整指南
前言
网络文件系统(NFS)作为 Linux 系统间实现文件共享的标准协议,在分布式计算和容器化部署场景中具有重要作用。本文将详细演示如何在 Ubuntu 系统上配置 NFS 服务端与客户端,并实现可靠的持久化挂载。
一、环境准备
系统要求
- 服务端:Ubuntu 20.04+(IP:192.168.1.93)
- 客户端:Ubuntu/Debian 系统(IP:192.168.1.81)
- 网络配置:确保双向连通性,建议关闭防火墙或开放 2049 端口
架构示意图
二、服务端配置
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 # 测试写入权限
六、故障排查指南
常见问题处理
-
挂载失败:
- 检查
rpcinfo -p server_ip - 验证客户端和服务端 NFS 版本兼容性
- 检查
-
权限拒绝:
- 检查
/etc/exports的 IP 白名单 - 确认客户端 UID/GID 与服务端匹配
- 检查
-
服务启动异常:
journalctl -u nfs-server --since "1 hour ago"
结语
通过本文的配置,您已成功搭建了支持高可用性的 NFS 文件共享服务。建议在生产环境中配合 SSH 隧道或 VPN 增强安全性。对于 Kubernetes 等容器平台,可结合 PV/PVC 实现动态存储供给。
延伸学习:
- NFS 协议规范 RFC 7530
- 性能调优:尝试启用 async 模式并配合 UPS 电源
- 安全增强:配置 Kerberos 认证
通过合理的配置和验证流程,NFS 能够为企业级应用提供稳定高效的共享存储解决方案。
相关文章:
在 Ubuntu 中配置 NFS 共享服务的完整指南
前言 网络文件系统(NFS)作为 Linux 系统间实现文件共享的标准协议,在分布式计算和容器化部署场景中具有重要作用。本文将详细演示如何在 Ubuntu 系统上配置 NFS 服务端与客户端,并实现可靠的持久化挂载。 一、环境准备 系统要求…...
Secs/Gem第二讲 (基于secs4net项目的ChatGpt介绍)
好的,我们正式进入: 第二讲:深入 SECS4NET 项目结构——主机程序是怎么搭起来的? 关键词:项目结构、类图、通信类、事件处理、连接生命周期、异步机制 本讲目的 我们从源码入手,一步步搞懂: S…...
LeetCode[42] 接雨水
动态规划 left_max[i] height[i]左侧的最高高度right_max[i] height[i]右侧的最高高度height[i]能接多少水?min(left_max[i], right_max[i])-height[i] class Solution { public:int trap(vector<int>& height) {int len height.size();vector<in…...
STC89C52单片机学习——第25节: [11-1]蜂鸣器
写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.03.18 51单片机学习——第25节: [11-1]蜂鸣器 前言开发板说明引用解答和科普一、蜂鸣器…...
音视频入门基础:RTP专题(19)——FFmpeg源码中,获取RTP的音频信息的实现(下)
本文接着《音视频入门基础:RTP专题(18)——FFmpeg源码中,获取RTP的音频信息的实现(上)》,继续讲解FFmpeg获取SDP描述的RTP流的音频信息到底是从哪个地方获取的。本文的一级标题从“四”开始。 四…...
搭建Python量化开发环境:从零开始的完整指南
搭建Python量化开发环境:从零开始的完整指南 在量化投资领域,一个稳定且高效的开发环境是成功的关键。本文将引导你一步步搭建起自己的Python量化开发环境,确保你能够顺利开始编写和运行量化策略。 🚀量化软件开通 Ὠ…...
卷积神经网络 - 卷积的变种、数学性质
本文我们来学习卷积的变种和相关的数学性质,为后面学习卷积神经网络做准备,有些概念可能不好理解,可以先了解其概念,然后慢慢理解、逐步深入。 在卷积的标准定义基础上,还可以引入卷积核的滑动步长和零填充来增加卷积…...
BLIP论文阅读
目录 现存的视觉语言预训练存在两个不足: 任务领域 数据集领域 相关研究 知识蒸馏 Method 单模态编码器: 基于图像的文本编码器: 基于图像的文本解码器: 三重目标优化 图像文本对比损失:让匹配的图像文本更加…...
Opencv之计算机视觉一
一、环境准备 使用opencv库来实现简单的计算机视觉。 需要安装两个库:opencv-python和opencv-contrib-python,版本可以自行选择,注意不同版本的opencv中的某些函数名和用法可能不同 pip install opencv-python3.4.18.65 -i https://pypi.t…...
批量测试IP和域名联通性2
在前面批量测试IP和域名联通性-CSDN博客的基础上,由于IP和域名多样性,比如带端口号的192.168.1.17:17,实际上应该ping 192.168.1.17。如果封禁http://www.abc.com/a.exe,实际可ping www.abc.com。所以又完善了代码。 echo off se…...
[动手学习深度学习]26. 网络中的网络 NiN
前面的LeNet、AlexNet、VGG在设计上的共同之处在于:先以卷积层构成的模块充分抽取空间特征,再以全连接层构成的模块来输出分类结果 其中AlexNet和VGG对LeNet的改进主要在于如何对这两个模块价款(增加通道数)和加深 这一节的NiN提出…...
C语言论递归函数及其本质
一个函数在函数体内又调用了本身,我们称为递归调用,这样的函数就是递归函数。 递归函数成功执行需满足以下两个条件: 必须有一个明显的结束条件。必须有一个趋近于结束条件的趋势。 举个生活例子:数钱 假设你有一叠钞票…...
碰一碰发视频saas系统技术源头一站式开发文档
碰一碰发视频系统技术源头一站式开发文档 一、引言 在数字化信息传播高速发展的当下,如何让视频分享更便捷、高效,成为商家和开发者们关注的焦点。“碰一碰发视频”系统以其独特的交互方式和强大的功能优势,为视频分享领域带来了革命性变革。…...
Linux目录理解
前言 最近在复习linux,发现有些目录总是忘记内容,发现有些还是得从原义和实际例子去理解会记忆深刻些。以下是个人的一些理解 Linux目录 常见的Linux下的目录如下: 1. 根目录 / (Root Directory) 英文含义:/ 是文件系统的根…...
可视化图解算法:链表中倒数(最后)k个结点
1. 题目 描述 输入一个长度为 n 的链表,设链表中的元素的值为ai ,返回该链表中倒数第k个节点。 如果该链表长度小于k,请返回一个长度为 0 的链表。 数据范围:0≤n≤105,0 ≤ai≤109,0 ≤k≤109 要求&am…...
Swift 并发中的任务让步(Yielding)和防抖(Debouncing)
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
@SpringBootApplication
SpringBootApplication拓展 一. SpringBootConfiguration注解 是SpringBoot的注解, 标识一个类为配置类, 与Configration功能一致 run方法初始化了SpringBootConfiguration注解 注解源码 Target(ElementType.TYPE)//类型 Retention(RetentionPolicy.RUNTIME)//生命周期 Docu…...
什么是状态管理?有何种方式可以实现?它们之间有什么区别?
目录 一、状态管理的核心概念 二、常见状态管理方案及对比 1. 基础方案:setState 2. 官方推荐:Provider 3. 事件驱动:Bloc (Business Logic Component) 4. 响应式增强:Riverpod 5. 轻量级全能库:GetX 三、方案对比与选型指南 四、实战建议 在 Flutter 中,状态管…...
HW基本的sql流量分析和wireshark 的基本使用
前言 HW初级的主要任务就是看监控(流量) 这个时候就需要我们 了解各种漏洞流量数据包的信息 还有就是我们守护的是内网环境 所以很多的攻击都是 sql注入 和 webshell上传 (我们不管对面是怎么拿到网站的最高权限的 我们是需要指出它是…...
docker-compose install nginx(解决fastgpt跨区域)
CORS前言 CORS(Cross-Origin Resource Sharing,跨源资源共享)是一种安全措施,它允许或拒绝来自不同源(协议、域名、端口任一不同即为不同源)的网页访问另一源中的资源。它的主要作用如下: 同源策略限制:Web 浏览器的同源策略限制了从一个源加载的文档或脚本如何与另一…...
设计模式(创建型)-单例模式
摘要 在软件开发的世界里,设计模式是开发者们智慧的结晶,它们为解决常见问题提供了经过验证的通用方案。单例模式作为一种基础且常用的设计模式,在许多场景中发挥着关键作用。本文将深入探讨单例模式的定义、实现方式、应用场景以及可…...
Leetcode 刷题笔记1 图论part01
图论的基础知识: 图的种类: 有向图(边有方向) 、 无向图(边无方向)、加权有向图(边有方向和权值) 度: 无向图中几条边连接该节点,该节点就有几度࿱…...
鸿蒙NEXT开发问题大全(不断更新中.....)
目录 问题1:鸿蒙NEXT获取华为手机的udid 问题2:[Fail]ExecuteCommand need connect-key? 问题3:测试时如何安装app包 问题1:鸿蒙NEXT开发获取华为手机的udid hdc -t "设备的序列号" shell bm get --udid 问题2&…...
分享一个项目中遇到的一个算法题
需求背景: 需求是用户要创建一个任务计划在未来执行,要求在创建任务计划的时候判断选择的时间是否符合要求,否则不允许创建,创建的任务类型有两种,一种是单次,任务只执行一次;另一种是周期&…...
TI的Doppler-Azimuth架构(TI文档)
TI在AWR2944平台上推出新的算法架构,原先的处理方式是做完二维FFT后在RD图上做CFAR检测,然后提取各个通道数据做测角。 Doppler-Azimuth架构则是做完二维FFT后,再做角度维FFT,生成Doppler-Azimuth频谱图,然后在该频谱图…...
电子邮件常用协议技术详解与C++实践(SMTP POP3 IMAP)
一、核心协议概览 协议端口(明文/加密)核心功能数据同步方式典型场景SMTP25 / 587邮件发送单向传输客户端提交邮件POP3110 / 995邮件下载单向同步单设备离线阅读IMAP143 / 993邮件管理双向同步多设备实时同步 二、协议深度解析 1. SMTP(简单…...
机器学习算法:一文掌握 K近邻算法 的详细用法(2个案例可直接运行)
文章目录 一、KNN 算法概述1.1 算法原理1.2 KNN 的优缺点1.3 K 值的选择 二、Python 实现 KNN 案例2.1 使用 KNN 算法进行手写数字识别2.2 使用 Python 实现 KNN 分类 三、总结 KNN(K-Nearest Neighbors,K近邻算法) 是一种简单且常用的分类和…...
设计C语言的单片机接口
一、主要内容 (一)控制引脚 1、定义管脚 // 定义管脚的结构体 struct pin{ int id; // 管脚编号 int mode; // 模式,输入为1,输出为0 int pull; // 输入电阻 int driver; // 功率 } 2、输出电平 语法: void pin_output(s…...
[从零开始学习JAVA] Stream流
前言: 本文我们将学习Stream流,他就像流水线一样,可以对我们要处理的对象进行逐步处理,最终达到我们想要的效果,是JAVA中的一大好帮手,值得我们了解和掌握。(通常和lambda 匿名内部类 方法引用相…...
「自动驾驶的数学交响曲:线性代数、微积分与优化理论的深度共舞」—— 解析人工智能背后的高阶数学工具链
引言 自动驾驶系统是数学工具链的集大成者。从传感器数据的多维空间映射到控制指令的生成,每一步都隐藏着线性代数、微积分、概率论和优化理论的精妙配合。本文将构建一个数学模型完整的自动驾驶案例,结合Python代码实现,揭示以下核心数学工具: 线性代数:张量运算与特征空…...
