Linux NFS搭建,如何配置共享目录并实现跨服务器访问?
NFS服务概述与准备工作
网络文件系统(NFS)是一种允许不同计算机之间通过网络共享文件的协议,它基于客户端/服务器架构,常用于Linux/Unix系统间的文件共享,相较于FTP或Samba,NFS的优势在于其透明性——客户端可像访问本地文件一样访问远程共享目录,且支持高并发读写,适用于搭建分布式存储、集中式日志服务器等场景。

在搭建NFS服务前,需完成以下准备工作:
- 系统环境:推荐使用CentOS 7/8或Ubuntu 18.04/20.04等稳定版Linux系统,本文以CentOS 7为例。
- 网络配置:确保服务器与客户端处于同一局域网,且网络互通(可通过
ping命令测试)。 - 权限规划:明确需要共享的目录及其权限(如读写、只读),并设置合理的用户/用户组权限,避免安全风险。
- 软件依赖:NFS服务依赖
rpcbind(端口映射服务)和nfs-utils(NFS工具集),需提前安装。
NFS服务端配置
安装NFS相关软件
执行以下命令安装NFS服务端及工具:
# CentOS/RHEL系统
yum install -y nfs-utils rpcbind
# Ubuntu/Debian系统
apt update && apt install -y nfs-kernel-server rpcbind
安装完成后,检查服务状态:
systemctl status nfs-server rpcbind
创建共享目录并设置权限
以共享/data/nfs_share目录为例,首先创建目录并设置读写权限:
mkdir -p /data/nfs_share
chmod -R 755 /data/nfs_share # 755:所有者可读写执行,组用户和其他用户可读执行
chown -R nfsnobody:nfsnobody /data/nfs_share # 修改为NFS默认用户/用户组
说明:nfsnobody是NFS服务的专用匿名用户,可避免权限冲突。
配置NFS共享规则
NFS的核心配置文件为/etc/exports,其格式为:
共享目录 客户端地址(权限选项)
客户端地址支持以下格式:
- 单个IP:
168.1.100 - 网段:
168.1.0/24 - 所有客户端:(不推荐生产环境使用)
- 域名:
*.example.com
常用权限选项包括:
ro:只读(read-only)rw:读写(read-write)sync:同步写入(数据写入磁盘后才返回成功,保证数据安全)async:异步写入(数据先写入缓存,提高性能但存在丢风险)no_root_squash:允许客户端root用户具有root权限(需谨慎使用)root_squash:将客户端root用户映射为匿名用户(默认选项)
编辑/etc/exports文件,添加以下内容(示例):

/data/nfs_share 192.168.1.0/24(rw,sync,no_subtree_check)
/data/nfs_share 192.168.1.100(ro,no_root_squash)
说明:
- 第一行允许
168.1.0/24网段所有客户端读写访问,并同步写入数据; - 第二行仅允许IP为
168.1.100的客户端以root身份只读访问。 no_subtree_check:禁用子目录检查,提升性能(当共享目录为子目录时建议开启)。
启动并启用NFS服务
# 启动rpcbind和nfs-server服务
systemctl start rpcbind
systemctl start nfs-server
# 设置开机自启
systemctl enable rpcbind
systemctl enable nfs-server
# 检查服务状态
systemctl status nfs-server rpcbind
检查共享目录配置
执行exportfs -v命令,查看当前生效的共享配置:
exportfs -v
输出应类似以下内容:
/data/nfs_share 192.168.1.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/data/nfs_share 192.168.1.100(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash)
NFS客户端配置
安装NFS客户端工具
客户端需安装nfs-utils(CentOS/RHEL)或nfs-common(Ubuntu/Debian):
# CentOS/RHEL
yum install -y nfs-utils
# Ubuntu/Debian
apt update && apt install -y nfs-common
创建本地挂载目录
在客户端创建用于挂载NFS共享的目录,
mkdir -p /mnt/nfs_client
查看服务端共享目录
执行以下命令,扫描局域网内可用的NFS共享目录:
showmount -e 192.168.1.10 # 替换为服务端IP
若配置正确,输出如下:
Export list for 192.168.1.10:
/data/nfs_share 192.168.1.0/24
挂载NFS共享目录
使用mount命令挂载共享目录,格式为:
mount -t nfs 服务端IP:共享目录 本地挂载目录
示例:

# 读写挂载
mount -t nfs 192.168.1.10:/data/nfs_share /mnt/nfs_client
# 只读挂载(若服务端配置了ro权限)
mount -t nfs 192.168.1.10:/data/nfs_share /mnt/nfs_client -o ro
验证挂载:执行df -h,检查是否成功挂载;或进入/mnt/nfs_client目录,创建测试文件:
echo "test nfs" > test.txt
ls -l test.txt
设置开机自动挂载
为避免重启后挂载失效,需配置/etc/fstab文件,编辑该文件,添加以下行:
168.1.10:/data/nfs_share /mnt/nfs_client nfs defaults,_netdev 0 0
说明:
_netdev:表示该设备为网络设备,需在网络启动后挂载;defaults:使用默认挂载选项(包括rw、suid、dev、exec、auto、nouser、async);- 最后两个数字
0 0:分别表示dump备份选项和fsck磁盘检查选项(NFS通常无需检查)。
NFS常见问题与优化
端口冲突与防火墙配置
NFS默认使用动态端口,可能导致防火墙拦截,可通过以下方式解决:
- 临时关闭防火墙(仅测试环境):
systemctl stop firewalld
- 永久开放NFS相关端口(生产环境推荐):
首先固定NFS端口,编辑/etc/sysconfig/nfs文件,添加以下内容:# 固定端口(需确保端口未被占用)
STATD_PORT=32765
MOUNTD_PORT=32766
LOCKD_TCP_PORT=32767
LOCKD_UDP_PORT=32767重启NFS服务后,在防火墙中开放端口:
firewall-cmd --permanent --add-port=2049/tcp # NFS服务端口
firewall-cmd --permanent --add-port=32765/tcp # STATD端口
firewall-cmd --permanent --add-port=32766/tcp # MOUNTD端口
firewall-cmd --permanent --add-port=32767/tcp # LOCKD_TCP端口
firewall-cmd --permanent --add-port=32767/udp # LOCKD_UDP端口
firewall-cmd --reload
权限问题排查
若客户端无法访问共享目录,常见原因及解决方案:
- 服务端目录权限错误:检查
/data/nfs_share的权限是否为755,所有者是否为nfsnobody; - 客户端挂载选项问题:若需root权限,添加
no_root_squash选项(服务端配置); - SELinux拦截:执行
setsebool -P nfs_export_all_rw on临时关闭,或使用audit2why分析SELinux日志。
性能优化建议
- 文件系统选择:服务端共享目录建议使用XFS或EXT4文件系统,以支持大文件和高并发;
- 网络配置:若数据量大,可启用千兆网络或Jumbo Frame(MTU=9000);
- 缓存策略:客户端可通过
actimeo选项调整属性缓存时间(如actimeo=0禁用缓存,确保实时性); - 异步写入:在安全允许的情况下,使用
async选项提升写入性能,但需搭配定期备份。
NFS作为一种轻量级网络文件共享协议,在Linux环境中搭建简单、使用便捷,适用于中小型企业的文件共享需求,本文从服务端配置、客户端挂载到常见问题排查,详细介绍了NFS的完整搭建流程,实际应用中,需根据业务场景权衡安全性与性能,例如通过防火墙限制客户端访问、合理设置权限选项等,以确保NFS服务的稳定运行。