Linux NFS(Network File System)服务器搭建是一个涉及系统配置、服务安装、权限管理和网络优化的过程,广泛应用于跨主机文件共享场景,以下是详细搭建步骤及注意事项,适用于主流Linux发行版(如Ubuntu/Debian、CentOS/RHEL)。

环境准备
假设搭建环境如下:
- NFS服务器端:IP地址为192.168.1.100,操作系统为Ubuntu 22.04 LTS或CentOS 8。
- NFS客户端:IP地址为192.168.1.x(网段内任意主机),需与服务器端网络互通。
更新系统包
在服务器端执行以下命令更新系统:
- Ubuntu/Debian:
sudo apt update && sudo apt upgrade -y
- CentOS/RHEL:
sudo yum update -y
安装NFS服务
安装nfs-kernel-server(Ubuntu/Debian)
Ubuntu/Debian系统使用nfs-kernel-server作为NFS服务端:
sudo apt install nfs-kernel-server -y
安装后,服务会自动启动,可通过systemctl status nfs-server检查状态。

安装nfs-utils(CentOS/RHEL)
CentOS/RHEL系统使用nfs-utils:
sudo yum install nfs-utils -y
安装后启动服务并设置开机自启:
sudo systemctl start nfs-server sudo systemctl enable nfs-server
配置共享目录
创建共享目录
创建/data/nfs_share作为共享目录,并设置权限:
sudo mkdir -p /data/nfs_share sudo chmod 755 /data/nfs_share # 设置读写执行权限 sudo chown nobody:nogroup /data/nfs_share # 所属用户为nobody(避免权限冲突)
编辑NFS配置文件
NFS主配置文件为/etc/exports(Ubuntu/Debian)或/etc/exports.d/exports.exports(CentOS/RHEL),使用vim或nano编辑:
sudo vim /etc/exports
添加以下配置(根据需求调整参数):
/data/nfs_share 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
参数说明:
168.1.0/24:允许访问的客户端IP网段(可指定单个IP,如168.1.200)。rw:允许客户端读写(ro为只读)。sync:数据同步写入磁盘,确保数据安全(async为异步,性能更高但可能丢失数据)。no_subtree_check:不检查子目录,提升性能(建议开启)。no_root_squash:允许客户端root用户拥有root权限(生产环境建议使用root_squash映射为匿名用户)。
生效配置
修改/etc/exports后,需执行以下命令使配置生效:
- Ubuntu/Debian:
sudo exportfs -a
- CentOS/RHEL:
sudo exportfs -r
同时检查导出列表:
sudo showmount -e
输出应包含配置的共享目录及允许的客户端IP。
配置防火墙与SELinux
防火墙配置
NFS默认使用多个端口(2049、111、32768-32771等),需开放相关端口或直接允许NFS服务。
Ubuntu/Debian(ufw):
sudo ufw allow from 192.168.1.0/24 to any port nfs # 开放NFS端口(2049) sudo ufw allow from 192.168.1.0/24 to any port mountd # 开放mountd端口(通常为20048) sudo ufw allow from 192.168.1.0/24 to any port rpcbind # 开放rpcbind端口(111) sudo ufw reload
CentOS/RHEL(firewalld):
sudo firewall-cmd --permanent --add-service=nfs # 允许NFS服务 sudo firewall-cmd --permanent --add-service=rpc-bind # 允许rpc-bind服务 sudo firewall-cmd --permanent --add-service=mountd # 允许mountd服务 sudo firewall-cmd --reload
SELinux配置(仅CentOS/RHEL)
若SELinux为启用状态(sestatus检查),需设置NFS相关策略:
sudo setsebool -P nfs_export_all_rw 1 # 允许NFS读写共享 sudo semanage fcontext -a -t public_content_t "/data/nfs_share(/.*)?" # 设置目录安全上下文 sudo restorecon -Rv /data/nfs_share # 应用上下文
客户端挂载NFS共享
安装客户端工具
客户端需安装nfs-common(Ubuntu/Debian)或nfs-utils(CentOS/RHEL):
# Ubuntu/Debian sudo apt install nfs-common -y # CentOS/RHEL sudo yum install nfs-utils -y
创建挂载点
sudo mkdir -p /mnt/nfs_client
挂载NFS共享
sudo mount 192.168.1.100:/data/nfs_share /mnt/nfs_client
检查挂载状态:
df -h | grep nfs
或查看/proc/mounts确认挂载信息。
设置开机自动挂载(可选)
编辑/etc/fstab添加以下行:
168.1.100:/data/nfs_share /mnt/nfs_client nfs defaults 0 0
参数说明:
defaults:使用默认挂载选项(可包含rw、sync等)。0 0:表示dump备份和fsck磁盘检查的优先级(通常为0)。
NFS性能优化建议
| 优化项 | 说明 |
|---|---|
| 网络配置 | 使用千兆以上网络,调整MTU值(如1500)减少 fragmentation。 |
| 磁盘类型 | 推荐使用SSD或高速磁盘,避免机械磁盘I/O瓶颈。 |
| 同步模式 | 生产环境建议使用sync确保数据安全,测试环境可尝试async提升性能。 |
| 客户端缓存 | 客户端可通过actimeo参数设置属性缓存(如actimeo=30,单位为秒)。 |
| 并发连接 | 调整rpc.nfsd线程数(如sudo sysctl -w fs.nfsd.threads=16)。 |
常见问题排查
-
客户端挂载失败,提示“Permission denied”
- 检查服务器端共享目录权限(
chmod 755)及/etc/exports中的no_root_squash配置。 - 确认客户端IP是否在允许的网段内。
- 检查服务器端共享目录权限(
-
NFS服务无法启动,提示“rpcbind failed”
- 确保先启动
rpcbind服务(sudo systemctl start rpcbind),再启动nfs-server。 - 检查防火墙是否开放
111端口(rpcbind服务端口)。
- 确保先启动
相关问答FAQs
Q1: 如何查看NFS服务器的共享目录列表?
A1: 在客户端执行以下命令查看服务器端导出的共享目录:
showmount -e 192.168.1.100
若提示“RPC program not registered”,需检查服务器端nfs-server和rpcbind服务是否正常运行。
Q2: NFS共享目录如何实现用户权限映射?
A2: 通过/etc/exports中的uid和gid参数指定映射的用户和组ID,将客户端用户test映射为服务器端用户nfsuser:
/data/nfs_share 192.168.1.0/24(rw,all_squash,anonuid=1000,anongid=1000)
anonuid=1000和anongid=1000为服务器端nfsuser的UID和GID,需提前创建用户并设置目录所属权限。
