Ubuntu 17.10升级后NFS挂载失败求助(17.04及更早版本正常)
解决Ubuntu 17.10 NFS挂载"access denied"问题
我来帮你排查这个困扰的NFS问题——Ubuntu 17.10在NFS默认配置上有不少变化,哪怕你没手动改配置,这些默认调整也可能导致挂载失败。我们一步步来定位问题:
1. 优先检查防火墙规则
Ubuntu 17.10默认启用的ufw防火墙,大概率是这个环节出了问题。升级后防火墙规则可能被重置,NFS相关端口没开放:
- 在NFS服务器上执行以下命令开放必要端口:
sudo ufw allow nfs sudo ufw allow mountd sudo ufw allow rpc-bind sudo ufw reload - 用
sudo ufw status确认规则是否已经生效,确保上述服务的端口都是允许状态。
2. 排查NFSv4的配置差异
你客户端fstab里指定了nfsvers=4,但Ubuntu 17.10对NFSv4的默认配置和17.04有区别:
- 检查NFS版本支持:在服务器上执行
sudo cat /proc/fs/nfsd/versions,确认输出里有+4(或更高版本)的标识,说明NFSv4已启用。 - 同步idmapd域名配置:NFSv4依赖
idmapd做用户映射,服务器和客户端的/etc/idmapd.conf里的Domain必须一致:- 编辑服务器端的
/etc/idmapd.conf,找到Domain行,改成统一的值(比如localdomain):Domain = localdomain - 客户端也同步修改这个配置,然后两边都重启服务:
sudo systemctl restart nfs-idmapd
- 编辑服务器端的
- NFSv4伪根目录设置:如果上面的步骤没用,试试把共享目录挂载到NFSv4默认的伪根
/srv/nfs下:
然后修改sudo mkdir -p /srv/nfs/www sudo mount --bind /var/www /srv/nfs/www/etc/exports,改成:
重新导出并重启服务:/srv/nfs 178.62.77.174(rw,sync,no_root_squash,no_subtree_check)sudo exportfs -a && sudo systemctl restart nfs-kernel-server,客户端挂载路径改成46.101.44.101:/www试试。
3. 验证exports配置正确性
有时候看似正确的exports配置其实有语法问题,或者客户端IP不匹配:
- 用
sudo exportfs -v检查服务器的导出状态,确认/var/www确实是导出给178.62.77.174的,且权限参数正确。 - 确认客户端当前的公网/内网IP确实是
178.62.77.174,如果是动态IP,建议用子网掩码(比如178.62.77.0/24)来指定允许的范围,避免IP变化导致权限被拒。
4. 降级到NFSv3测试(快速定位问题)
如果NFSv4的排查陷入僵局,先试试用NFSv3挂载,确认基本共享功能正常:
- 临时挂载测试:
sudo mount -t nfs -o nfsvers=3 46.101.44.101:/var/www /mnt/nfs/test/www - 如果挂载成功,说明问题确实出在NFSv4的配置上,回到第2步继续调整;如果还是失败,那就要检查服务器端的NFS服务状态、文件系统权限等基础问题。
5. 检查NFS服务运行状态
最后确认服务器端所有NFS相关服务都正常运行:
sudo systemctl status nfs-kernel-server sudo systemctl status nfs-idmapd sudo systemctl status rpcbind
如果有服务未启动,先启动并设置开机自启:
sudo systemctl start [服务名] sudo systemctl enable [服务名]
内容的提问来源于stack exchange,提问作者ShadeBlack




