在CentOS系统中搭建NFS(Network File System)服务器是一种常见且高效的文件共享方案,特别适用于局域网内多台服务器之间需要共享文件目录的场景,NFS允许客户端像访问本地文件一样访问远程服务器上的文件,简化了文件管理并提高了数据共享的便利性,下面将详细介绍在CentOS系统上配置NFS服务器的完整步骤、注意事项及相关优化技巧。

环境准备与安装NFS服务
在开始配置前,需确保服务器和客户端网络互通,且服务器端已安装CentOS操作系统(以CentOS 7为例),通过SSH登录服务器,更新系统软件包列表并安装NFS相关的软件包,NFS服务主要由nfs-utils和rpcbind两个包提供支持,其中rpcbind负责远程过程调用(RPC)服务,是NFS正常运行的基础。
执行以下命令安装所需软件包:
sudo yum update -y sudo yum install nfs-utils rpcbind -y
安装完成后,启动rpcbind和nfs-server服务,并设置开机自启:
sudo systemctl start rpcbind sudo systemctl enable rpcbind sudo systemctl start nfs-server sudo systemctl enable nfs-server
可通过以下命令检查服务状态,确保active (running):
sudo systemctl status nfs-server
配置共享目录
NFS服务器的核心是共享目录的配置,默认情况下,NFS的共享目录配置文件为/etc/exports,该文件定义了哪些目录可以被共享、允许访问的客户端地址以及访问权限,假设我们需要共享/data/nfs_share目录,并允许客户端168.1.0/24网段以读写方式访问,可按以下步骤操作:
-
创建共享目录
sudo mkdir -p /data/nfs_share sudo chmod 755 /data/nfs_share # 设置目录权限,确保客户端可访问 sudo chown nfsnobody:nfsnobody /data/nfs_share # 修改所有者为NFS默认用户
-
编辑
/etc/exports文件
使用vim或nano编辑该文件,添加以下内容:/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用户映射为匿名用户,增强安全性)。
-
重新加载NFS配置
修改/etc/exports后,需执行以下命令使配置生效:sudo exportfs -a
配置防火墙与SELinux
CentOS系统默认启用防火墙和SELinux,需开放NFS相关端口及设置SELinux策略,否则客户端可能无法访问。
-
防火墙配置
NFS服务使用多个端口,包括2049(NFS服务)、111(RPC端口映射)、32768-32800(NFS动态端口),可通过以下命令永久开放这些端口:sudo firewall-cmd --permanent --add-service=nfs sudo firewall-cmd --permanent --add-service=rpc-bind sudo firewall-cmd --permanent --add-service=mountd sudo firewall-cmd --reload
或直接开放
2049和111端口:sudo firewall-cmd --permanent --add-port=2049/tcp sudo firewall-cmd --permanent --add-port=111/tcp sudo firewall-cmd --reload
-
SELinux配置
若SELinux处于 enforcing 模式,需调整策略以允许NFS访问,可通过以下命令查看SELinux状态:sestatus
若为 enforcing,可执行以下命令设置SELinux为允许NFS访问(临时生效,重启后失效):
sudo setsebool -P nfs_export_all_rw on
或永久修改SELinux模式为
permissive(不推荐,降低安全性):sudo vi /etc/selinux/config # 将SELINUX=enforcing改为SELINUX=permissive sudo reboot
客户端挂载NFS共享目录
在客户端(同样为CentOS系统)上,可通过mount命令将服务器端的共享目录挂载到本地,假设客户端IP为168.1.100,操作步骤如下:
-
创建本地挂载点
sudo mkdir -p /mnt/nfs_client
-
挂载NFS共享目录
sudo mount -t nfs 192.168.1.200:/data/nfs_share /mnt/nfs_client
其中
168.1.200为NFS服务器IP,/data/nfs_share为共享目录,/mnt/nfs_client为客户端本地挂载点。 -
验证挂载
执行以下命令查看挂载状态:df -hT
若显示类似
168.1.200:/data/nfs_share nfs4 10G 1.5G 8.6G 15% /mnt/nfs_client的信息,则表示挂载成功。 -
设置开机自动挂载
编辑/etc/fstab文件,添加以下内容实现开机自动挂载:168.1.200:/data/nfs_share /mnt/nfs_client nfs defaults,_netdev 0 0参数
_netdev表示该设备为网络设备,需在网络启动后挂载,避免启动时挂载失败。
NFS服务优化与故障排查
-
性能优化
- 调整NFS服务器内核参数:编辑
/etc/sysctl.conf,添加以下内容并执行sysctl -p生效:nfs.nfsd.threads=8 # 根据服务器CPU核心数调整,通常为核心数的2倍 vm.swappiness=10 # 减少swap使用,提升NFS性能 - 使用
async选项提升写入性能(需权衡数据安全性):sudo exportfs -a # 重新加载配置
- 调整NFS服务器内核参数:编辑
-
常见故障排查
- 客户端挂载失败:检查服务器防火墙是否开放端口、SELinux是否阻止、
/etc/exports配置是否正确。 - 权限问题:确保共享目录权限为
755,所有者为nfsnobody,或客户端挂载时指定uid和gid:sudo mount -t nfs 192.168.1.200:/data/nfs_share /mnt/nfs_client -o uid=1000,gid=1000
- 端口冲突:若NFS服务无法启动,可检查
/var/lib/nfs目录下的锁文件,或删除后重启服务。
- 客户端挂载失败:检查服务器防火墙是否开放端口、SELinux是否阻止、
相关问答FAQs
问题1:如何查看NFS服务器的共享目录列表?
答:可通过以下命令查看NFS服务器当前导出的共享目录及客户端权限:
showmount -e 192.168.1.200 # 192.168.1.200为服务器IP
若显示Export list for 192.168.1.200: /data/nfs_share 192.168.1.0/24,则表示配置正确。
问题2:NFS共享目录在客户端显示为只读,如何解决?
答:首先检查服务器端/etc/exports文件中是否包含rw选项,若无则修改并执行exportfs -a重新加载,检查客户端挂载命令是否添加rw选项(如sudo mount -t nfs -o rw 192.168.1.200:/data/nfs_share /mnt/nfs_client),最后确认服务器目录权限是否允许写入(如chmod 755)。
