nfs挂载根文件系统失败

本文主要探讨了在Ubuntu 18.04及更高版本中,由于NFS协议版本不匹配导致的挂载根文件系统失败的问题。首先,通过`nfsstat -v`命令检查NFS版本,发现从17.04版开始,默认只支持协议3和4。当kernel仅支持协议2时,需要修改NFS配置文件并重启服务;对于kernel支持协议3的情况,可通过修改u-boot的bootargs解决。而在Ubuntu 22.04中,由于默认关闭了NFS的udp端口,挂载失败,解决方案包括使用tcp挂载或启用udp连接。

nfs挂载根文件系统失败

问题一:挂载前,需要得知nfs使用的版本

确认host端的nfs支持的版本,使用命令nfsstat -v查看

原因:

​ 以前使用的16.04版本的ubuntu没问题,现在更换了18.04版本,开始报错。从Ubuntu17.04开始,nfs默认只支持协议3和协议4,而kernel中默认支持协议2。

如何查看板子kernel支持的协议:

​ 可以通过编译内核配置查看

​ File systems —>

​ Network File Systems —>

在这里插入图片描述

这里可以看到板子作为客户端,支持2、3、4版本,默认支持协议2。

1. 如果kernel只支持协议2

  1. 修改 NFS 配置文件:
sudo vim /etc/default/nfs-kernel-server
  1. 在末尾添加:
RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"
  1. 重启NFS服务:
sudo /etc/init.d/nfs-kernel-server restart

2. kernel版本较高支持协议3

可以修改u-boot的bootargs,例如:

setenv bootargs root=/dev/nfs rw nfsroot=192.168.9.119:/nfs/rootfs,v3 console=ttyS0,115200 init=/linuxrc ip=192.168.9.110

添加一个v3或者nfsvers=3

问题二:Ubuntu22.04使用上述bootargs不能成功使用NFS挂载

问题就出在ubuntu 22.04默认关闭了nfs的udp端口连接

而kernel默认使用的是udp连接

方法一:

添加一个参数,使用tcp挂载:

setenv bootargs root=/dev/nfs rw nfsroot=192.168.9.119:/nfs/rootfs,v3,tcp console=ttyS0,115200 init=/linuxrc ip=192.168.9.110

方法二:

添加/etc/nfs.conf.d/udp.conf文件,启动主机的udp连接:

[nfsd]
udp=n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值