NFS挂载的2种方式(nfs挂载参数详解)
nanshan 2024-11-11 12:25 29 浏览 0 评论
来源:百问网
作者:韦东山
本文字数:3480,阅读时长:5分钟
仅用flash上的根文件系统启动后,手工MOUNT NFS
使用NFS作为根文件系统来启动
视频中只介绍了开发板这端uboot参数的设置,并未介绍Ubuntu端 NFS服务器的设置,这就导致很多学员学习时遇到难以逾越的问题:NFS挂载,从而影响学习进度和热情。此帖就是解决NFS相关的问题,希望对初学者有所帮助。先介绍:1 仅用flash上的根文件系统启动后,手工MOUNT NFS, 前提条件:
- 开发板上要烧写好文件系统
- 能正常开机进入Linux系统
- uboot中启动参数类似这种 bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0
大概说下步骤:
- 搭建(下载)、配置和重启NFS服务器
- Ping 通服务器
- 执行挂载命令
NFS是什么?
NFS:Network File System(网络文件系统),NFS只是一种文件系统,本身并没有传输功能,是基于RPC协议实现的,为C/S架构。也就是说,NFS也只是文件系统而已,如jffs2,yaffs,ext4等是一类东西。但是NFS的特殊之处在于,它可以通过网络来挂载,而不用烧写到设备上。这就跟网吧里使用PXE启动来搭建无盘系统一样:每台电脑并没有安装硬盘,而是直接通过PXE启动服务器上的系统,看起来每台电脑都有硬盘,其实都是挂载服务器上的硬盘。
NFS怎么用?
前边已经介绍过,NFS是C/S架构,也就是说,使用NFS需要搭建服务器和客户端。客户端很简单,自带的uboot已经添加了对NFS客户端的支持,我们只需要管NFS服务器。这个服务器其实跟TFTP、Samba服务器、Ftp服务器也是一类的东西,直接在Ubuntu上使用命令安装即可,
先下载NFS服务器,演示如下:
sudo apt-get install nfs-kernel-server
很显然,我已经安装过了,在提供的Ubuntu9.10里也安装过了,继续往下走——–配置NFS服务器
sudo vi /etc/exports
默认状态下是没有配置的,可以参考给出的例子或者百度来决定配置信息
例如,可以配置成这样:
就是在文件里添加了
/work/nfs *(rw,sync,no_root_squash)
/var/lib/tftpboot *(rw,sync,no_root_squash)
然后保存,重启NFS服务器或者Ubuntu(如果不重启,配置不会生效),命令如下:
sudo /etc/init.d/nfs-kernel-server restart
简单解释各个参数的意义:
/work/nfs :允许客户端挂载的目录,可添加任意多个,如果不设置,服务器将不允许客户端挂载。
* :允许所有IP的主机挂载该目录
括号内的 :一些权限设置,比如是否能够读写(可百度,更详尽)
现在NFS服务器就可以用了。
1.查看开发板和Ubuntu的IP,设置开发板IP并ping通NFS服务器
2.把你想拷贝到开发板上的文件都复制到刚才设置的目录里,例如拷贝到 /work/nfs,然后在开发板上执行挂载命令
mount -t nfs -o nolock,vers=2 10.0.0.147:/work/nfs /mnt
解释一下:
mount :挂载命令
nfs :使用的协议
nolock :不阻塞
vers : 使用的NFS版本号
IP : NFS服务器的IP(NFS服务器运行在哪个系统上,就是哪个系统的IP)
/work/nfs: 要挂载的目录(Ubuntu的目录)
/mnt : 要挂载到的目录(开发板上的目录,注意挂载成功后,/mnt下原有数据将会被隐藏,无法找到)
3.现在进入开发板上的/mnt目录,就可以看到Ubuntu上要传输的文件了
4.测试驱动,测试应用程序都可以在/mnt目录下进行,并且这个/mnt目录也不会占用开发板的Flash空间,很方便。
仅用flash上的根文件系统启动,手工MOUNT NFS 介绍完毕
强烈推荐这种方式,因为简单。随时想挂载就挂载,Ubuntu系统即使不开机(前提是ubuntu ip没变)也不影响开发板的启动。而 7.2 使用NFS作为根文件系统来启动 ,若Ubuntu未启动或者文件系统有问题,开发板根本无法开机,严重影响体验。
可能遇到的问题
典型的网络不通,检查彼此的IP,保证网络通畅。
很多初学者以为,在uboot状态下设置完IP能ping通Ubuntu那么开发板进入Linux后也一定能ping通Ubuntu,这是不对的。两种状态下的IP互不影响,也就是说uboot的IP不会传递给Linux,如果需要使用网络都需要分别设置IP。
解决方法:
①检查要挂载的目录/work/test是否在/etc/exports中声明过,如果没有,是没有挂载权限的,就参考前面的例子添加
在Ubuntu上执行命令 showmount -e 即可查看已经声明过的可被挂载的目录
②检查NFS服务器是否在运行
在Ubuntu上执行命令 sudo /etc/init.d/nfs-kernel-server status 即可查看nfsd是否正在运行,如果没有运行就参考前面的命令使其运行
使用NFS作为根文件系统来启动
如果你仅仅是想要让开发板跟Ubuntu共享文件,那么强烈建议你用前面所提供的方式,因为 2 使用NFS作为根文件系统来启动 比较麻烦,这种启动方式主要用在制作文件系统上。下面详细说明!
视频一开始就教大家怎么重烧整个系统,怎么编译uboot,怎么编译内核都讲了,就是没有讲怎么制作文件系统。制作文件系统属于进阶内容,被放到了第11节。但是视频中又提前的介绍了NFS启动,这就导致很多紧跟视频操作不敢有丝毫遗漏的同学陷入深深的苦恼当中,无法在自己的开发板上复现视频中的现象是不可容忍的,有些同学甚至因此放弃了嵌入式的学习,这对一个过来人来说感觉是相当可惜的。现在我就慢慢引入为什么需要NFS启动吧。
大家都知道,开发板要想运行应用程序,文件系统是必不可少的,在光盘里有提供文件系统
参考视频的烧写方法,很容易能够烧写成功。但是这个文件系统是怎么制作出来的?只能看第11节的视频了,会发现步骤非常多。为了避免出错,需要时时看制作的效果。如果每做一步都用mkyaffs2image制作一个文件系统fs.yaffs2烧写到开发板上显然效率太低,此时NFS启动的优势就很明显了—–可以通过NFS启动的方式来实时看效果。
使用NFS启动的前提条件
编译内核和制作文件系统所用的交叉编译器必须相同(如果你用2.6.22.6的内核去挂载毕业班、第三期视频的NFS文件系统,肯定无法挂载)
步骤:
- 将制作的文件系统放到/work/nfs/jz2440目录下
- 参考上一个帖子的方式,添加路径 /work/nfs/jz2440 到文件 /etc/exports 中,以保证开发板有挂载这个目录的权限
- 重启nfs服务器
- 再次确认刚才设置的目录是否生效
- 查看Ubuntu的IP和开发板的IP,等会设置uboot启动参数时会用到
- 设置uboot启动参数
set bootargs noinitrd root=/dev/nfs nfsroot=10.0.0.147:/work/nfs/jz2440 ip=10.0.0.10:10.0.0.147:10.0.0.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
save
常见问题
1.如果你的文件系统制作的没有问题,那么重启开发板后应当能够进入Linux系统。如果挂载失败,就用光盘里提供的文件系统试试
注意:光盘提供的文件系统中etc/init.d/rcS文件中已经默认添加了设置开发板IP的命令,如果你不需要这个IP或者跟你的网段不同,可以修改以符合自己的需要。光盘里提供的文件系统都是用arm-linux-gcc(3.4.5版本制作的),因此你必须使用2.6.22.6的内核来启动,否则无法挂载文件系统。
2.使用NFS启动你会发现一个问题,如果开发板跟Ubuntu之间的网络不通,那么你的开发板就启动不了。想想也很正常,客户端跟服务器网络不通是无法登陆的。如果你制作的文件系统经过测试没有任何问题,那就可以制作成yaffs2文件系统烧写到开发板上,不用每次都得打开Ubuntu,插上网线,再启动开发板了。
在第一期视频第0课第7节03:40处有演示,
其实就是将NFS文件系统使用mkyaffs2image工具制作生成yaffs2格式的文件系统。至此,NFS全部挂载方式分析完毕。
「新品首发」STM32MP157开发板火爆预售!首批仅300套
点击“了解更多”阅读更多相关章节
相关推荐
- 0722-6.2.0-如何在RedHat7.2使用rpm安装CDH(无CM)
-
文档编写目的在前面的文档中,介绍了在有CM和无CM两种情况下使用rpm方式安装CDH5.10.0,本文档将介绍如何在无CM的情况下使用rpm方式安装CDH6.2.0,与之前安装C5进行对比。环境介绍:...
- ARM64 平台基于 openEuler + iSula 环境部署 Kubernetes
-
为什么要在arm64平台上部署Kubernetes,而且还是鲲鹏920的架构。说来话长。。。此处省略5000字。介绍下系统信息;o架构:鲲鹏920(Kunpeng920)oOS:ope...
- 生产环境starrocks 3.1存算一体集群部署
-
集群规划FE:节点主要负责元数据管理、客户端连接管理、查询计划和查询调度。>3节点。BE:节点负责数据存储和SQL执行。>3节点。CN:无存储功能能的BE。环境准备CPU检查JDK...
- 在CentOS上添加swap虚拟内存并设置优先级
-
现如今很多云服务器都会自己配置好虚拟内存,当然也有很多没有配置虚拟内存的,虚拟内存可以让我们的低配服务器使用更多的内存,可以减少很多硬件成本,比如我们运行很多服务的时候,内存常常会满,当配置了虚拟内存...
- 国产深度(deepin)操作系统优化指南
-
1.升级内核随着deepin版本的更新,会自动升级系统内核,但是我们依旧可以通过命令行手动升级内核,以获取更好的性能和更多的硬件支持。具体操作:-添加PPAs使用以下命令添加PPAs:```...
- postgresql-15.4 多节点主从(读写分离)
-
1、下载软件[root@TX-CN-PostgreSQL01-252software]#wgethttps://ftp.postgresql.org/pub/source/v15.4/postg...
- Docker 容器 Java 服务内存与 GC 优化实施方案
-
一、设置Docker容器内存限制(生产环境建议)1.查看宿主机可用内存bashfree-h#示例输出(假设宿主机剩余16GB可用内存)#Mem:64G...
- 虚拟内存设置、解决linux内存不够问题
-
虚拟内存设置(解决linux内存不够情况)背景介绍 Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存...
- Elasticsearch性能调优(5):服务器配置选择
-
在选择elasticsearch服务器时,要尽可能地选择与当前业务量相匹配的服务器。如果服务器配置太低,则意味着需要更多的节点来满足需求,一个集群的节点太多时会增加集群管理的成本。如果服务器配置太高,...
- Es如何落地
-
一、配置准备节点类型CPU内存硬盘网络机器数操作系统data节点16C64G2000G本地SSD所有es同一可用区3(ecs)Centos7master节点2C8G200G云SSD所有es同一可用区...
- 针对Linux内存管理知识学习总结
-
现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的。对于内存部分需要知道:地址映射内存管理的方式缺页异常先来看一些基本的知识,在进程看来,内存分为内...
- MySQL进阶之性能优化
-
概述MySQL的性能优化,包括了服务器硬件优化、操作系统的优化、MySQL数据库配置优化、数据库表设计的优化、SQL语句优化等5个方面的优化。在进行优化之前,需要先掌握性能分析的思路和方法,找出问题,...
- Linux Cgroups(Control Groups)原理
-
LinuxCgroups(ControlGroups)是内核提供的资源分配、限制和监控机制,通过层级化进程分组实现资源的精细化控制。以下从核心原理、操作示例和版本演进三方面详细分析:一、核心原理与...
- linux 常用性能优化参数及理解
-
1.优化内核相关参数配置文件/etc/sysctl.conf配置方法直接将参数添加进文件每条一行.sysctl-a可以查看默认配置sysctl-p执行并检测是否有错误例如设置错了参数:[roo...
- 如何在 Linux 中使用 Sysctl 命令?
-
sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)