详解initramfs、mkinitrd 和 dracut 📅 2026/7/13 15:21:37 在Linux系统中initramfs、mkinitrd和dracut都是与系统启动过程密切相关的工具。它们用于生成引导系统时所需的初始环境用于加载必要的驱动程序和挂载根文件系统。在启动过程中它们帮助系统完成从引导加载程序到完全加载操作系统的过渡。1.initramfs初始内存文件系统概述initramfs是一种被引导加载程序加载到内存中的cpio压缩包它作为系统启动过程中临时使用的根文件系统包含启动所需的基本驱动程序和脚本。它在系统启动的早期阶段使用主要任务是加载必要的内核模块、挂载根文件系统并将控制权交给实际的操作系统。initramfs是一个存储在内存中的文件系统映像在启动时解压缩到RAM中。主要特性嵌入内核有时initramfs 直接内嵌在内核中。替代 initrdinitramfs 是 initrd 的现代替代因其更灵活且效率更高。CPIO 压缩包格式与 initrd 不同initramfs 不是文件系统映像而是 cpio 格式的压缩包。直接执行内核可以直接执行 initramfs 中的内容无需挂载。使用场景大多数现代 Linux 发行版默认使用initramfs。2.mkinitrd概述mkinitrd是一个较旧的工具用于生成initrd初始内存磁盘或initramfs映像。它主要用于在系统启动时创建一个内存磁盘映像其中包含用于挂载根文件系统所需的驱动模块。它生成一个小型的可引导内存磁盘映像包含启动时加载驱动程序所需的内核模块和脚本。initrd是引导加载程序在启动时加载到内存中的文件。主要特性旧工具mkinitrd 主要用于较早的 Linux 发行版创建 initrd 或 initramfs。可定制mkinitrd 允许用户将自定义驱动程序和文件包含在初始内存磁盘中。模块化它允许用户选择性地包含特定的内核模块用于系统启动。使用场景现代 Linux 系统已大部分用dracut或initramfs-tools替代mkinitrd但它在某些老旧系统中仍可使用。命令示例bash代码解读复制代码mkinitrd /boot/initrd-$(uname -r).img $(uname -r)3.dracut概述dracut是一个现代化的工具用于生成 Linux 内核启动时使用的initramfs。与旧工具相比dracut更加灵活和模块化。不同于mkinitrd仅创建一个包含启动所需驱动程序的最小环境dracut会生成一个完整的、模块化的 initramfs 映像包含多种内核模块和脚本以支持几乎所有系统配置。dracut动态生成 initramfs根据当前系统的需求来构建 initramfs使其比mkinitrd更加灵活。主要特性模块化系统不同的 dracut 模块会根据系统需求被包含或排除。动态生成initramfs 会根据系统配置动态生成。广泛支持支持多种复杂的配置例如 LVM、加密文件系统、网络启动等。处理复杂启动设置可以处理 RAID、LVM、加密分区、网络启动等复杂场景。使用场景dracut是现代 Linux 发行版的默认工具包括 Fedora、Red Hat、SUSE 和 OpenSUSE 等。命令示例bash代码解读复制代码dracut --force /boot/initramfs-$(uname -r).img $(uname -r)关键区别特性initramfsmkinitrddracut目的提供一个初始的RAM文件系统有时嵌入到内核中。创建用于启动系统的initrd或initramfs。根据系统需求动态生成initramfs。灵活性静态通常需要手动包含模块。旧系统中使用手动包含驱动程序。高度模块化自动包含所需模块。模块化模块化有限。模块化有限需要更多手动操作。高度模块化使用系统需求动态加载模块。使用场景现代 Linux 发行版中的默认文件系统。旧版 Linux 系统中使用。现代 Linux 系统中的默认工具。文件系统使用 cpio 压缩包格式。传统上使用压缩文件系统initrd。使用 cpio 压缩包格式并自动加载所需驱动。内核版本用于较新版本的 Linux 内核。用于旧版 Linux 系统。现代 Linux 发行版的默认工具。高级功能用于基本的系统启动。基本支持挂载文件系统和加载驱动。支持 LVM、RAID、加密分区和网络启动等复杂配置。实际使用使用 Dracut 创建 Initramfsbash代码解读复制代码dracut --force /boot/initramfs-$(uname -r).img $(uname -r)使用 mkinitrd旧工具创建 Initrdbash代码解读复制代码mkinitrd /boot/initrd-$(uname -r).img $(uname -r)总结initramfs在启动时使用的实际初始文件系统加载到内存中是 initrd 的现代替代品。mkinitrd旧工具用于生成初始内存磁盘initrd或 initramfs大多数已被dracut取代。dracut现代的、灵活的工具动态生成 initramfs是现代 Linux 系统中的默认工具。