Linux NFS搭建,如何配置共享目录并实现跨服务器访问?

NFS服务概述与准备工作

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

Linux NFS搭建,如何配置共享目录并实现跨服务器访问?

在搭建NFS服务前,需完成以下准备工作:

  1. 系统环境:推荐使用CentOS 7/8或Ubuntu 18.04/20.04等稳定版Linux系统,本文以CentOS 7为例。
  2. 网络配置:确保服务器与客户端处于同一局域网,且网络互通(可通过ping命令测试)。
  3. 权限规划:明确需要共享的目录及其权限(如读写、只读),并设置合理的用户/用户组权限,避免安全风险。
  4. 软件依赖: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文件,添加以下内容(示例):

Linux NFS搭建,如何配置共享目录并实现跨服务器访问?

/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:共享目录 本地挂载目录
示例:

Linux NFS搭建,如何配置共享目录并实现跨服务器访问?

# 读写挂载
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服务的稳定运行。