登录
首页 >  文章 >  常见问题

NFS挂载报错:mount.nfs: Connection refused原因分析

时间:2026-05-15 13:45:57 119浏览 收藏

当NFS挂载出现“mount.nfs: Connection refused”错误时,这并非简单的网络不通,而是服务端主动拒绝连接的明确信号——根源往往藏在rpcbind或nfs-server未运行、监听地址受限、防火墙拦截关键端口(111/2049)、NFS版本不匹配或RPC服务未正确注册等环节;本文提供一套系统化、可验证的五步排查法,从服务启停、监听配置、防火墙放行、协议兼容性到RPC注册状态诊断,帮你快速定位真因、绕过常见误区,让NFS稳定挂载不再靠猜。

NFS挂载报mount.nfs: Connection refused是rpcbind没启动吗?

如果您在执行NFS挂载命令时收到“mount.nfs: Connection refused”错误,该提示并非直接指向RPC绑定失败,而是表明客户端尝试连接服务端关键端口(如111或2049)时被明确拒绝。这种拒绝由服务端内核或守护进程主动返回RST包所致,根本原因在于服务端本地服务未就绪或被拦截。rpcbind未启动确实是高频原因之一,但不能唯一归因于此。以下是多种可验证、可操作的排查与修复路径:

一、验证并启动rpcbind及nfs-server服务

rpcbind是NFSv3及更早版本必需的端口映射服务,若其未运行,客户端无法获知nfsd和mountd的实际监听端口,从而触发Connection refused。NFSv4虽可绕过rpcbind,但多数系统仍默认依赖它进行兼容性注册。

1、登录NFS服务器,执行命令检查两项服务状态:
systemctl status rpcbind nfs-server

2、若rpcbind显示inactive(dead),运行:
sudo systemctl start rpcbind

3、若nfs-server显示inactive(dead)或active (exited),运行:
sudo systemctl start nfs-server

4、特别注意:若先启动rpcbind后才启动nfs-server,必须重启nfs-server以完成RPC程序注册,否则仍报错:
sudo systemctl restart nfs-server

二、检查服务监听地址与绑定范围

NFS相关服务可能仅绑定在127.0.0.1或特定接口,导致来自外部IP的连接请求被静默拒绝。即使服务运行中,若rpcbind被配置为--no-nfs-version 2或监听地址受限,也会使客户端无法完成端口查询。

1、查看rpcbind实际监听情况:
sudo ss -tuln | grep ':111'

2、确认输出中包含0.0.0.0:111或服务器实际网卡IP:111;若仅见127.0.0.1:111,则需修改rpcbind配置文件(通常为/etc/default/rpcbind),移除或注释掉--port 111 --address 127.0.0.1类参数

3、检查/etc/exports中共享条目是否显式指定客户端网络段,例如:
/data 192.168.1.0/24(rw,sync,no_subtree_check)

4、执行exportfs -ra强制重载导出表,并确认无警告输出

三、审查防火墙策略对关键端口的放行状态

Connection refused错误常被误判为服务未运行,实则可能是防火墙在INPUT链上直接DROP或REJECT了目标端口的连接请求。此时服务本身活跃且监听正常,但内核在连接建立前即终止会话。

1、检查firewalld当前zone及开放端口:
sudo firewall-cmd --state && sudo firewall-cmd --list-ports

2、若使用firewalld,开放rpcbind与nfs必需端口:
sudo firewall-cmd --permanent --add-port=111/tcp && sudo firewall-cmd --permanent --add-port=111/udp && sudo firewall-cmd --permanent --add-port=2049/tcp && sudo firewall-cmd --permanent --add-port=2049/udp

3、重载防火墙规则:
sudo firewall-cmd --reload

4、若使用iptables,检查INPUT链是否含类似规则:
sudo iptables -L INPUT -n | grep -E ':(111|2049)'

四、确认NFS协议版本匹配与客户端工具完整性

客户端指定的NFS版本若与服务端不兼容(如服务端禁用v3而客户端强制vers=3),或客户端缺失对应协议支持模块,也可能表现为Connection refused——尤其在服务端关闭低版本服务但未调整rpcbind注册逻辑时。

1、在服务器端查看当前启用的NFS版本:
cat /proc/fs/nfsd/versions

2、若输出中不含-3或-4,说明对应版本被禁用;编辑/etc/default/nfs-kernel-server(Ubuntu)或/etc/sysconfig/nfs(RHEL/CentOS),取消注释并设置:
NFS_SERVER_MINOR_VERSION=2 或 RPCNFSDCOUNT=8

3、在客户端验证nfs-utils或nfs-common是否已安装:
dpkg -l | grep nfs-common(Debian/Ubuntu)或 rpm -qa | grep nfs-utils(RHEL/CentOS)

4、若未安装,执行对应安装命令并重启rpc-statd服务:
sudo systemctl restart rpc-statd

五、通过showmount与rpcinfo定位服务注册状态

showmount -e server_ip与rpcinfo -p server_ip是两个轻量级诊断命令,能绕过mount命令的复杂流程,直击RPC层注册状态。若二者均失败,可排除客户端挂载参数问题,锁定服务端RPC基础设施故障。

1、在客户端执行:
showmount -e 192.168.1.10

2、若返回“clnt_create: RPC: Port mapper failure”,说明rpcbind未响应;若返回“RPC: Program not registered”,说明nfs或mountd未向rpcbind注册

3、进一步执行:
rpcinfo -p 192.168.1.10

4、正常输出应包含程序号100003(nfs)、100005(mountd)、100000(portmapper)及其对应协议与端口;若缺失任一,即表明对应服务未注册成功

今天关于《NFS挂载报错:mount.nfs: Connection refused原因分析》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>