nfs跨服务器共享核心在于服务端正确导出、客户端可靠挂载及通信畅通:rpcbind必须先于nfs启动,/etc/exports语法须严格,防火墙需放行111和2049等端口;服务端安装配置后按序启停,客户端安装工具、验证连通性再挂载,并通过fstab加_netdev选项实现安全开机自动挂载。

配置 Linux NFS 实现跨服务器存储共享,核心在于服务端正确导出目录、客户端可靠挂载,且两者间通信畅通。关键不是堆砌命令,而是理清依赖关系和权限逻辑——rpcbind 必须先于 nfs 启动,/etc/exports 语法必须严格,防火墙必须放行对应端口。
服务端:安装、导出与启动顺序不能错
NFS 服务运行依赖 RPC 机制,rpcbind 是底层端口映射服务,nfs-server 是上层文件服务,启动顺序错误会导致“Program not registered”报错。
- 安装软件包:Ubuntu/Debian 执行 sudo apt install nfs-kernel-server rpcbind;CentOS/RHEL 8+ 使用 sudo dnf install nfs-utils rpcbind
- 创建共享目录并设权限:例如 sudo mkdir -p /srv/nfs/data && sudo chown nobody:nogroup /srv/nfs/data && sudo chmod 755 /srv/nfs/data(避免 root_squash 下权限冲突)
- 编辑 /etc/exports,添加一行(注意空格和括号紧贴):
/srv/nfs/data 192.168.1.0/24(rw,sync,no_subtree_check)
其中 no_subtree_check 可提升性能,sync 保障写入安全 - 重载配置:sudo exportfs -ra;验证导出:sudo showmount -e localhost
- 按顺序启动服务:sudo systemctl start rpcbind && sudo systemctl start nfs-server;再启用自启:sudo systemctl enable rpcbind nfs-server
客户端:挂载前确认基础组件与网络连通
客户端无需运行 nfs-server,但必须安装客户端工具,并确保能解析服务端地址、访问其端口。
- 安装客户端支持:sudo apt install nfs-common(Ubuntu/Debian)或 sudo dnf install nfs-utils(RHEL/CentOS)
- 创建本地挂载点:sudo mkdir -p /mnt/nfs-data
- 手动挂载测试:sudo mount -t nfs 192.168.1.10:/srv/nfs/data /mnt/nfs-data(将 IP 替换为实际服务端地址)
- 检查是否成功:df -h | grep nfs 或 ls /mnt/nfs-data
- 若挂载失败,先 ping 服务端 IP,再 telnet 192.168.1.10 111 和 2049 端口,确认 rpcbind 和 nfs 服务端口可达
防火墙与安全:默认阻断是常态,需主动放行
现代 Linux 发行版默认启用 firewalld 或 ufw,NFS 依赖多个端口(111/tcp+udp、2049/tcp+udp,以及动态端口),仅开放 2049 不够。
- Ubuntu(ufw):sudo ufw allow from 192.168.1.0/24 to any port 111 proto udp,同理放行 port 2049 tcp/udp
- RHEL/CentOS(firewalld):sudo firewall-cmd --permanent --add-service=nfs,再执行 sudo firewall-cmd --reload
- 生产环境建议使用 root_squash(而非 no_root_squash),防止客户端 root 获得服务端 root 权限,提升安全性
持久化挂载:/etc/fstab 配置要点
要让 NFS 目录开机自动挂载,需在 /etc/fstab 中添加条目,但必须包含 _netdev 选项,确保网络就绪后再挂载。
- 在 /etc/fstab 末尾追加一行:
192.168.1.10:/srv/nfs/data /mnt/nfs-data nfs defaults,_netdev,soft,timeo=300,retrans=3 0 0 - soft 表示服务不可达时返回错误而非卡住;timeo=300 设超时为 30 秒;_netdev 是关键,避免系统启动时因网络未就绪导致挂载失败甚至卡死
- 测试 fstab 配置:sudo mount -a,无报错即生效











