nfs启动——究竟启动了什么?

本文解析了NFS启动与从NAND Flash启动的区别,主要在于根文件系统的来源不同。NFS启动是从网络服务器复制到开发板的内存中,而NAND Flash启动则是从本地闪存复制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

和许多人一样我也知道一点nfs,知道用nfs开发嵌入式很方便,我也用nfs来共享文件、目录等等,前面我也弄过nfs启动,那一段时间弄了好久,后面还写了一篇比较详细的文章。但是我一直不是很明白究竟nfs启动时启动的什么?我只知道用nfs启动可以扩大空间,因为我们利用了pc机的硬盘。其他的就不知道了,不知道启动的kernel在哪?还有程序运行在哪?

今天我上网搜了一下,发现很多人有和我一样的疑问,搜了比较多的资料,大概总结一下,如有不对的地方,欢迎指出。

其实就是一句话,nfs启动和从nandflash启动只是启动的根文件系统不一样,nandflash启动的时候根文件系统式从nandflash拷贝到sdram中,而nfs启动的是从网络的服务器(既我们的开发主机)拷贝到2440开发板的sdram中,这样看来只是挂载根文件系统的时候来源不同而已,启动后都是在开发板的sdram中运行。

linux的启动过程

bootloader ——> kernel ——> 根文件系统

只是启动内核后挂载根文件系统不同,这里引用一个网友的一段话

刚才分别试了一下从Nand Flash和nfs启动,以下是他们启动时输出的信息。
从Nand flash启动:
Copy linux kernel from 0x00060000 to 0x30008000, size = 0x00200000 ... done
zImage magic = 0x016f2818
Setup linux parameters at 0x30000100
linux command line is: "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0"
从nfs启动:
Copy linux kernel from 0x00060000 to 0x30008000, size = 0x00200000 ... done
zImage magic = 0x016f2818
Setup linux parameters at 0x30000100
linux command line is: "console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.11:/home/cneyo/root_qtopia -o nolock ip=192.168.1.9:192.168.1.11:192.168.1.1:255.255.255.0:mini2440:eth0:off"
从以上内容可以看出从Nand Flash启动和从nfs启动,Bootloader加载的内核都是来自Nand Flash的kernel分区,只是他们挂载的根文件系统不同而已

mini2440 root_qtopia 文件系统启动过程分析

http://www.arm9home.net/read.php?tid-1702-keyword-root%7C%B7%D6%CE%F6.html

2011-09-26 20:45


### Linux NFS 服务启动失败的原因分析及解决方案 #### 可能原因一:未正确安装 NFS 所需组件 NFS 的正常运行依赖于多个软件包的支持,例如 `rpcbind` 和 `nfs-kernel-server`。如果这些必要的组件未被正确安装,则可能导致 NFS 服务无法启动。 解决方法: 确保所有必需的软件包均已安装并处于最新状态。可以尝试重新安装或更新以下软件包: ```bash sudo apt-get update sudo apt-get install rpcbind nfs-kernel-server ``` 验证是否成功安装上述软件包[^1]。 --- #### 可能原因二:缺少 `/etc/exports` 配置文件 NFS 使用 `/etc/exports` 文件来定义共享目录及其权限设置。如果没有创建该文件或者其内容为空,可能会导致 NFS 服务启动失败。 解决方法: 编辑 `/etc/exports` 文件,添加需要共享的目录路径以及访问控制规则。例如: ```plaintext /share *(rw,sync,no_subtree_check) ``` 保存更改后,重启 NFS 服务以应用新的配置: ```bash sudo systemctl restart rpcbind sudo systemctl restart nfs-kernel-server ``` 注意:在修改 `/etc/exports` 文件时,请确保语法无误,否则可能引发其他错误[^3]。 --- #### 可能原因三:防火墙阻止了 NFS 流量 默认情况下,某些操作系统启用了防火墙功能(如 ufw 或 firewalld),这会拦截 NFS 协议所需的端口通信(通常是 TCP/UDP 端口 111 和动态分配的高范围端口)。因此,即使 NFS 已经启动完成,外部设备仍然无法连接到它。 解决方法: 允许特定端口号通过防火墙过滤器。对于基于 Debian 的发行版来说,可以通过下面命令开放所需端口: ```bash sudo ufw allow from any to any port 111 proto tcp sudo ufw allow from any to any port 2049 proto tcp sudo ufw reload ``` 如果是 CentOS/RHEL 类型系统则应调整如下: ```bash firewall-cmd --permanent --add-service=nfs firewall-cmd --reload ``` 确认防火墙不会干扰正常的 NFS 运作流程[^2]。 --- #### 可能原因四:RPC 绑定服务异常终止 由于历史遗留问题,部分版本中的 RPC (Remote Procedure Call) 功能可能存在兼容性缺陷,从而影响整个 NFS 架构稳定性。当遇到 “Failed to start nfs.service: Unit nfs.service not found.” 错误提示时,通常意味着底层支持机制存在问题。 解决方法: 单独测试 Rpcbind 是否能够独立运作良好;如果不稳定的话就考虑升级至更高版本的操作环境再部署新实例。 ```bash sudo systemctl status rpcbind ``` 必要时候可手动指定静态端口绑定方式减少不确定性因素带来的麻烦[^4]。 --- ### 总结 综上所述,针对当前描述的现象可以从以下几个方面入手排查具体成因,并采取相应措施加以修复: 1. **检查基础环境准备情况**——确认相关模块已被加载; 2. **完善导出列表设定细节**——依据实际需求补充完整参数选项; 3. **优化网络安全策略布局**——合理规划进出方向的数据流通道; 4. **深入挖掘潜在隐患所在**——借助日志记录定位深层次矛盾冲突点。 最终目标就是让 NFS 能够顺利初始化完毕进入待命模式供后续操作调用。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值