Rocky Linux下配置nfs

简介: NFS(网络文件系统)是类Unix系统间分布式文件共享的核心协议,支持跨机器数据共享,广泛应用于云原生、企业文件服务。本文详解NFS在Rocky Linux下的部署:从基础概念、组件安装(nfs-utils、rpcbind)、服务器配置(/etc/exports)、防火墙设置到客户端挂载与自动加载(fstab、autofs),并提供常见问题排查方案,助力构建高效安全的共享存储环境。

一、NFS基础定义与功能

NFS(Network File System,网络文件系统)由Sun公司1984年发布,是类Unix系统间分布式文件共享的核心协议。其核心价值在于:

  • 跨机器/跨系统共享数据:客户端可将服务器共享目录“挂载”到本地,操作时如同访问本地磁盘(如Web服务器集群共享静态资源、大数据节点共享数据集)。
  • 现代场景适配:当前仍广泛用于云原生环境、企业内部文件服务器,尤其适合存储视频、图片、日志等静态数据。

本例中的NFS架构

  • 服务器端(192.168.1.100):共享指定目录(/data/nfs-share)。
  • 客户端(192.168.1.101/192.168.1.102):将服务器共享目录挂载到本地路径(建议与服务器目录名一致,如/data/local-nfs,便于管理)。

二、NFS相关组件安装

Rocky Linux默认未预装NFS组件,需通过dnf包管理器安装:

1. 安装依赖组件

组件名称 功能说明 安装命令
nfs-utils 包含NFS服务端/客户端核心命令(如exportfsshowmount)与守护进程 sudo dnf install -y nfs-utils
rpcbind 负责RPC端口映射(NFS依赖RPC获取随机端口) sudo dnf install -y rpcbind

2. 验证安装结果

安装完成后,可通过以下命令确认组件是否成功安装:

# 检查nfs-utils版本
rpm -qa | grep nfs-utils
# 检查rpcbind版本
rpm -qa | grep rpcbind

三、NFS挂载原理

NFS服务端通过随机端口传输数据,客户端依赖RPC(远程过程调用协议)获取端口信息:

  1. 服务端启动rpcbind后,默认监听111端口(TCP/UDP),等待客户端请求。
  2. 服务端启动nfs-server后,会向rpcbind注册随机端口(通常小于1024,更安全)。
  3. 客户端启动rpcbind后,向服务端rpcbind请求NFS端口,获取端口后建立连接并传输数据。

四、NFS服务器配置

核心配置文件为/etc/exports(系统默认不存在,需手动创建)。

1. 配置文件格式

# 格式:共享目录 客户端1(选项) 客户端2(选项)
共享目录 客户端(访问权限,用户映射,其他选项)

2. 配置项详解

配置类别 具体选项 说明 场景示例
共享目录 - 服务端需共享的目录,建议设置为/data/xxx(避免/home下权限冲突) /data/nfs-share
客户端指定 IP地址 单个客户端(192.168.1.101 192.168.1.101
子网 整个子网(如192.168.1.0/24 192.168.1.0/24
域名 单个域名(如web01.example.com web01.example.com
域所有主机 某域下所有主机(如*.example.com *.example.com
所有主机 允许所有主机访问(不推荐,风险高) *
访问权限 ro 只读权限 -
rw 读写权限(需配合目录Linux权限,否则客户端仍无法写入) -
用户映射 root_squash 客户端root映射为匿名用户(nfsnobody,默认生效,安全) -
no_root_squash 保留客户端root权限(仅用于信任环境,如集群管理节点) -
all_squash 所有客户端用户映射为匿名用户(适合公共只读共享) -
anonuid=1001 匿名用户映射为指定UID(如1001,需与客户端用户UID一致) -
anongid=1001 匿名用户组映射为指定GID(与anonuid配套使用) -
其他选项 sync 数据同步写入磁盘(效率低,保证数据一致性,推荐生产环境) -
async 数据先存内存,必要时写入磁盘(效率高,可能丢数据,仅测试用) -
no_subtree_check 关闭子目录检查(减少服务端开销,现代系统推荐添加) -

3. 示例配置(生产环境常用)

需求:将服务端/data/nfs-share共享给192.168.1.0/24子网,赋予读写权限,同步写入,关闭子目录检查:

# 1. 创建共享目录并设置权限(关键:避免客户端权限不足)
sudo mkdir -p /data/nfs-share
sudo chown nfsnobody:nfsnobody /data/nfs-share  # 与匿名用户一致
sudo chmod 755 /data/nfs-share  # 确保客户端可访问

# 2. 编辑配置文件
sudo vim /etc/exports
# 写入以下内容
/data/nfs-share 192.168.1.0/24(rw,sync,no_subtree_check,root_squash)

五、NFS服务管理

1. 启动服务(必须先启动rpcbind)

# 1. 启动rpcbind并设置开机自启
sudo systemctl start rpcbind
sudo systemctl enable rpcbind

# 2. 启动nfs-server并设置开机自启
sudo systemctl start nfs-server
sudo systemctl enable nfs-server

2. 查看服务状态

# 查看rpcbind状态
sudo systemctl status rpcbind
# 查看nfs-server状态(若显示"active (running)"则正常)
sudo systemctl status nfs-server

3. 停止服务(需先停nfs-server,再停rpcbind)

# 停止nfs-server
sudo systemctl stop nfs-server
# 若无需其他RPC服务,再停止rpcbind
sudo systemctl stop rpcbind

# 若需禁用开机自启(可选)
sudo systemctl disable nfs-server
sudo systemctl disable rpcbind

4. 重新加载配置

修改/etc/exports后,无需重启nfs-server,执行以下命令即可生效:

sudo exportfs -ra  # -r:重新读取配置;-a:应用所有共享;-v:可选,输出详细信息

六、防火墙配置

Rocky Linux默认启用firewalld防火墙,若不开放NFS相关端口,客户端无法访问服务端。需开放以下端口/服务:

1. 开放NFS核心服务

# 永久开放nfs服务(firewalld预定义服务,包含所需端口)
sudo firewall-cmd --add-service=nfs --permanent
# 永久开放rpc-bind服务(对应111端口)
sudo firewall-cmd --add-service=rpc-bind --permanent
# 永久开放mountd服务(NFS挂载依赖,firewalld预定义)
sudo firewall-cmd --add-service=mountd --permanent
# 重新加载防火墙规则(使配置生效)
sudo firewall-cmd --reload

2. 验证防火墙配置

# 查看已开放的服务
sudo firewall-cmd --list-services

七、客户端配置

1. 客户端安装组件

仅需安装nfs-utils(客户端无需rpcbind服务,仅需命令工具):

sudo dnf install -y nfs-utils

2. 查看服务端共享

# 格式:showmount -e 服务端IP
showmount -e 192.168.1.100

3. 手动挂载

# 1. 创建本地挂载点
sudo mkdir -p /data/local-nfs

# 2. 挂载(指定NFS v4版本,现代系统推荐,避免v3同步延迟)
sudo mount -t nfs -o vers=4 192.168.1.100:/data/nfs-share /data/local-nfs

# 3. 验证挂载(显示NFS挂载信息则成功)
mount | grep nfs

4. 自动挂载

方式1:/etc/fstab自动挂载(开机生效)

# 1. 编辑fstab文件
sudo vim /etc/fstab

# 2. 追加以下内容(格式:服务端IP:共享目录 本地挂载点 nfs 选项 0 0)
192.168.1.100:/data/nfs-share /data/local-nfs nfs vers=4,sync,noauto,x-systemd.automount 0 0
# 选项说明:
# vers=4:使用NFS v4
# sync:同步写入
# noauto:开机不主动挂载(避免开机卡壳)
# x-systemd.automount:系统d自动挂载(访问时才挂载,更高效)

# 3. 重新加载fstab配置(无需重启,立即生效)
sudo systemctl daemon-reload
sudo systemctl restart remote-fs.target

方式2:autofs自动挂载(动态挂载,适合临时访问)

若客户端无需永久挂载,可使用autofs(需安装):

# 1. 安装autofs
sudo dnf install -y autofs

# 2. 启动并设置开机自启
sudo systemctl start autofs
sudo systemctl enable autofs

# 3. 配置自动挂载(示例:访问/mnt/nfs时自动挂载服务端共享)
sudo vim /etc/auto.master
# 追加:/mnt/nfs /etc/auto.nfs

# 4. 创建auto.nfs配置文件
sudo vim /etc/auto.nfs
# 写入:share -fstype=nfs,vers=4 192.168.1.100:/data/nfs-share

# 5. 重启autofs
sudo systemctl restart autofs

# 6. 测试:访问/mnt/nfs/share即可自动挂载
cd /mnt/nfs/share

5. 卸载共享

# 手动卸载(需先退出挂载点目录)
sudo umount /data/local-nfs

# 若从fstab移除,需删除对应行后执行:
sudo systemctl daemon-reload

八、常见问题排查

  1. 客户端“权限不够”

    • 检查服务端共享目录权限:确保chown nfsnobody:nfsnobody /data/nfs-sharechmod 755
    • 检查/etc/exports是否添加no_subtree_check选项。
    • 如果是全新安装,请确保使用nfs服务端、客户端的相关用户uid最好保持一致,可在useradd时带上-u选项自行指定uid,一致的uid可省却很多权限相关的麻烦。
  2. 客户端无法连接服务端

    • 检查服务端firewalld是否开放nfsrpc-bindmountd服务。
    • 检查服务端nfs-serverrpcbind是否正常运行(systemctl status)。
  3. fstab挂载开机卡壳

    • 确保fstab中添加noauto,x-systemd.automount选项,避免开机强制挂载。
  4. NFS v3/v4兼容性问题

    • 客户端挂载时指定vers=3vers=4,服务端若仅支持v4,需确保客户端使用v4。
相关文章
|
3天前
|
云安全 人工智能 算法
以“AI对抗AI”,阿里云验证码进入2.0时代
三层立体防护,用大模型打赢人机攻防战
1306 3
|
3天前
|
机器学习/深度学习 安全 API
MAI-UI 开源:通用 GUI 智能体基座登顶 SOTA!
MAI-UI是通义实验室推出的全尺寸GUI智能体基座模型,原生集成用户交互、MCP工具调用与端云协同能力。支持跨App操作、模糊语义理解与主动提问澄清,通过大规模在线强化学习实现复杂任务自动化,在出行、办公等高频场景中表现卓越,已登顶ScreenSpot-Pro、MobileWorld等多项SOTA评测。
621 3
|
4天前
|
人工智能 Rust 运维
这个神器让你白嫖ClaudeOpus 4.5,Gemini 3!还能接Claude Code等任意平台
加我进AI讨论学习群,公众号右下角“联系方式”文末有老金的 开源知识库地址·全免费
|
10天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
741 5
|
3天前
|
人工智能 自然语言处理 安全
阿里云万小智AI建站:基础版、标准版、企业版主要功能及价格对比和选择参考
阿里云万小智 AI 建站是一款基于 AI 驱动的自助建站产品,无需代码基础,通过可视化拖拽与 AI 对话即可快速构建高性能、多语言、安全合规的网站。系统深度集成阿里云 ECS、RDS、OSS、CDN、SLB 与 Web 应用防火墙,保障高可用性、数据安全与全球访问速度。其提供多个版本,精准匹配从个人工作室到中大型企业的差异化需求。
246 167