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
- 修改 NFS 配置文件:
sudo vim /etc/default/nfs-kernel-server
- 在末尾添加:
RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"
- 重启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
本文主要探讨了在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连接。
719

被折叠的 条评论
为什么被折叠?



