从零搭建 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-utils和rpcbind,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 个关键点:
- 服务端
exports文件的权限参数要明确(尤其是rw和客户端范围),避免权限问题。 - 客户端必须创建挂载点,且挂载命令的 "服务端路径" 和 "客户端路径" 要对应。
- 一定要配置
fstab自动挂载,否则重启后需手动重新挂载。
