尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
【Linux】部署NFS服务实现数据共享
‍博主简介CSDN博客专家云计算领域优质创作者华为云开发者社区专家博主阿里云开发者社区专家博主交流社区运维交流社区 欢迎大家的加入 希望大家多多支持我们一起进步如果文章对你有帮助的话欢迎 点赞 评论 收藏 ⭐️ 加关注文章目录一、NFS简介与RPC简介1. NFS服务简介2. RPC协议简介3. NFS工作流程二、准备工作2.1 服务器信息2.2 防火墙配置2.3 selinux沙盒三、部署并启动 NFS 和 RPC 服务四、服务端配置共享目录五、客户端挂载共享目录及配置永久挂载5.1 查看NFS服务共享信息5.2 创建目录并进行临时挂载测试5.3 永久挂载5.4 取消挂载5.4.1 临时取消挂载5.4.2 永久取消挂载一、NFS简介与RPC简介1. NFS服务简介NFS是一种网络协议NFS依赖RPC才能工作。RHEL5.0上是NFS V3而RHEL6.0上是NFS V4NFS 的基本原则是“容许不同的客户端及服务端通过一组RPC分享相同的文件系统”它是独立于操作系统容许不同硬件及操作系统的系统共同进行文件的分享。NFS在文件传送或信息传送过程中依赖于RPC协议。RPC远程过程调用 (Remote Procedure Call) 是能使客户端执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的但NFS却能让我们通过网络进行资料的分享这是因为NFS使用了一些其它的传输协议。而这些传输协议用到这个RPC功能的。可以这么理解RPC和NFS的关系NFS是一个文件系统而RPC是负责信息的传输。2. RPC协议简介RPCRemote Procedure Call远程过程调用它是一种通过网络从远程计算机程序上请求服务而不需要了解底层网络技术的协议。其工作在TCP/UDP的111端口。建立在Socket之上的主要是简化编程的工作在底层提供网络之间的通信。RPC采用客户机/服务器模式。请求程序就是一个客户机而服务提供程序就是一个服务器。首先客户机调用进程发送一个有进程参数的调用信息到服务进程然后等待应答信息。在服务器端进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达服务器获得进程参数计算结果发送答复信息然后等待下一个调用信息最后客户端调用进程接收答复信息获得进程结果然后调用执行继续进行。RPC远程过程调度NFS 协议本身并没有网络传输功能而是基于远程过程调用协议实现的提供一个面向过程的远程服务的接口可以通过网络从远程主机程序上请求服务而不需要了解底层网络技术的协议工作在 OSI 模型的会话层它可以为遵从 RPC 协议应用层协议提供端口注册功能事实上有很多服务NFS 和 NIS 等都可以向 RPC 注册端口RPC 使用网络端口 111 来监听客户端的请求3. NFS工作流程1.首先服务器端启动RPC服务并开启111端口2.然后还需要服务器端启动NFS服务并向RPC注册端口信息3.客户端启动RPCportmap服务向服务端的RPC(portmap)服务请求服务端的NFS端口4.服务端的RPC(portmap)服务反馈NFS端口信息给客户端。5.客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。挂载原理当我们在NFS服务器设置好一个共享目录/opt 后其他人是有权访问/opt这个共享目录的NFS客户端就可以将这个目录挂载到自己文件系统的某个挂载点这个挂载点可以自己定义路径不同也可以如下图客户端A与客户端B挂载的目录就不相同。并且挂载好后我们在本地能够看到服务端/opt下的所有数据。二、准备工作2.1 服务器信息主机操作系统IP服务端口服务端centos172.16.11.201nfs、rpc2049、111客户端centos172.16.11.202nfs、rpc2049、1112.2 防火墙配置关闭防火墙服务# 关闭防火墙systemctl stop firewalld# 禁止防火墙开机自启systemctl disable firewalld如果是必须要开启防火墙可以使用两种方法开端口或服务# 开启nfs和rpc服务firewall-cmd--permanent--add-servicenfs firewall-cmd--permanent--add-servicerpc-bind# 重载防火墙规则firewall-cmd--reload# 放行端口# nfs端口为2049、rpc端口为111firewall-cmd--permanent--add-port2049/tcp firewall-cmd--permanent--add-port111/tcp firewall-cmd--permanent--add-port111/udp# 重载防火墙规则firewall-cmd--reload如果使用的是iptables防火墙可以使用以下命令iptables-AINPUT-ptcp--dport2049-jACCEPT iptables-AINPUT-ptcp--dport111-jACCEPT iptables-AINPUT-pudp--dport111-jACCEPT iptables-save/etc/sysconfig/iptables2.3 selinux沙盒# 临时关闭setenforce0# 永久关闭vim/etc/selinux/config# 将selinux修改为disabled修改配置文件永久生效要重启服务器三、部署并启动 NFS 和 RPC 服务两台都安装nfs-utils为 nfs 服务端、rpcbind为 nfs 客户端# yumyuminstall-ynfs-utils rpcbind# aptaptinstall-ynfs-kernel-server启动 nfs 服务并配置开机自启所有节点systemctlenable--nownfs查看服务状态systemctl status nfs systemctl status rpcbind四、服务端配置共享目录安装完成之后 nfs 会自动创建一个系统程序用户nfsnobody可使用命令cat /etc/passwd查看创建需要作为共享目录的目录并给nfs权限注意磁盘空间占用主节点创建即可# 创建一个需要共享的共享目录mkdir-p/data/nfs# 给此目录nfs用户权限chown-Rnfsnobody:nfsnobody /data/nfs配置共享目录/etc/exports定义哪些地址可以访问主节点配置NFS配置文件格式共享目录 [客户端1(参数)] [客户端2参数]共享目录NFS服务器需要共享的实际路径绝对路径客户端可以访问共享目录的服务器地址或网段。vim/etc/exports# 添加以下内容# 共享目录 允许访问的网段或IP(权限参数)# 示例允许 172.16.11.0/24 网段的所有机器以读写(rw)方式访问也可以采用ip方式/data/nfs172.16.11.0/24(rw,sync,no_subtree_check,no_root_squash)参数说明参数含义rw读写权限sync同步写入保证数据安全no_subtree_check禁用子树检查提升性能no_root_squash客户端 root 用户保持 root 权限重启服务端NFS和RPC服务systemctl restart nfs rpcbind客户端常用形式客户端说明172.16.11.202指定IP地址的主机172.16.11.0/24指定该网段所有主机172.16.10.*指定子网的所有主机www.xxx.com指定域名的主机*.xxx.com指定域中的所有主机*所有主机常用参数解析参数参数解析ro只读rw读写sync同时将数据写入到内存与硬盘中保证不丢失数据async优先将数据保存到内存然后再写入硬盘效率更高但可能会丢失数据root_squash当NFS客户端以root管理员访问时映射为NFS服务器的匿名用户no_root_squash当NFS客户端以root管理员访问时映射为NFS服务器的root管理员all_squash无论NFS客户端使用什么账户访问均映射为NFS服务器的匿名用户no_all_squash保留共享文件的UID和GID默认no_subtree_check禁用子树检查提升性能五、客户端挂载共享目录及配置永久挂载注意1、挂载目录服务端的数据会覆盖客户端的数据1、挂载目录服务端的数据会覆盖客户端的数据1、挂载目录服务端的数据会覆盖客户端的数据​执行mount挂载的为客户端2、如果卸载挂载提示设备正忙umount.nfs4: /data/test: device is busy可以使用umount -l /data/test不过存在一定风险容易丢失数据5.1 查看NFS服务共享信息客户端、服务端都可以执行指定的是nfs服务器的IP地址命令showmount[选项](参数/服务端IP)-d仅显示已被NFS客户端加载的共享目录-e显示NFS服务器上所有的共享目录。查看# 这个命令需要安装nfs-utlisshowmount-e172.16.11.201[rootlocalhost ~]# showmount -e 172.16.11.201Export listfor172.16.11.201: /data/nfs1172.16.11.0/245.2 创建目录并进行临时挂载测试在客户端创建要挂载的目录比如也在/data/nfs其他位置也可以mkdir/data/nfs临时挂载在客户端执行挂载目录命令mount -t指定挂载的文件类型nfs服务端的IP:服务端要共享的路径目录要挂载到本机的路径目录mount-tnfs172.16.11.201:/data/nfs /data/nfs如果遇到以下报错有可能是目录权限问题、服务端配置文件ip范围写的有问题、防火墙、selinux问题mount.nfs: access denied by server while mounting 172.16.11.201:/data/nfs# 挂载完成df -Th进行检查df-Th# 进入挂载目录写入或删除数据进行测试连通性cd/data/nfstouch123# 在挂载目录或nfs主服务器目录进行查看5.3 永久挂载这样只是临时挂载重启服务器之后就会消失所以需要在客户端上配置永久挂载# 永久挂载需确认好ip和类型配置错误会导致服务器重启不了vim/etc/fstab# 追加以下内容确认好自己的服务端ip和挂载路径172.16.11.201:/data/nfs /data/nfs nfs defaults,nofail,x-systemd.automount,x-systemd.requiresnetwork-online.target,x-systemd.device-timeout3000保存退出之后重启服务器可以进行测试一旦写错重启服务器将造成启动不了服务器所以要谨慎保存退出之后重启服务器可以进行测试一旦写错重启服务器将造成启动不了服务器所以要谨慎保存退出之后重启服务器可以进行测试一旦写错重启服务器将造成启动不了服务器所以要谨慎挂载选项详解defaults这是标准的挂载默认值集合通常包含rw读写、suid、dev、exec、auto允许mount -a挂载和nouser等。对于 NFS它还会启用一些基础的 NFS 行为但具体的 NFS 协议参数如rsize、wsize通常会由系统自动协商。nofail这是防止服务器重启失败的关键。它告诉systemd这个挂载点不是启动的“必需”项。即使 NFS 服务器连不上或挂载失败系统也会继续完成启动过程而不会卡住或进入紧急模式。x-systemd.automount按需挂载。系统启动时不会立刻去挂载这个 NFS而是等到第一次有人访问/data/nfs目录时才触发挂载动作。这能进一步加快启动速度并避免在启动阶段因网络未就绪而挂载失败。x-systemd.requiresnetwork-online.target保证网络就绪。它强制要求systemd在尝试挂载之前先等待network-online.target这个目标达成即网络接口已配置并在线。这解决了“系统以为网络好了其实还没好就去挂载 NFS 导致失败”的常见时序问题。x-systemd.device-timeout30限制等待时间。它规定systemd最多等待设备这里是网络存储30 秒。如果 30 秒后 NFS 服务器还不可用就放弃等待并继续启动流程。结合nofail使用可以避免因 NFS 服务器故障导致启动过程被拖延过久默认等待时间可能长达 90 秒。关于“0 0”结尾这是fstab的标准字段第一个0dump备份标志对 NFS 无意义设为0。第二个0fsck检查顺序NFS 是网络文件系统不需要本地磁盘检查设为0。5.4 取消挂载5.4.1 临时取消挂载umount客户端挂载点umount服务端ip:服务端共享目录 举例umount/data/nfsumount172.16.11.201:/data/nfs如果遇到取消挂载报错或卡住可能是还在使用中这种一般不会让取消挂载需要确认还用不用如果真的不用可以强制取消挂载umount-lf172.16.11.201:/data/nfs-f强制卸载它的作用是“强制”执行卸载操作。对于 NFS 来说当服务器端不可达例如宕机或网络断开时普通的umount可能会一直等待或报错。加上-f后系统会直接执行卸载不再等待远程服务器的响应。-l惰性卸载它的作用是“惰性”卸载。系统会立刻把这个文件系统从目录树里“摘”下来让新的访问无法进入。但是如果此时还有进程正在使用这个挂载点里的文件比如有程序打开了里面的文件系统不会强行中断它们而是会等这些进程释放引用后在后台悄悄完成最终的清理。5.4.2 永久取消挂载如果是配置了有永久挂载才需要用到这里先临时取消挂载按照上面的方法进入/etc/fstab中把172.16.11.201:/data/nfs /data/nfs nfs defaults,nofail,x-systemd.automount,x-systemd.requiresnetwork-online.target,x-systemd.device-timeout30 0 0这一行删除就可以了。
RELATED

相关推荐

推荐项目:Gitchain - 分布式P2P Git网络

推荐项目:Gitchain - 分布式P2P Git网络

推荐项目:Gitchain - 分布式P2P Git网络 1、项目介绍 Gitchain是一个创新的开源项目,它将比特币、Namecoin和分布式哈希表(DHT)的理念应用到Git托管中。简单来说,Gitchain构建了一个去中心化的P2P Git网络,…

📅 2026/10/31 1:17:01
yuzu Switch 模拟器如何免费运行 NSP 与 XCI 游戏:完整上手指南

yuzu Switch 模拟器如何免费运行 NSP 与 XCI 游戏:完整上手指南

yuzu Switch 模拟器如何免费运行 NSP 与 XCI 游戏:完整上手指南 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu 先说清它能干什么 yuzu 是一款开源的任天堂 Switch 模拟器,让你直接在电脑&…

📅 2026/10/31 1:17:01
Python智慧药房DrugDeliverer源码:从视觉识别到机械臂抓取的全流程实现

Python智慧药房DrugDeliverer源码:从视觉识别到机械臂抓取的全流程实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/31 1:12:00
MORE NEWS

更多资讯

📰

DeepSeek涨价后实测5个低价API替代方案与成本优化指南

2026年开年没几天,DeepSeek开放平台的调价通知就贴出来了。我负责的内容团队后端,每天大概有1.5亿到2亿tokens的调用量,涨价前月账单在八万上下,调价后同样的跑法直接跳到十三四万。当时我就知道,得认真折腾一下替代方…

📰

AI短剧与真人短剧:成本、差距与未来走向

最近刷短剧的时候,我注意到一个明显的变化:一批“AI味”很重的作品开始频繁出现在推荐流里,人物的脸部偶尔会有僵硬感,背景细节经常莫名扭曲,但剧情节奏、镜头调度和配音完整度却出奇地高。再翻翻从业群里的讨论&#…

📰

半群、子群、商群一条流水线:从有限群到状态合并的工程直觉

半群、子群、商群这三个词摆在一起的时候,很多人第一反应是把它们当成三个并列的知识点去背定义,背完发现做题还是不会,更别提用在真实问题里了。我一开始也是这么干,直到后来在做一个分布式状态合并的小工具时被卡住——两个节点…

📰

VS Code Sessions App:Agentic开发体验的革新

1. VS Code Sessions App 深度解析:Agentic开发体验的革命 上周五晚上11点,我在调试一个复杂的微服务项目时,VS Code突然弹出了一个更新提示。这个看似平常的更新,却彻底改变了我对现代开发工具的认知——Sessions App的横空出世&…

📰

C++模板元编程:编译期计算与类型安全设计

1. C模板元编程的本质与价值 在C开发者的工具箱里,模板元编程(Template Metaprogramming, TMP)就像一把精密的手术刀——它能在编译期完成复杂的类型计算和逻辑判断,为程序带来零开销的抽象能力。我第一次接触TMP是在优化一个实时…

📰

CST仿真实现编码超表面分束器设计与优化

1. 项目概述与背景 编码超表面分束技术是近年来电磁场调控领域的重要研究方向,它通过设计超表面单元结构的编码序列,实现对电磁波的精确操控。这项技术在5G通信、雷达系统和太赫兹成像等领域具有广泛应用前景。CST Studio Suite作为业界领先的三维电磁场…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬