initramfs与dracut总结

原创 Linux二进制 2024-09-20 08:20

initramfs 和 dracut 是 Linux 系统中与系统启动相关的两个概念。在我们进行内核驱动开发以及测试过程中,可能会接触到,网上的博客大都写的比较晦涩难懂,俗话讲:“好记性不如烂笔头”,于是便想自己总结一下,以便后续用到的时候拿出来看一下;经过查阅资料以及实践,下面将进行详细的归纳总结和说明。

1. initramfs 概述

initramfs 是 initial RAM filesystem 的缩写,指的是 Linux 启动时加载的初始文件系统。它是在操作系统启动过程中,由 Linux 内核在非常早期阶段加载的一个小型文件系统,通常包含一个最小化的环境,包括基本的命令行工具和脚本,以便在启动过程中执行必要的操作。

initramfs 的作用

  • 引导过程initramfs 是内核加载的第一个文件系统,主要负责挂载根文件系统(/)并启动用户空间的服务。

  • 硬件驱动支持:它通常包含与系统硬件相关的驱动程序和必要的模块(如磁盘、网络等),以确保系统能够访问存储设备并加载根文件系统。

  • 灵活性:与以前的 initrdInitial RAM Disk)不同,initramfs 使用的是压缩的 CPIO 文件系统,可以被内核直接解压并加载到内存中,它更加灵活且支持动态构建。

    拓展CPIOCPIOCopy In/Out)是一种归档文件格式,它的名称来源于 copy in 和 copy out,意味着它可以将文件复制到归档中(归档),以及从归档中复制文件出来。常用于 Linux 和 Unix 系统中。它主要用于创建和提取归档文件,特别是在生成 initramfs 映像时非常常见。详情见 CPIO 官方文档(https://www.gnu.org/software/cpio/manual/cpio.html)。

initramfs 的应用流程

  1. 内核加载:内核从 /boot 中加载 initramfs 文件。
  2. 解压缩:内核解压 initramfs,并将它挂载为一个临时根文件系统。
  3. 执行启动脚本:在 initramfs 中包含了基本的用户空间工具和脚本,帮助内核探测硬件、加载必要的模块。
  4. 挂载实际根文件系统initramfs 负责找到并挂载实际的根文件系统(通常是 /dev/sda1 等),然后切换到根文件系统。
  5. 启动系统:切换后,内核从新的根文件系统启动整个操作系统。

2. dracut 概述

dracut 是一个现代化的、通用的 initramfs 生成工具,能够根据系统的实际需求来构建适当的 initramfs 文件。

dracut 的特点

  • 模块化dracut 使用模块化设计,构建 initramfs 时根据系统的实际情况加载所需的模块,避免加载不必要的驱动和工具,从而提高启动效率。
  • 灵活生成:它能够根据具体的系统配置生成不同的 initramfs 文件,比如基于 LVM、加密文件系统(LUKS)、RAID 等特性。
  • 精简高效:生成的 initramfs 只包含启动系统的必要工具和模块,避免了资源浪费。

dracut 的常用命令

  • dracut -f强制重建 initramfs 文件。-f 参数表示覆盖现有的 initramfs 文件,通常用于系统内核更新或系统硬件发生变化后,重新生成与新配置匹配的 initramfs。生成的 initramfs 映像通常位于 /boot 目录下,文件名类似于 initramfs-.img
  • dracut -v:显示详细输出,调试生成过程。
  • dracut --list-modules:列出所有可用的模块。
  • dracut --omit :在生成 initramfs 时忽略指定模块。

dracut 的使用场景

  • 内核更新后:每次系统内核更新时,都会生成新的 initramfs 文件,确保新内核能够正常启动。如果因为某些原因没有自动生成或遇到问题,使用 dracut -f 手动重建 initramfs 是常见的解决方法。

  • 硬件变更:如果添加了新硬件设备或者更改了存储设备配置(如 RAIDLVM、文件系统类型等),也需要重新生成 initramfs

  • 修改 initramfs 配置:如果您对 initramfs 的配置进行了修改(如添加了自定义脚本或驱动程序),需要重新生成 initramfs 以应用这些更改。

  • 修复启动问题:在某些系统启动问题中,比如根文件系统无法挂载、启动过程中找不到设备驱动或者设备驱动无法卸载时,重建 initramfs 可以帮助修复这些问题。设备驱动无法卸载时,使用 dracut -f 更新 initramfs 的示例如下:

    [root@localhost ~]# lsmod | grep nfp
    nfp 655360 0
    [root@localhost ~]#
    [root@localhost ~]# rmmod nfp
    rmmod: ERROR: could not remove 'nfp': Device or resource busy
    rmmod: ERROR: could not remove module nfp: Device or resource busy
    [root@localhost src]#
    [root@localhost src]# rm -rf /lib/modules/4.18.0-193.28.1.an7.aarch64/kernel/drivers/net/ethernet/netronome/nfp/nfp.ko.xz
    [root@localhost src]#
    [root@localhost src]# dracut -f #给内核进行重建initramfs文件
    /usr/lib/dracut/modules.d/90kernel-modules/module-setup.sh: line 16: /lib/modules/4.18.0-193.28.1.an7.aarch64//kernel/drivers/net/ethernet/netronome/nfp/nfp.ko.xz: No such file or directory
    dracut-install: ERROR: installing '/lib/modules/4.18.0-193.28.1.an7.aarch64/kernel/drivers/net/ethernet/netronome/nfp/nfp.ko.xz'
    modinfo: ERROR: Module /lib/modules/4.18.0-193.28.1.an7.aarch64/kernel/drivers/net/ethernet/netronome/nfp/nfp.ko.xz not found.
    [root@localhost src]# lsmod | grep nfp
    nfp 655360 0
    [root@localhost src]#
    [root@localhost src]# reboot

    Remote side unexpectedly closed network connection

    ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

    Session stopped
    - Press to exit tab
    - Press R to restart session
    - Press S to save terminal output to file
    ┌──────────────────────────────────────────────────────────────────────┐
    │ • MobaXterm Personal Edition v22.0 • │
    │ (SSH client, X server and network tools) │
    │ │
    │ ➤ SSH session to root@10.8.2.113 │
    │ • Direct SSH : ✔ │
    │ • SSH compression : ✔ │
    │ • SSH-browser : ✔ │
    │ • X11-forwarding : ✘ (disabled or not supported by server) │
    │ │
    │ ➤ For more info, ctrl+click on help or visit our website. │
    └──────────────────────────────────────────────────────────────────────┘


    Last login: Tue Sep 19 15:46:16 2023 from 10.9.4.195
    [root@localhost ~]# lsmod | grep nfp
    [root@localhost ~]#
    [root@localhost ~]# rpm -qa | grep nfp
    [root@localhost ~]#

    这段代码的主要操作如下:

    通过这些操作,我们使用 dracut 重建了 initramfs,在系统重启后成功地移除了 nfp 模块。

    • 检查并尝试卸载 nfp 模块:发现 nfp 模块正在使用中,无法卸载。

    • 删除 nfp 模块文件:手动删除了 nfp.ko.xz 文件。

    • 重建 initramfs 文件:由于 nfp.ko.xz 文件已被删除,dracut 报错。

    • 重启系统:系统重启后,nfp 模块不再加载。

    • 检查系统中是否还有 nfp 相关的 RPM 包:没有找到与 nfp 相关的 RPM 包。


3. initramfs 和 dracut 之间的关系

dracut 是构建 initramfs 的工具。initramfs 是一个文件系统映像,包含了系统启动时最基本的用户空间工具和驱动,dracut 则是生成这个 initramfs 的软件。dracut 根据系统的实际配置(如磁盘分区、文件系统类型、LVMRAID 等)选择合适的模块并生成 initramfs,从而确保系统在启动过程中可以正常加载硬件驱动并挂载根文件系统。

总结如下:

  • initramfs 是内核启动时加载的初始文件系统,主要负责挂载系统的根文件系统和启动用户空间。
  • dracut 是生成 initramfs 文件的工具,提供灵活的模块化机制,能够根据系统需求生成定制化的启动映像。
  • 使用 dracut -f 可以强制重新生成 initramfs,通常用于内核更新或系统硬件配置变更后,确保系统能够正常启动。

4. dracut -f 生成 initramfs 流程图

为了更好地理解 dracut 生成 initramfs 的过程,下面给出一个简化的流程图:

+---------------------+                      +-------------------+
| dracut -f 命令 |----> 模块检测 -----> | 选择必要模块 |
+---------------------+ +-------------------+
|
v
+---------------------+ +--------------------+
| 加载硬件相关驱动 |----> 生成 initramfs -----> | 压缩成映像文件 |
+---------------------+ +--------------------+
|
v
+---------------------+ +-------------------+
| /boot 目录中生成 |----> 生成完成 -----> | 准备引导系统 |
+---------------------+ +-------------------+
  • 第一步dracut -f 命令发起生成 initramfs 文件。
  • 第二步dracut 检测系统当前硬件和配置,选择所需的驱动模块。
  • 第三步:加载相关模块(如 LVMRAID、磁盘驱动等)并生成 initramfs 文件。
  • 第四步:将 initramfs 压缩成映像文件并保存到 /boot 目录中。
  • 第五步:引导过程中,内核从 /boot 加载生成的 initramfs,完成系统启动。

根据以上步骤,dracut 生成的 initramfs 能够保证内核在启动时加载必要的模块和驱动,并顺利挂载根文件系统。

通过理解和正确使用 dracut 和 initramfs,您可以更好地管理和维护您的 Linux 系统,确保其顺利启动和运行。


Linux二进制 Linux编程、内核模块、网络原创文章分享,欢迎关注"Linux二进制"微信公众号
评论
  • 大模型的赋能是指利用大型机器学习模型(如深度学习模型)来增强或改进各种应用和服务。这种技术在许多领域都显示出了巨大的潜力,包括但不限于以下几个方面: 1. 企业服务:大模型可以用于构建智能客服系统、知识库问答系统等,提升企业的服务质量和运营效率。 2. 教育服务:在教育领域,大模型被应用于个性化学习、智能辅导、作业批改等,帮助教师减轻工作负担,提高教学质量。 3. 工业智能化:大模型有助于解决工业领域的复杂性和不确定性问题,尽管在认知能力方面尚未完全具备专家级的复杂决策能力。 4. 消费
    丙丁先生 2025-01-07 09:25 80浏览
  • 每日可见的315MHz和433MHz遥控模块,你能分清楚吗?众所周知,一套遥控设备主要由发射部分和接收部分组成,发射器可以将控制者的控制按键经过编码,调制到射频信号上面,然后经天线发射出无线信号。而接收器是将天线接收到的无线信号进行解码,从而得到与控制按键相对应的信号,然后再去控制相应的设备工作。当前,常见的遥控设备主要分为红外遥控与无线电遥控两大类,其主要区别为所采用的载波频率及其应用场景不一致。红外遥控设备所采用的射频信号频率一般为38kHz,通常应用在电视、投影仪等设备中;而无线电遥控设备
    华普微HOPERF 2025-01-06 15:29 127浏览
  • 这篇内容主要讨论三个基本问题,硅电容是什么,为什么要使用硅电容,如何正确使用硅电容?1.  硅电容是什么首先我们需要了解电容是什么?物理学上电容的概念指的是给定电位差下自由电荷的储藏量,记为C,单位是F,指的是容纳电荷的能力,C=εS/d=ε0εrS/4πkd(真空)=Q/U。百度百科上电容器的概念指的是两个相互靠近的导体,中间夹一层不导电的绝缘介质。通过观察电容本身的定义公式中可以看到,在各个变量中比较能够改变的就是εr,S和d,也就是介质的介电常数,金属板有效相对面积以及距离。当前
    知白 2025-01-06 12:04 170浏览
  • By Toradex 秦海1). 简介嵌入式平台设备基于Yocto Linux 在开发后期量产前期,为了安全以及提高启动速度等考虑,希望将 ARM 处理器平台的 Debug Console 输出关闭,本文就基于 NXP i.MX8MP ARM 处理器平台来演示相关流程。 本文所示例的平台来自于 Toradex Verdin i.MX8MP 嵌入式平台。  2. 准备a). Verdin i.MX8MP ARM核心版配合Dahlia载板并
    hai.qin_651820742 2025-01-07 14:52 44浏览
  • 本文介绍Linux系统更换开机logo方法教程,通用RK3566、RK3568、RK3588、RK3576等开发板,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。制作图片开机logo图片制作注意事项(1)图片必须为bmp格式;(2)图片大小不能大于4MB;(3)BMP位深最大是32,建议设置为8;(4)图片名称为logo.bmp和logo_kernel.bmp;开机
    Industio_触觉智能 2025-01-06 10:43 87浏览
  • 村田是目前全球量产硅电容的领先企业,其在2016年收购了法国IPDiA头部硅电容器公司,并于2023年6月宣布投资约100亿日元将硅电容产能提升两倍。以下内容主要来自村田官网信息整理,村田高密度硅电容器采用半导体MOS工艺开发,并使用3D结构来大幅增加电极表面,因此在给定的占位面积内增加了静电容量。村田的硅技术以嵌入非结晶基板的单片结构为基础(单层MIM和多层MIM—MIM是指金属 / 绝缘体/ 金属) 村田硅电容采用先进3D拓扑结构在100um内,使开发的有效静电容量面积相当于80个
    知白 2025-01-07 15:02 75浏览
  • 在智能家居领域中,Wi-Fi、蓝牙、Zigbee、Thread与Z-Wave等无线通信协议是构建短距物联局域网的关键手段,它们常在实际应用中交叉运用,以满足智能家居生态系统多样化的功能需求。然而,这些协议之间并未遵循统一的互通标准,缺乏直接的互操作性,在进行组网时需要引入额外的网关作为“翻译桥梁”,极大地增加了系统的复杂性。 同时,Apple HomeKit、SamSung SmartThings、Amazon Alexa、Google Home等主流智能家居平台为了提升市占率与消费者
    华普微HOPERF 2025-01-06 17:23 145浏览
  • 根据环洋市场咨询(Global Info Research)项目团队最新调研,预计2030年全球无人机锂电池产值达到2457百万美元,2024-2030年期间年复合增长率CAGR为9.6%。 无人机锂电池是无人机动力系统中存储并释放能量的部分。无人机使用的动力电池,大多数是锂聚合物电池,相较其他电池,锂聚合物电池具有较高的能量密度,较长寿命,同时也具有良好的放电特性和安全性。 全球无人机锂电池核心厂商有宁德新能源科技、欣旺达、鹏辉能源、深圳格瑞普和EaglePicher等,前五大厂商占有全球
    GIRtina 2025-01-07 11:02 68浏览
  • 根据Global Info Research项目团队最新调研,预计2030年全球封闭式电机产值达到1425百万美元,2024-2030年期间年复合增长率CAGR为3.4%。 封闭式电机是一种电动机,其外壳设计为密闭结构,通常用于要求较高的防护等级的应用场合。封闭式电机可以有效防止外部灰尘、水分和其他污染物进入内部,从而保护电机的内部组件,延长其使用寿命。 环洋市场咨询机构出版的调研分析报告【全球封闭式电机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球封闭式电机总体规
    GIRtina 2025-01-06 11:10 104浏览
  • 彼得·德鲁克被誉为“现代管理学之父”,他的管理思想影响了无数企业和管理者。然而,关于他的书籍分类,一种流行的说法令人感到困惑:德鲁克一生写了39本书,其中15本是关于管理的,而其中“专门写工商企业或为企业管理者写的”只有两本——《为成果而管理》和《创新与企业家精神》。这样的表述广为流传,但深入探讨后却发现并不完全准确。让我们一起重新审视这一说法,解析其中的矛盾与根源,进而重新认识德鲁克的管理思想及其著作的真正价值。从《创新与企业家精神》看德鲁克的视角《创新与企业家精神》通常被认为是一本专为企业管
    优思学院 2025-01-06 12:03 116浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦