在Linux系统中配置NFS(Network File System)服务器可以实现文件系统的共享,让客户端通过网络访问服务器上的目录,常用于多台服务器间共享文件或集中存储管理,以下是详细的配置步骤和注意事项,整个过程以CentOS 7系统为例,其他发行版(如Ubuntu)的命令和配置文件路径可能略有差异,但核心逻辑一致。

安装NFS服务
首先需要在服务器端安装NFS相关的软件包,主要包括nfsutils和rpcbind。nfsutils提供了NFS服务的主要功能,而rpcbind负责将网络服务名称映射为端口号,是NFS服务正常运行的前提,执行以下命令安装:
sudo yum update y # 更新系统软件包 sudo yum install nfsutils rpcbind y # 安装NFS和rpcbind
安装完成后,启动rpcbind服务并设置开机自启:
sudo systemctl start rpcbind sudo systemctl enable rpcbind
配置共享目录
安装完成后,需要创建或指定要共享的目录,并设置目录权限,假设我们要共享/data/nfs_share目录,执行以下命令:
sudo mkdir p /data/nfs_share # 创建共享目录 sudo chmod R 755 /data/nfs_share # 设置目录权限,755表示所有者可读写执行,组用户和其他用户可读执行 sudo chown R nfsnobody:nfsnobody /data/nfs_share # 设置目录所有者为nfsnobody,NFS服务的默认匿名用户
编辑NFS的主配置文件/etc/exports,该文件定义了共享目录的客户端访问权限,使用vi或nano打开文件:
sudo vi /etc/exports
在文件中添加以下内容(格式为共享目录 客户端IP(权限选项)):
/data/nfs_share 192.168.1.0/24(rw,sync,no_root_squash)
参数说明:
168.1.0/24:允许该网段的所有客户端访问,若指定单个IP则写为168.1.100,若允许所有客户端则写为。rw:表示客户端可读写权限,若为只读则用ro。sync:表示数据同步写入内存和硬盘,确保数据安全性,性能较低但数据不易丢失,若追求性能可用async(异步写入)。no_root_squash:允许客户端以root用户身份访问共享目录,存在安全风险,生产环境建议使用root_squash(将root用户映射为匿名用户)。
保存配置文件后,执行exportfs r命令使配置立即生效,无需重启服务。

启动NFS服务并设置开机自启
配置完成后,启动NFS相关服务并设置开机自启,启动顺序很重要,必须先启动rpcbind,再启动nfsserver:
sudo systemctl start nfsserver sudo systemctl enable nfsserver
检查服务状态是否正常:
sudo systemctl status nfsserver # 确保服务显示active (running) sudo showmount e # 显示本机共享的目录列表,若能看到配置的共享目录则表示成功
配置防火墙和SELinux
为了确保客户端能正常访问NFS服务,需要开放防火墙的NFS相关端口,并配置SELinux策略,CentOS 7默认使用firewalld防火墙,执行以下命令开放端口:
sudo firewallcmd permanent addservice=nfs # 开放NFS服务 sudo firewallcmd permanent addservice=rpcbind # 开放rpcbind服务 sudo firewallcmd permanent addservice=mountd # 开放mountd服务 sudo firewallcmd reload # 重新加载防火墙配置
若系统使用iptables防火墙,需手动开放TCP/UDP的111端口(rpcbind)、2049端口(NFS)和3276532767端口(mountd等):
sudo iptables I INPUT p tcp dport 111 j ACCEPT sudo iptables I INPUT p udp dport 111 j ACCEPT sudo iptables I INPUT p tcp dport 2049 j ACCEPT sudo iptables I INPUT p udp dport 2049 j ACCEPT sudo iptables I INPUT p tcp dport 32765:32767 j ACCEPT sudo iptables I INPUT p udp dport 32765:32767 j ACCEPT sudo service iptables save
关于SELinux,默认情况下可能阻止NFS访问,可通过以下两种方式解决:
- 临时关闭(不推荐生产环境使用):
sudo setenforce 0 # 临时关闭SELinux
- 设置SELinux布尔值(推荐):
sudo setsebool P nfs_export_all_rw 1 # 允许NFS共享目录读写
客户端挂载NFS共享目录
在客户端(可以是Linux或Windows系统)上,使用showmount命令检查服务器共享目录:
showmount e 服务器IP地址 # showmount e 192.168.1.100
若显示共享目录,则在客户端创建本地挂载点(如/mnt/nfs),并执行挂载命令:

sudo mkdir /mnt/nfs # 创建挂载点 sudo mount t nfs 服务器IP地址:/data/nfs_share /mnt/nfs # 挂载共享目录
挂载后可通过df h查看挂载状态,或直接访问/mnt/nfs目录,若希望开机自动挂载,需编辑/etc/fstab文件,添加以下内容:
服务器IP地址:/data/nfs_share /mnt/nfs nfs defaults 0 0
注意:defaults包含rw、suid、dev、exec、auto、nouser、async等默认选项,可根据需求调整。
常见问题排查
- 客户端无法挂载,提示“mount.nfs: access denied”:检查服务器
/etc/exports配置的客户端IP是否正确,防火墙是否开放NFS端口,SELinux是否阻止访问。 - 挂载后文件权限异常:确认服务器端共享目录权限和
nfsnobody用户映射,检查客户端挂载时是否使用了no_root_squash等权限选项。
相关问答FAQs
Q1: NFS共享目录后,客户端创建的文件所有者显示为nfsnobody,如何解决?
A: 这是因为NFS默认将客户端的用户映射为匿名用户nfsnobody,若需保留客户端用户身份,可在服务器/etc/exports中添加all_squash(所有用户映射为匿名用户)或no_all_squash(保留用户身份),但需确保服务器和客户端的用户ID(UID)和组ID(GID)一致,否则仍会出现权限问题,在客户端创建用户时,可使用useradd u 1001 username指定与服务器相同的UID。
Q2: 如何优化NFS性能以提高大文件传输速度?
A: 可从以下方面优化:
- 调整挂载选项:在客户端挂载时使用
rsize=32768,wsize=32768(增大读写块大小,默认为8KB),async(异步写入,降低延迟)等选项,例如mount t nfs o rsize=32768,wsize=32768,async 服务器IP:/共享目录 /mnt/nfs。 - 调整服务器参数:编辑
/etc/sysconfig/nfs,调整RPCNFSDCOUNT(默认为8,可根据服务器CPU核心数增加,如RPCNFSDCOUNT=16),以及rdma相关参数(若支持RDMA网络)。 - 网络优化:确保服务器和客户端之间使用千兆以上网络,并关闭不必要的网络协议(如IPv6),减少网络开销。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/290534.html