NFS(Network File System,网络文件系统)是一种允许网络中的计算机之间通过TCP/IP网络共享文件的协议,它使得客户端可以像访问本地文件一样访问服务器上的文件,广泛应用于Linux/Unix系统间的文件共享场景,以下将详细介绍NFS服务器的安装与配置过程,包括环境准备、服务安装、配置文件修改、防火墙设置、启动服务及客户端挂载等步骤。
环境准备
在开始安装NFS服务器之前,需要确保系统满足基本要求并规划好共享目录,假设服务器环境为CentOS 7系统,IP地址为192.168.1.100,客户端IP为192.168.1.0/24网段,共享目录为/data/nfs_share,确保服务器和客户端之间网络连通,且客户端已安装NFS客户端工具(可通过yum install nfsutils y安装)。
安装NFS服务
-
更新系统软件包
执行以下命令更新系统,确保软件包版本最新:yum update y
-
安装NFS服务及相关工具
使用yum包管理器安装nfsutils和rpcbind服务:yum install nfsutils rpcbind y
安装完成后,检查服务是否已自动启动:
systemctl status nfsserver systemctl status rpcbind
若未启动,可通过
systemctl start nfsserver和systemctl start rpcbind手动启动,并设置开机自启:systemctl enable nfsserver systemctl enable rpcbind
创建共享目录并设置权限
-
创建共享目录
mkdir p /data/nfs_share
根据需求设置目录所有者及权限,例如设置为nfsnobody用户(NFS默认匿名用户)并赋予读写权限:
chown R nfsnobody:nfsnobody /data/nfs_share chmod R 755 /data/nfs_share
-
添加测试文件
可在共享目录中创建一个测试文件,方便后续验证客户端访问:echo "NFS Server Test File" > /data/nfs_share/test.txt
配置NFS共享
NFS的共享配置文件为/etc/exports,该文件定义了哪些目录可被哪些客户端访问,以及访问权限,编辑该文件:
vim /etc/exports
在文件末尾添加以下内容:
/data/nfs_share 192.168.1.0/24(rw,sync,no_root_squash,no_all_squash)
参数说明:
168.1.0/24:允许访问的客户端网段,可指定具体IP(如192.168.1.200)或使用通配符(如表示所有客户端)。rw:读写权限,ro表示只读。sync:数据同步写入磁盘,确保数据安全,async为异步写入。no_root_squash:允许客户端root用户具有root权限,root_squash表示将root用户映射为匿名用户(nfsnobody)。no_all_squash:不映射所有用户为匿名用户,all_squash表示映射所有用户为匿名用户。
配置完成后,执行以下命令使配置生效:
exportfs r
可通过exportfs v查看当前共享配置。
防火墙与SELinux配置
-
防火墙设置
NFS服务默认使用111端口(rpcbind)、2049端口(nfs)等,需在防火墙中放行相关端口,执行以下命令:firewallcmd permanent addservice=nfs firewallcmd permanent addservice=rpcbind firewallcmd permanent addservice=mountd firewallcmd reload
或直接开放端口:
firewallcmd permanent addport=111/tcp firewallcmd permanent addport=2049/tcp firewallcmd permanent addport=20048/tcp firewallcmd reload
-
SELinux配置
若SELinux处于 enforcing 模式,可能需要调整策略以允许NFS访问,可通过以下命令临时关闭(不推荐生产环境使用):setenforce 0
或永久关闭(修改
/etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=disabled后重启),若需保持SELinux开启,可安装nfsutilslib并使用semanage工具配置策略:yum install policycoreutilspython y semanage fcontext a t public_content_t "/data/nfs_share(/.*)?" restorecon Rv /data/nfs_share
启动与测试NFS服务
-
启动服务
确保rpcbind和nfsserver服务已启动:systemctl start rpcbind systemctl start nfsserver systemctl enable rpcbind systemctl enable nfsserver
-
服务器端测试
使用showmount命令查看共享状态:showmount e 192.168.1.100
预期输出:
Export list for 192.168.1.100: /data/nfs_share 192.168.1.0/24 -
客户端挂载测试
在客户端创建本地挂载点:mkdir p /mnt/nfs_test
挂载NFS共享目录:
mount t nfs 192.168.1.100:/data/nfs_share /mnt/nfs_test
查看挂载状态:
df h
访问测试文件:
cat /mnt/nfs_test/test.txt
若能正常显示内容,说明NFS服务器配置成功,为使客户端开机自动挂载,可编辑
/etc/fstab文件,添加以下内容:168.1.100:/data/nfs_share /mnt/nfs_test nfs defaults 0 0
常见问题排查
- 客户端无法挂载
检查服务器端防火墙、SELinux配置,确认网络连通性及/etc/exports配置是否正确。 - 权限问题
确保共享目录权限设置正确,若客户端提示权限不足,可检查no_root_squash参数是否启用或调整目录所有者。
相关问答FAQs
Q1: NFS服务启动时报错“rpc.statd: unable to register”怎么办?
A: 此问题通常由于rpc.statd服务未启动或端口冲突导致,可尝试执行以下命令启动相关服务:
systemctl start rpcbind systemctl start nfsserver systemctl start rpc.statd
若仍报错,检查/var/lib/nfs目录权限是否为755,并确保无其他进程占用端口。
Q2: 如何优化NFS服务性能?
A: 可从以下方面优化:
- 调整
/etc/sysctl.conf参数,如增大网络缓冲区(net.core.rmem_max、net.core.wmem_max); - 使用
async代替sync提升写入性能(但可能增加数据丢失风险); - 根据网络环境选择合适的传输协议(如TCP或UDP);
- 将NFS数据存储在高性能磁盘(如SSD)上,并避免与系统盘共用。
