当前位置: 首页 > news >正文

通过u-boot启动Linux时的根文件系统挂载流程(init进程可能会进行二次挂载)

本文是博文 https://blog.csdn.net/wenhao_ir/article/details/146051313 的子博文。

在 Linux 启动过程中,默认情况下 init 进程可能会重新挂载根文件系统,这是因为 内核最初挂载根文件系统的方式可能不符合用户空间的需求


1. Linux 启动时的根文件系统挂载流程

  1. 内核挂载根文件系统

    • 内核根据 bootargs 里的 root= 选项找到根文件系统设备,并尝试挂载它。
    • 例如:
      root=/dev/mmcblk1p2 rootwait rw
      
    • 这表示 内核会挂载 /dev/mmcblk1p2 作为根文件系统,并设置为读写模式(rw)
  2. init 可能重新挂载

    • 进入用户空间后,init 进程(比如 systemdinit 脚本)可能会 重新挂载根文件系统,原因包括:
      • 需要挂载为 只读(ro) 进行完整性检查
      • 需要进行 文件系统修复(fsck)
      • 需要 调整挂载选项(如启用 journaling 或其他参数)
    • 具体方式取决于 /etc/fstab 里的配置。例如:
      /dev/mmcblk1p2 / ext4 ro 0 1
      
      这会让 init 重新挂载 /dev/mmcblk1p2只读(ro)
  3. init 可能执行 mount -o remount

    • 一些系统 启动时默认挂载根文件系统为只读,然后 init 在适当的时候 重新挂载为读写
      mount -o remount,rw /
      
    • 这样可以确保文件系统在启动时得到保护,并且 fsck 检查完成后才进入读写模式。

2. 为什么 init 需要重新挂载?

  • 文件系统检查(fsck)
    • 某些系统在启动时会先以 只读模式(ro) 挂载根文件系统,以便 fsck 检查并修复错误,确保数据完整性。
  • 日志文件系统(Journaling)调整
    • 部分文件系统(如 ext4)可能需要在 init 阶段调整日志模式或启用 barrier 等选项,因此 init 会重新挂载。
  • 系统安全和完整性
    • 在某些嵌入式系统中,默认以 只读模式(ro) 运行,以防止意外修改系统文件,init 可能在需要时切换为读写模式(rw)。
  • 挂载选项调整
    • init 可能根据 /etc/fstab 里的配置改变挂载方式,例如:
      /dev/mmcblk1p2 / ext4 defaults,noatime 0 1
      
      这样 init 会重新挂载 mmcblk1p2 并启用 noatime 选项。

3. rw 在 u-boot的bootargs 中的作用

  • rw内核直接以读写模式(rw)挂载根文件系统,避免 init 重新挂载。
  • 但即使 bootargs 里写了 rwinit 仍然可以在启动过程中重新挂载根文件系统(通常基于 /etc/fstab 配置)。
  • 如果 bootargs 里是 ro,那么 init 可能会 检查文件系统后再挂载为 rw

4. 结论

  • Linux 内核挂载根文件系统后,init 可能会根据需要重新挂载(remount)。
  • 如果 bootargs 里是 rw,内核会直接以读写模式挂载,但 init 仍然可以重新挂载。
  • 如果 bootargs 里是 ro,系统可能会先进行 fsck,然后 init 在适当的时候 remount rw
  • 嵌入式系统有时会默认 ro,以提高可靠性,防止意外修改文件系统。

相关文章:

  • 前端实现版本更新自动检测✅
  • Redis渐进式遍历数据库
  • Mybatis中的分页操作,如何使用PageHelper进行分页,以及Spring Boot整合Mybatis Plus分页
  • Flink深入浅出之02:编程模型、数据源、算子、connector
  • 单片机中的基础外设GPIO的知识和应用—(6)
  • 门面设计模式和适配器模式有什么区别
  • 接口测试之curl命令详解
  • 自注意力机制的演进-从Transformer架构到DeepSeek-R1模型的深度语义理解革新
  • 双足机器狗开发:Rider - Pi
  • Wireshark的OSPF报文抓包和分析(单区域ospf实验)
  • 写一写idea中使用tomcat启动activiti过程
  • docker目录挂载与卷映射的区别
  • C语言学习笔记(week2)2-24 3-2
  • 【音视频】ffplay播放控制
  • LangChain教程 - Agent - 支持 9 种 ReAct 交互
  • 数字逻辑与FPGA实现基础
  • k-Shape:高效准确的聚类方法
  • VPC2-多域攻击-tomcat渗透-通达oa-域控提权-密码喷射-委派攻击-数据库提权
  • 人工智能 模型中D*算法的逻辑
  • 云存储的安全性之代理IP如何确保文件不被未授权访问
  • 黄冈商城网站建设哪家好/青岛seo服务公司
  • 织梦的官方网站/seo技术服务外包公司
  • h5手机模板网站/公司网站设计报价
  • 网站空间域名每年都得交吗/微信营销推广公司
  • 设计师必须知道的十个网站/黄页88网推广服务
  • 小程序官方文档/热狗seo优化外包