从零搭建 NFS 服务:文件共享部署与使用全指南

从零搭建 NFS 服务:文件共享部署与使用全指南

在服务器集群、开发环境或办公场景中,"跨设备文件共享" 是高频需求。NFS(Network File System,网络文件系统)能让不同 Linux 设备通过网络挂载远程目录,实现文件实时共享,操作简单且性能稳定。本文以 CentOS 7 系统为例,从基础原理到实战操作,带你完成 NFS 服务端部署、客户端挂载及常见问题排查,新手也能轻松上手。

一、先搞懂:NFS 核心概念与适用场景

动手前先理清关键逻辑,避免后续操作踩错方向。

1. NFS 的核心价值

  • 跨设备共享:一台服务器(服务端)的目录,可被多台客户端同时挂载,实现文件 "一处存储,多端访问"。
  • 节省空间:无需在每台客户端重复存储相同文件(如软件安装包、共享素材),减少磁盘占用。
  • 操作透明:客户端挂载后,访问远程目录和操作本地文件夹完全一致,无需额外学习新命令。

2. 关键术语解析

  • 服务端(NFS Server):提供共享目录的服务器,需配置 "哪些目录可共享""哪些客户端可访问"。
  • 客户端(NFS Client):通过网络挂载服务端共享目录的设备,挂载后可读写目录内文件(权限由服务端控制)。
  • 挂载点(Mount Point) :客户端上用于关联远程共享目录的本地目录(如/mnt/nfs_share),需提前手动创建。
  • exports 文件 :NFS 的核心配置文件(路径/etc/exports),用于定义共享规则。

二、部署前准备:环境与依赖检查

确保服务端和客户端满足以下条件,避免因环境问题导致部署失败。

检查项 服务端要求 客户端要求
操作系统 Linux(本文以 CentOS 7 为例,Ubuntu 操作逻辑类似) 同服务端,需与服务端网络互通
核心依赖 安装nfs-utils(NFS 核心工具)和rpcbind(远程过程调用,NFS 依赖其通信) 仅需安装nfs-utils(用于挂载)
权限 需 root 或 sudo 权限(所有命令均需高权限执行) 同服务端
网络 关闭防火墙或开放 NFS 相关端口(建议先关闭防火墙测试,稳定后再配置规则) 能 ping 通服务端 IP

三、第一步:部署 NFS 服务端(核心步骤)

服务端的核心是 "创建共享目录 + 配置共享规则 + 启动服务",按以下步骤操作即可。

1. 安装 NFS 核心依赖

首先安装nfs-utilsrpcbind,CentOS 7 通过 yum 命令一键安装:

复制代码
# 安装NFS和rpcbind依赖
yum install -y nfs-utils rpcbind

# 检查是否安装成功(有版本输出则正常)
rpm -qa | grep nfs-utils
rpm -qa | grep rpcbind

2. 创建共享目录并设置权限

选择一个目录作为共享目录(建议单独创建,避免影响系统目录),并设置合适的权限(确保客户端能读写):

复制代码
# 1. 创建共享目录(示例路径:/data/nfs_share,可自定义)
mkdir -p /data/nfs_share

# 2. 设置目录权限(755表示所有者可读可写可执行,其他用户可读可执行)
chmod -R 755 /data/nfs_share

# 3. 设置目录所有者(建议用root,避免权限不足)
chown -R root:root /data/nfs_share

3. 配置共享规则(编辑 exports 文件)

NFS 的共享规则全部定义在/etc/exports文件中,按 "共享目录 客户端范围 (权限参数)" 的格式配置:

复制代码
# 编辑exports文件
vim /etc/exports

在文件末尾添加以下内容(根据实际需求修改):

复制代码
# 格式:共享目录  客户端IP/网段(权限参数)
/data/nfs_share  192.168.1.0/24(rw,sync,no_root_squash,no_all_squash)
关键参数说明(避免踩坑)
  • 192.168.1.0/24:允许访问的客户端范围,可替换为单个 IP(如192.168.1.10)或*(允许所有客户端,不推荐生产环境)。
  • rw:客户端对共享目录有 "读 + 写" 权限(若仅需读,设为ro)。
  • sync:数据实时写入磁盘(保证数据安全,推荐);若设为async,数据先存缓存,性能高但断电可能丢失。
  • no_root_squash:客户端用 root 用户访问时,保留 root 权限(开发环境常用,生产环境需谨慎,可改为root_squash降权)。
  • no_all_squash:保留客户端普通用户的权限(默认配置,无需修改)。

添加完成后,按Esc键,输入:wq保存并退出 vim。

4. 生效共享配置并启动服务

配置完成后,需重新加载规则并启动服务,确保 NFS 正常运行:

复制代码
# 1. 重新加载exports配置(无需重启服务,即时生效)
exportfs -r

# 2. 启动rpcbind服务(NFS依赖它,需先启动)
systemctl start rpcbind
# 设置rpcbind开机自启
systemctl enable rpcbind

# 3. 启动NFS服务
systemctl start nfs
# 设置NFS开机自启
systemctl enable nfs

# 4. 检查服务状态(显示"active (running)"则正常)
systemctl status rpcbind
systemctl status nfs

5. 验证服务端共享是否正常

执行以下命令,查看服务端已配置的共享目录和客户端权限:

复制代码
# 查看NFS共享列表
showmount -e localhost

若输出类似以下内容,说明服务端部署成功:

复制代码
Export list for localhost:
/data/nfs_share 192.168.1.0/24

四、第二步:客户端配置(挂载 NFS 共享目录)

客户端的操作更简单,核心是 "安装工具 + 创建挂载点 + 挂载目录",3 步即可完成。

1. 安装 NFS 客户端工具

客户端仅需安装nfs-utils(用于识别和挂载 NFS 共享目录):

复制代码
# 安装客户端依赖
yum install -y nfs-utils

2. 检查服务端共享目录(可选,验证网络)

先确认客户端能识别服务端的共享目录,避免后续挂载失败:

复制代码
# 格式:showmount -e 服务端IP
showmount -e 192.168.1.100  # 替换为你的NFS服务端IP

若输出服务端的共享列表(同步骤 3.5),说明客户端与服务端网络互通;若报错 "Connection refused",需检查服务端防火墙或网络。

3. 创建客户端挂载点

在客户端创建一个本地目录,作为挂载远程共享目录的 "入口"(路径可自定义,需与服务端共享目录区分):

复制代码
# 创建挂载点(示例路径:/mnt/nfs_client,可自定义)
mkdir -p /mnt/nfs_client

4. 手动挂载 NFS 共享目录

执行mount命令,将服务端共享目录挂载到客户端挂载点:

复制代码
# 格式:mount -t nfs 服务端IP:服务端共享目录 客户端挂载点
mount -t nfs 192.168.1.100:/data/nfs_share /mnt/nfs_client
  • 若执行后无报错,说明挂载成功;
  • 若报错 "permission denied",需检查服务端exports文件的客户端范围是否包含当前客户端 IP。

5. 验证挂载结果

挂载后,通过以下方式确认是否正常:

复制代码
# 1. 查看已挂载的目录(包含NFS相关信息则正常)
df -h

# 2. 测试读写权限(在客户端挂载点创建文件,查看服务端是否同步)
# 客户端创建测试文件
echo "NFS test file from client" > /mnt/nfs_client/test.txt

# 服务端查看文件(在服务端执行)
cat /data/nfs_share/test.txt

若服务端能看到客户端创建的test.txt,说明 NFS 共享正常。

6. 设置开机自动挂载(关键,避免重启失效)

手动挂载仅在当前会话生效,服务器重启后会失效,需通过/etc/fstab文件设置开机自动挂载:

复制代码
# 编辑fstab文件
vim /etc/fstab

在文件末尾添加以下内容(按实际 IP 和路径修改):

复制代码
# NFS自动挂载配置:服务端IP:共享目录  客户端挂载点  文件系统类型  挂载参数  0 0
192.168.1.100:/data/nfs_share  /mnt/nfs_client  nfs  defaults  0 0

添加完成后,执行以下命令验证配置是否正确(无报错则正常):

复制代码
# 重新加载fstab配置
mount -a

五、常见问题排查(避坑指南)

遇到问题按以下步骤排查,90% 的故障都能解决。

1. 客户端无法识别服务端共享(showmount 报错)

  • 检查网络:客户端执行ping 192.168.1.100(服务端 IP),确认网络互通。
  • 检查服务端防火墙:关闭服务端防火墙测试(systemctl stop firewalld),若能识别,需开放 NFS 相关端口(或配置防火墙规则)。
  • 检查 rpcbind 服务:服务端执行systemctl status rpcbind,确保服务正常运行。

2. 客户端挂载后无读写权限

  • 检查服务端exports配置:确认权限参数为rw(非ro),且客户端 IP 在允许范围内。
  • 检查服务端共享目录权限:服务端执行ls -ld /data/nfs_share,确保目录权限为755或更高(如777,测试用,生产环境不推荐)。
  • 检查root_squash参数:若客户端用 root 用户操作,需确保服务端配置no_root_squash(否则 root 会被降权为普通用户)。

3. 重启后挂载失效

  • 检查/etc/fstab配置:确认客户端fstab文件中 NFS 的配置行无语法错误(如 IP、路径写错)。
  • 执行mount -a测试:若执行后报错,根据错误信息修改fstab配置(如文件系统类型写错,需为nfs)。

六、扩展操作:卸载 NFS 共享目录

若需取消客户端挂载(如更换共享目录),执行以下命令:

复制代码
# 1. 先确保没有进程占用挂载点(否则无法卸载,需先关闭进程)
fuser -m /mnt/nfs_client  # 查看占用挂载点的进程

# 2. 卸载NFS共享目录
umount /mnt/nfs_client

# 3. 验证卸载结果(df -h查看,无NFS挂载信息则正常)
df -h

总结

NFS 部署的核心是 "服务端规则配置 + 客户端挂载",重点记住 3 个关键点:

  1. 服务端exports文件的权限参数要明确(尤其是rw和客户端范围),避免权限问题。
  2. 客户端必须创建挂载点,且挂载命令的 "服务端路径" 和 "客户端路径" 要对应。
  3. 一定要配置fstab自动挂载,否则重启后需手动重新挂载。
相关推荐
2501_9219392637 分钟前
11.27ECshop+Wordprees
运维·服务器
大聪明-PLUS38 分钟前
C++中的复制语义和资源管理
linux·嵌入式·arm·smarc
一入程序无退路40 分钟前
若依框架导出显示中文,而不是数字
java·服务器·前端
杰 .41 分钟前
Linux gcc/g++
linux·服务器
_dindong42 分钟前
Linux网络编程:I/O多路转接之epoll
linux·服务器·网络·sql·mysql
wanhengidc42 分钟前
云手机如何实现资源优化?
运维·服务器·科技·游戏·智能手机
pingzhuyan44 分钟前
linux常规(shell脚本)-启动java程序-实现快捷git拉取,maven打包,nohup发布(无dockerfile版)
java·linux·git·maven·shell
小丁努力不焦虑44 分钟前
webserver一些问题理解
运维·服务器
Yunpiere44 分钟前
浏览器自动化:解放双手的数字助手
运维·自动化