解决Ubuntu 22.04不支持nfs 2服务导致开发板挂载失败的问题

解决Ubuntu 22.04不支持nfs v2服务导致开发板挂载失败的问题

一、前言
​ 分享近期在使用Ubuntu 22.04调式正点原子IMX6ULL开发板时,遇到不能正常挂载根文件系统问题的解决思路。原因是u-boot仅支持nfs v2,而Ubuntu 22.04默认把nfs v2服务和udp端口关闭了,导致文件系统挂载失败。

VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device “nfs” or unknown-block(2,0): error -6
Please append a correct “root=” boot option; here are the available partitions:
0100 65536 ram0 (driver?)
0101 65536 ram1 (driver?)
0102 65536 ram2 (driver?)
0103 65536 ram3 (driver?)
0104 65536 ram4 (driver?)
0105 65536 ram5 (driver?)
0106 65536 ram6 (driver?)
0107 65536 ram7 (driver?)
0108 65536 ram8 (driver?)
0109 65536 ram9 (driver?)
010a 65536 ram10 (driver?)
010b 65536 ram11 (driver?)
010c 65536 ram12 (driver?)
010d 65536 ram13 (driver?)
010e 65536 ram14 (driver?)
010f 65536 ram15 (driver?)
b300 7865344 mmcblk0 driver: mmcblk
b301 7861248 mmcblk0p1 00000000-01
b310 7634944 mmcblk1 driver: mmcblk
b311 512000 mmcblk1p1 275cbf30-01
b312 7020544 mmcblk1p2 275cbf30-02
b340 512 mmcblk1rpmb (driver?)
b330 4096 mmcblk1boot1 (driver?)
b320 4096 mmcblk1boot0 (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
—[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
random: nonblocking pool is initialized

二、解决思路
在解决nfs v2服务之前需要确认Ubuntu 22.04当前的Linux kernel版本。经过验证,可以确认Linux kernel 6.2及以上版本是不支持nfs v2的,这个问题可以通过降低内核版本解决。
​通过降低版本,对 5.15.0-33-generic 和 5.19.0-41-generic 这两个Linux kernel 版本进行验证,能够成功支持nfs v2,目前验证了这两个版本。如果当前内核不是5.15、5.19这两个版本,就需要更改内核版本,如果使用的是上面两个版本中的任意一个则跳过更改内核这个步骤。
1、查看Ubuntu当前的内核版本
uname -a
在这里插入图片描述
可以看到在6.2.0-34-generic这个版本上不支持nfs 2。
2、查看已安装的内核版本
dpkg --get-selections | grep linux-image
在这里插入图片描述
如果有已安装的合适的版本,可以直接切换。
如果没有合适的已安装内核镜像,如下载5.19.0-41-generic内核,可以使用apt-get下载:sudo apt-get install linux-image-5.19.0-41-generic
3、更改启动的内核
sudo vim /etc/default/grub
修改grub文件的GRUB_DEFAULT参数,内核版本号改成已安装的版本,如果不知道怎么选择的话可以参考 Kernel 5.19.0 :
GRUB_DEFAULT=“Advanced options for Ubuntu>Ubuntu, with Linux 5.19.0-41-generic”
在这里插入图片描述
修改完成后保存退出,然后更新grub文件:sudo update-grub
在这里插入图片描述
4、重启 Ubuntu
reboot
重启后使用 uname -a 查看内核版本,看是否切换内核成功。
在这里插入图片描述
5、配置 nfs.conf 文件
sudo vim /etc/nfs.conf
使能udp和nfs v2:

udp=n	-->	udp=y	使能 udp
vers2=n	-->	vers2=y	使能 nfs v2

然后保存退出。
在这里插入图片描述
6、重启nfs服务后查看 nfs 的版本和是否开启udp端口
/etc/init.d/nfs-kernel-server restart
sudu cat /proc/fs/nfsd/versions
rpcinfo -p | fgrep nfs
在这里插入图片描述
出现+2说明已经支持nfs v2了,并且udp端口也开启成功。如果udp端口不开启也是挂载不了开发板的。
7、测试开发板挂载
在这里插入图片描述
8、参考博客
Ubuntu 22.04版本无法挂载NFS V2的解决方法-OpenEdv-开源电子网

### 关于阿尔法开发板NFS 的配置和使用 #### 1. **NFS 网络文件系统的概述** NFS 是一种分布式文件系统协议,允许客户端访问远程服务器上的文件如同本地磁盘一样。对于嵌入式 Linux 开发环境而言,NFS 提供了一种便捷的方式来共享主机(通常是 PC 或虚拟机)上的文件资源给目标设备(如正点原子 IMX6ULL 阿尔法开发板)。这有助于简化调试过程并减少存储需求。 --- #### 2. **Ubuntu 主机上设置 NFS 服务** 为了使 Ubuntu 成功作为 NFS 文件服务器运行,需完成以下操作: - 安装必要的软件包: ```bash sudo apt-get update && sudo apt-get install nfs-kernel-server portmap ``` - 创建用于共享的目录,并赋予适当权限: ```bash sudo mkdir -p /home/alientek/linux/nfs sudo chmod -R 777 /home/alientek/linux/nfs ``` - 编辑 `/etc/exports` 文件以定义导出路径及其选项: ```plaintext /home/alientek/linux/nfs *(rw,sync,no_subtree_check,insecure) ``` 上述命令表示将该目录开放给所有 IP 地址访问[^1]。 - 启动或重启 NFS 服务: ```bash sudo systemctl restart nfs-kernel-server ``` 注意:如果遇到挂载失败的情况,请确认防火墙未阻止相关端口以及 UDP/TCP 连接已启用[^3]。 --- #### 3. **在开发板挂载 NFS 共享目录** 假设主机 IP 地址为 `192.168.0.105` ,则可以在开发板终端输入如下命令实现挂载: ```bash mkdir get mount -t nfs -o nolock,nfsvers=3 192.168.0.105:/home/alientek/linux/nfs get ``` 这里指定了使用的 NFS 版本号为 v3 并禁用了锁定机制 (`nolock`) 来规避可能存在的兼容性问题[^2]。 --- #### 4. **解决常见问题** 当面对不同版本操作系统间不一致的行为时,比如从 Ubuntu 18.04 升级至 22.04 后发现无法成功加载 NFS 根文件系统,则可能是由于后者默认关闭了某些旧特性所致。具体表现为不再支持基于 UDP 的传输方式而是强制采用更安全可靠的 TCP 方式通信。 针对此情况有两种解决方案可供选择: ##### 方法一:调整主机端配置使其接受 TCP 请求 编辑 `/etc/default/nfs-kernel-server` 文件找到变量 `RPCNFSDOPTS` 添加参数 `-T tcp` 明确指定仅处理来自 TCP 的请求后再保存退出再重载服务即可生效。 ##### 方法二:修改开发板引导脚本改为利用 TCP 访问远端资源 进入 U-Boot 控制台更改相应启动参数确保其中包含类似下面的内容来显式声明所期望使用的协议类型。 ```text setenv bootargs console=ttyAM0,115200 root=/dev/nfs rw ip=dhcp nfsroot=192.168.0.105:/home/alientek/linux/nfs,tcp,v3 boot ``` 以上步骤能够有效应对因网络层面上的变化引发的一系列连锁反应从而恢复正常运作状态[^5]。 --- #### 5. **其他注意事项** 除了基本的功能验证外还需要关注几个方面事项才能更好地发挥这套方案的优势: - 确认双方时间同步以免造成不必要的麻烦; - 对敏感数据实施加密保护措施防止泄露风险; - 定期备份重要文档以防意外丢失。 最后记得把最终定制好的镜像打包存档以便日后重复部署更加高效快捷[^4]。 --- ###
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值