Root-NFS: Unable to get nfsd port number from server, using default

博客指出重启NFS能够解决相关问题,强调了重启NFS这一操作在解决问题上的有效性。
重启一下nfs可以解决。
<think>我们面对的问题是:在执行 `sudo service nfs-kernel-server restart` 时提示 "Not starting: portmapper is not running",并且使用 `sudo service nfs-kernel-server status` 检查时显示 "nfsd not running"。这通常是因为 NFS 服务依赖的 RPC 服务(特别是 rpcbind/portmapper)没有正常运行。 参考引用[1]和[2]可知,rpcbind(或早期版本中的portmap)是NFS服务正常运行的关键,因为它负责端口映射。如果没有运行rpcbind,NFS服务将无法启动。 根据引用[2],NFS服务需要安装nfs-kernel-server(在Ubuntu上)和rpcbind。同时,引用[5]提到NFS服务(nfsd)本身监听2049端口,但其他辅助服务(如mountd, statd等)需要向RPC服务注册并获取随机端口,因此RPC服务必须首先运行。 ### 解决步骤: 1. **确认rpcbind服务状态并启动**: 首先检查rpcbind服务是否运行。因为错误信息明确提到portmapper未运行,而portmapper的功能由rpcbind提供(在较新的系统中)。 ```bash sudo systemctl status rpcbind ``` 如果服务未运行,启动它并设置为开机自启: ```bash sudo systemctl start rpcbind sudo systemctl enable rpcbind ``` 2. **检查RPC服务注册情况**: 使用`rpcinfo`命令检查本地RPC服务是否已注册: ```bash rpcinfo -p localhost ``` 正常情况应该看到至少包含`portmapper`(程序号100000)的服务,并且有tcp和udp的111端口。 3. **重启NFS服务**: 在确保rpcbind运行后,重启NFS服务: ```bash sudo systemctl restart nfs-kernel-server ``` 4. **检查NFS服务状态**: 再次检查NFS服务状态: ```bash sudo systemctl status nfs-kernel-server ``` 或者使用: ```bash sudo service nfs-kernel-server status ``` 5. **查看日志定位问题**: 如果问题仍然存在,查看系统日志或NFS服务的详细日志: ```bash journalctl -u nfs-kernel-server -xe ``` 6. **检查防火墙设置(可选)**: 如果之前步骤没有解决问题,考虑防火墙可能阻止了RPC或NFS端口。开放相关端口: ```bash sudo ufw allow 111 # rpcbind端口 sudo ufw allow 2049 # NFS主端口 sudo ufw allow from any to any port 32765:65535 proto tcp # 动态端口范围,根据引用[5]需要开放高端口范围 ``` 注意:NFS辅助服务使用动态端口(通常在32765到65535之间),因此可能需要开放这个范围的端口,或者可以配置NFS使用固定端口(但配置较复杂)。 7. **验证NFS服务进程**: 检查nfsd进程是否运行: ```bash ps aux | grep nfsd ``` 应该看到至少一个`nfsd`进程。 ### 注意事项: - 在Ubuntu系统中,服务名称是`rpcbind`,而不是`portmap`(旧名称)。 - 确保在启动NFS服务之前,rpcbind已经启动并运行。 - 如果系统重启过,注意检查rpcbind是否设置为开机自启(使用`systemctl enable rpcbind`)。 ### 根本原因分析: 该错误表明NFS服务启动时无法连接到portmapper(即rpcbind)服务。可能的原因是: - rpcbind服务未安装(但通常安装nfs-kernel-server时会作为依赖安装)。 - rpcbind服务未启动。 - 端口111被防火墙阻止。 ### 相关问题: 1. 如何配置NFS服务使用固定端口以简化防火墙设置? 2. NFS服务启动时还有哪些常见的依赖服务需要检查? 3. 如何配置NFS客户端以挂载NFS共享目录? </think>### 解决"NFS未启动:portmapper未运行"问题的完整指南 根据引用[1][2][5],该问题核心是NFS依赖的RPC服务未正常运行。以下是系统化的解决方案: --- ### 🔧 分步解决流程 1. **启动RPC核心服务** ```bash sudo systemctl start rpcbind # 启动端口映射服务 sudo systemctl enable rpcbind # 设置开机自启[^2] sudo systemctl status rpcbind # 验证状态应为active ``` 2. **检查RPC服务注册** ```bash rpcinfo -p localhost # 应有类似输出: # 100000 2 tcp 111 portmapper # 100000 2 udp 111 portmapper ``` 若无输出,重启rpcbind:`sudo systemctl restart rpcbind` 3. **修复服务依赖顺序** 编辑服务配置文件: ```bash sudo nano /etc/systemd/system/nfs-server.service.d/override.conf ``` 添加内容: ```ini [Unit] After=rpcbind.service # 确保在rpcbind之后启动[^5] ``` 4. **重启NFS服务栈** 按顺序重启服务: ```bash sudo systemctl restart rpcbind sudo systemctl restart nfs-common # 客户端组件 sudo systemctl restart nfs-kernel-server ``` 5. **检查NFS进程状态** ```bash sudo service nfs-kernel-server status ps aux | grep nfsd # 应有[nfsd]进程 ``` --- ### ⚠️ 特殊情况处理 **如果仍失败**: - **端口冲突检查** ```bash sudo ss -tuln | grep ':111' # 检查111端口占用 ``` - **配置文件修复** ```bash sudo nano /etc/default/nfs-kernel-server # 检查NEED_SVCGSSD等参数[^3] ``` - **内核模块加载** ```bash sudo modprobe nfsd # 手动加载内核模块 ``` --- ### 🌐 原理解析 NFS依赖RPC机制实现服务发现: 1. `rpcbind`在111端口监听,维护$ \text{service} \rightarrow \text{port} $映射表 2. `nfsd`启动时向rpcbind注册服务端口(通常2049+动态端口)[^5] 3. 客户端通过rpcbind查询NFS服务位置 当rpcbind未运行时,NFS无法完成服务注册,导致启动失败。 --- ### 📊 诊断命令参考表 | 命令 | 正常输出 | 异常处理 | |------|----------|----------| | `rpcinfo -p` | 列出注册服务 | 重启rpcbind | | `sudo netstat -tuln \| grep 111` | `0.0.0.0:111` | 检查端口冲突 | | `journalctl -u nfs-server` | 无错误日志 | 检查配置[^3] | --- ### 💡 预防措施 ```bash # 设置服务依赖链(Ubuntu 18.04+) sudo systemctl edit nfs-server.service ``` 添加: ```ini [Unit] Requires=rpcbind.service After=rpcbind.service nfs-mountd.service ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值