Linux 挂载 NFS 报 no export entry,服务端和客户端各查哪些地方

客户端上执行 mount 去挂 NFS 共享,命令直接报错,翻系统日志看到 no export entry 这样一条;上网搜,对应的中文资料少得可怜,一时不知从哪下手。其实这个报错翻译过来很直白:挂载请求已经到了服务端,但服务端的导出表里查不到一条能同时对上"这个目录加这个客户端"的记录。排查就沿着目录与客户端两条线展开,这篇把顺序理清楚。

原因分析

NFS 服务端靠 /etc/exports 这张表定义"哪个目录、放给谁、给什么选项",mountd 拿它决定放行与否。no export entry 的含义就是表里查无此项,常见出在三个地方:路径对不上——客户端请求的目录与服务端导出的路径不是逐字相同,差一个末尾斜杠、大小写不同、走了软链的另一种写法,都算对不上;客户端匹配段对不上——每条导出项后面跟着允许访问的地址范围,客户端的出口地址不落在其中,等于敲门的人不在名单上;配置改了没生效——exports 文件动了,但没有执行重新导出,服务端内存里跑的还是旧表,人以为改了,机器不知道。

分步解决

  1. 服务端先看表:执行 exportfs -v 或 showmount -e localhost,确认目标目录在不在导出表里、放行的地址段写的都是谁。
  2. 逐字核对路径:把客户端挂载命令里的路径与导出表逐字比对,末尾斜杠、大小写、软链展开后的真实路径,逐一对齐。
  3. 核对地址匹配段:在服务端看这次连接的来源地址,与导出项后面的地址段比对;客户端换了出口地址、网段写窄了都会失配。排查期可先把网段临时放宽验证方向,确认后再收回。
  4. 重新导出生效:改完 exports 执行 exportfs -ra,再用 exportfs -v 确认新表已加载;只改文件不重导出,等于没改。
  5. 客户端复挂看报错变化:mount 加上 -v 参数看交互过程;报错若变成 permission denied 或超时,说明已换了一层——转向权限选项、防火墙的 2049 端口、NFSv4 伪根路径差异这些方向接着查。

预防

exports 的变更当成正经变更来管:改前留底、改后即验,客户端挂载一次的验证结果随手记录在案。我们贵州诚鑫致达科技维护 NFS 导出有个习惯——每回改动都在值班本上留一行,改了哪个字段、何时改的,隔月回头翻账不抓瞎,新人接手也能顺着记录看懂来路。