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

initramfs与rootfs 启动衔接

initramfs 是内核启动到真实 rootfs 的临时过渡层,核心链路为:内核加载 initramfs → 执行 /init 脚本准备环境 → 切换根到真实 rootfs → 执行真实 /sbin/init,最终完成从临时内存文件系统到持久存储根文件系统的移交。

核心概念与衔接目的

  • rootfs:内核启动时内置的特殊 ramfs/tmpfs 实例,始终存在且不可卸载,是所有根文件系统的底层载体。
  • initramfs:cpio 格式的临时内存文件系统,解决 “内核无驱动无法访问复杂存储(RAID/LUKS)” 的启动悖论。
  • 衔接目的:提供最小用户空间,加载磁盘控制器、文件系统、加密等驱动,完成真实 rootfs 挂载与切换。

initramfs的作用

rootfs内核启动自带、永远存在、不可卸载ramfs/tmpfs。是所有文件系统的祖先,内核一跑就有,不是你打包的。

initramfs(builtin)内核编译时内置的 cpio 归档,解压覆盖到 rootfs。嵌入式常用,PC 一般为空。

initramfs(external,即我们常说的 initramfs/initrd.img)bootloader 加载的外部 cpio 文件(initramfs-xxx.img),同样解压覆盖到 rootfs

本质:initramfs 就是往内核自带的 rootfs 里塞文件。

initramfs 不是什么

  1. 不是虚拟磁盘就是 cpio 压缩包,解压到 rootfs,不是块设备。

  2. 不是旧 initrd

    • initrd:是块设备、ext2、需要 ramdisk 驱动、用 pivot_root
    • initramfs:是文件系统、cpio、直接覆盖 rootfs、用 switch_root
  3. 不是可选的(现代系统)RHEL/Debian/Ubuntu/Android 全都必须用。只有极度简单嵌入式才可以不用。

1. 解决「启动悖论」—— 最根本作用

内核本身不能直接挂载真实根文件系统,因为:

  • 硬盘控制器驱动(AHCI/NVMe/SAS/RAID)
  • 文件系统驱动(ext4/xfs/btrfs)
  • 加密(LUKS)
  • 网络(NFS/iSCSI)
  • 多路径 / LVM / 阵列

这些都不是内核内置,而是模块(.ko)

悖论:

要读硬盘 → 要驱动

要驱动 → 要读硬盘里的 /lib/modules

initramfs 就是把驱动提前放进内存,打破悖论。

2. 提供「最早用户空间」

内核启动最后一步:

kernel_init -> run_init_process("/init")

如果没有 initramfs,内核直接尝试挂载root=并运行/sbin/init。一旦失败 →kernel panic

有 initramfs:内核先运行 initramfs 里的 /init,这是整个系统第一个用户空间进程(PID 1)

3. 做「真实根文件系统启动前的所有准备工作」

initramfs 的/init负责:

  • 挂载proc / sys / dev / devpts
  • 加载硬件驱动(存储、总线、文件系统)
  • 扫描磁盘、UUID、PARTUUID、LVM、RAID
  • 解密 LUKS
  • 网络配置(NFS/iSCSI 远程根)
  • 挂载真实根到/new_root

这些事情内核自己做不了,必须用户空间。

4. 实现「根切换 switch_root」,完成系统交接

这是 initramfs最核心的收尾动作

exec switch_root /new_root /sbin/init

switch_root 做了什么(内核级机制):

  1. 清空当前 rootfs 里所有文件(释放内存)
  2. /new_root通过MS_MOVE移到/
  3. chroot进入新根
  4. 用真实系统的 init 替换当前 PID 1

完成从临时根 → 真实根的无缝交接

5. 提供强大的启动容错与修复能力

因为 initramfs 运行在真实根之前,所以可以:

  • 启动失败进入emergency shell
  • 挂载失败、磁盘异常、UUID 变了都能修复
  • 支持加密密码输入
  • 支持远程 ssh 解锁 LUKS(dracut-sshd)
  • 支持调试内核启动问题

没有 initramfs,一旦启动错了直接黑屏 panic。

完整衔接流程

1. 加载阶段(Bootloader → 内核)

Bootloader(GRUB/U-Boot)将内核与 initramfs 加载到内存,内核解压 initramfs 到 rootfs 根目录,将其作为临时根(/)。

2. 执行 /init(临时根初始化)

内核执行 initramfs 中的 /init(脚本或二进制),完成基础环境搭建:

  1. 挂载 proc、sys、dev 等伪文件系统;
  2. 加载必要内核模块(如 NVMe、ext4、LUKS);
  3. 扫描并准备根设备(LVM 激活、RAID 组装、LUKS 解密);
  4. 挂载真实 rootfs 到临时目录(如 /new_root)。

3. 切换根(核心衔接动作)

现代系统使用switch_root(initramfs 专属,更轻量),替代传统 pivot_rootT:

  1. 清理临时根:递归删除 rootfs 内所有 initramfs 文件(释放内存);
  2. 覆盖挂载:将真实 rootfs 从 /new_root 移动挂载到 /(MS_MOVE);
  3. 切换根目录:执行 chroot 切换到新根;
  4. 执行真实 init:exec 真实 rootfs 的 /sbin/init(或内核参数 init= 指定程序)。

4. 移交控制权

新 /sbin/init(如 systemd)成为 PID 1 进程,接管系统初始化,加载系统服务。

5. 清理临时资源

系统启动后,自动卸载并释放 initramfs 占用的内存资源The Linux Kernel Archives。

6. 系统正常运行

进入真实 rootfs 环境,完成后续服务启动、用户登录等流程。

switch_root 与 pivot_root 区别

特性switch_root(initramfs 专用)pivot_root(传统 initrd)
适用场景临时根切换到真实根传统根设备切换
根清理强制删除当前根所有文件保留旧根(需手动卸载)
内存效率更高(直接释放空间)较低(需 umount 旧根)
内核要求基于 rootfs 不可卸载特性支持块设备根切换

2. 内核参数关键配置

  • root=:指定真实 rootfs 设备(如 /dev/sda2、LABEL=root);
  • init=:指定初始 init 程序(默认 /sbin/init);
  • rdinit=:指定 initramfs 内的 init 程序(默认 /init);
  • rootflags=:传递 rootfs 挂载参数(如 noatime)。

3. 常见故障排查

  1. 切换根失败:检查真实 rootfs 是否挂载、/init 脚本权限、驱动是否加载;
  2. 找不到根设备:核对 root= 参数、验证 initramfs 包含对应驱动;
  3. 内核 panic:查看 dmesg 日志,定位驱动缺失或挂载错误。

总结

initramfs 与 rootfs 的衔接核心是 “临时准备→根切换→移交控制”,switch_root 是关键衔接工具,依赖 rootfs 不可卸载特性实现高效切换。理解该流程,可高效排查启动故障、定制 initramfs 或优化嵌入式系统启动流程。

http://www.jsqmd.com/news/580791/

相关文章:

  • 论文答辩前AI率高的同学,这几个工具能救急 - 我要发一区
  • ADM7150ACPZ-3.3-R7是一款具备 800mA 电流输出能力的超低噪声线性稳压器
  • 番茄小说下载器完整指南:3步永久保存你喜欢的网络小说
  • Windows热键冲突终结指南:3分钟快速定位占用程序的终极方案
  • 实战应用:基于快马ai为全栈项目快速构建集成wsl2开发环境
  • Qwen3-14B-Int4-AWQ在嵌入式开发中的应用:STM32F103C8T6项目文档自动生成
  • 破茧成蝶:Java后端从0到资深工程师的进阶之路(六)
  • Python自动化抢票实战:告别手动抢票,用技术提升成功率
  • intv_ai_mk11镜像免配置价值:节省开发者平均8.2小时/人环境搭建时间实证
  • 万象视界灵坛代码实例:Python调用CLIP-ViT-L/14提取图像文本嵌入向量
  • 解放双手:鸣潮自动化工具的智能革命与实践指南
  • 专业的哈尔滨聚合氯化铝知名厂家
  • 30分钟搭建你的AI视觉导师:零代码部署交互式CNN学习平台
  • 沃尔玛购物卡还能回收?简单方法助你快速变现! - 团团收购物卡回收
  • 数据仓库性能优化:聚合策略设计与查询加速实战指南
  • Switch手柄PC适配问题解决方案:从驱动安装到高级功能配置的实战指南
  • 吃韭菜和鳊鱼也会春天出鼻血,是太发了吗?到底什么原因?如何解决?
  • 深圳华建净净化工程技术探讨-洁净厂房选址、布局与建设核心技术规范
  • 高效掌握流媒体下载与直播录制:N_m3u8DL-RE全功能技术指南
  • Windows 11 24H2 LTSC 微软商店一键安装完整指南:3分钟恢复完整应用生态
  • 音乐文件格式转换工具QMCDUMP深度探索:从加密困境到自由播放
  • 企业级多语本地化工具落地:Pixel Language Portal生产环境部署详解
  • 长春洗浴设计企业市场排名
  • 高股息成避风港,红利低波ETF华夏(159547)震荡市显韧性
  • 激光雷达点云处理掉帧率高达17%?用C++20协程重写感知pipeline后,端到端延迟压至21.3ms(实车路测原始日志验证)
  • 矢量到像素的无缝过渡:Ai2Psd效率工具解决方案
  • 5步解锁Windows隐藏性能:RyTuneX系统优化实战指南
  • 科创芯片ETF(589100)大涨超3.5%,AI+涨价潮点燃芯片景气
  • 魔兽争霸III优化神器:WarcraftHelper插件终极使用指南
  • 抖音达人粉丝与品牌目标人群不符?小青苔3步解决精准匹配问题