用NFS挂载根文件系统详解(带nfs版本不兼容问题的解决方法)

1、NFS介绍

NFS(Network File System)是网络文件系统,和img镜像格式的文件系统一样都是文件系统。区别在于NFS是通过网络挂载,镜像格式的文件系统必须先烧录到硬盘后才能挂载。NFS采用C/S架构,客户端通过网络去挂载服务器端上的文件系统。NFS适用于调试阶段,镜像格式的文件系统适合出货的产品。

2、NFS环境搭建

这里的环境搭建指的是NFS服务器的搭建,uboot、内核已经默认支持NFS的客户端。公司的服务器肯定已经搭建好NFS服务器的环境,下面介绍的是PC上怎么搭建NFS服务器。有两种思路,一种是在Windows中直接运行NFS服务端软件;另一种是在虚拟机中搭建NFS服务器。

3、配置ubuntu上的nfs挂载目录

(1)vi etc/exports添加nfs挂载目录
(2)编辑好后source一下配置文件使nfs配置生效
(3)/etc/init.d/nfs restart,重启nfs服务器

4、制作根文件系统

参考博客:《制作ext2格式的文件系统》

5、配置内核支持nfs启动

1、配置网络部分,主要是使能CONFIG_IP_PNP以在2中能够看到Root file system on NFS选项
	Networking support 
		Networking options 
			TCP/IP networking
					IP: kernel level autoconfiguration
						[*] IP: DHCP support
						[*]IP: BOOTP support
2、配置开启nfs服务
	File systems  --->	
		Network File Systems  --->
			<*> NFS client support 
			[*] NFS client support for NFS version 3                                  
			[*] NFS client support for the NFSv3 ACL protocol extension 
			[*] NFS client support for NFS version 4 (EXPERIMENTAL) 
			[*] NFS client support for NFSv4.1 (DEVELOPER ONLY) 
			[*] Root file system on NFS  

6、修改uboot的bootargs支持nfs

setenv bootargs root=/dev/nfs nfsroot=192.168.1.141:/root/porting_x210/rootfs ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off  init=/linuxrc console=ttySAC2,115200 

(1)root=/dev/nfs
告诉内核根文件系统是NFS;
(2)nfsroot=192.168.1.141:/root/porting_x210/rootfs
告诉内核根文件系统在NFS服务器上的路径;
192.168.1.141:NFS服务器的ip地址;
/root/porting_x210/rootfs :根文件系统在NFS服务器上的路径;
(3)ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off
第一个参数为开发板ip地址;
第二个为服务器ip地址;
第三个是网关;
第四个是掩码;
第五个是开发板名字,可以不填;
第六个将ip地址复制给哪个网卡;
第七个关闭动态ip获取;
(4)init=/linuxrc
告诉内核init进程的路径是"/linuxrc";
(5)console=ttySAC2,115200
指定控制台是串口ttySAC2,波特率是115200;
补充:可以指定nfs版本,用"nfsvers=3"

7、验证是否挂载成功

查看内核启动中是否有如下打印:
VFS: Mounted root (nfs filesystem) on device 0:12.

8、可能遇到的问题

8.1、开发板内核未开启NFS

VFS: Cannot open root device "nfs" or unknown-block(0,255)

(1)内核在挂载根文件系统时,不能打开nfs设备,原因是内核不支持nfs启动根文件系统,也就没有"/dev/nfs"这个设备,所以打不开;
(2)解决办法:安装上面的方式去配置内核;

8.2、开发板内核和Ubuntu的nfs版本不匹配

8.2.1、引起问题的原因

unable to get mount port number from server, using default
VFS: Unable to mount root fs via NFS, trying floppy.

(1)在内核启动中出现上面的打印,说明内核已经打开nfs功能,但是与nfs服务器连接时出现错误,根本原因是开发内核支持的协议不匹配;
(2)比如:我使用开发板的内核是2.6内核,默认是支持version-2的nfs;但是我安装的是Ubuntu22,默认是已经不支持version-2版本的nfs,所以开发板nfs挂载Ubuntu时会失败;

8.2.2、解决问题的方法

(1)方法一:在nfs挂载根文件系统时指定使用的nfs版本,指定一个开发板内核和Ubuntu同时支持的nfs版本,比如用nfsvers指定使用3版本。比如:“······root=/dev/nfs nfsroot=192.168.1.141:/root/porting_x210/rootfs,proto=tcp,nfsvers=3······”
(2)方法二:如果是Ubuntu的nfs版本太高,内核的nfs版本太低,则可以配置Ubuntu,使Ubuntu兼容低版本的nfs版本;
(3)修改Ubuntu支持低版本的nfs,参考博客:《嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)》

8.3、查看Ubuntu支持nfs版本

root@daizhixin-virtual-machine:/home/daizhixin# cat /proc/fs/nfsd/versions 
+2 +3 +4 +4.1 +4.2
  • 3
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
据提供的引用内容,我们可以得知用户想要了解rclone nfs的相关信息。rclone是一个命令行程序,可以将本地文件系统与各种云存储服务连接起来。而nfs是一种网络文件系统协议,可以让不同的计算机通过网络共享文件。因此,rclone nfs可以让用户通过nfs协议来访问云存储服务。 以下是使用rclone nfs的步骤: 1. 首先,需要在本地安装rclone。可以通过以下命令在Linux系统上安装rclone: ```shell curl https://rclone.org/install.sh | sudo bash ``` 2. 然后,需要配置rclone以连接到云存储服务。可以通过以下命令来配置rclone: ```shell rclone config ``` 在配置过程中,需要选择nfs作为连接协议,并输入云存储服务的相关信息,例如access key和secret key等。 3. 配置完成后,可以使用以下命令将云存储服务挂载到本地文件系统: ```shell rclone mount remote:path/to/files /path/to/local/mount ``` 其中,remote是rclone配置文件中定义的远程名称,path/to/files是云存储服务中的文件路径,/path/to/local/mount是本地文件系统中的挂载点。 4. 最后,可以使用nfs协议来访问挂载的云存储服务。例如,在另一台计算机上,可以使用以下命令来挂载rclone nfs: ```shell mount -t nfs server:/path/to/mount /path/to/local/mount ``` 其中,server是rclone所在的计算机的IP地址或主机名,/path/to/mount是rclone挂载的路径,/path/to/local/mount是本地文件系统中的挂载点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正在起飞的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值