19

据我了解,initrd 是一个可加载到 RAM 中的小图像。它用于引导具有所有可加载模块的完整内核。作为该过程的一部分,我们需要 vmlinuz 内核映像,它是 bzImage 的重命名版本。

是否可以在不创建 initrd 映像的情况下启动内核?

4

5 回答 5

26

initrd/initramfs 是可选的,不是必需的。bzImage 是纯内核镜像,可以通过引导加载程序直接启动。然而,可能需要执行一些通常需要访问文件系统和用户空间工具的任务(加载文件系统模块、磁盘访问驱动程序、从某些可交换介质安装根文件系统而没有固定名称/路径等)。

这就是initramfs的用途:它是一个 CPIO 存档,在内核映像本身或引导加载程序在引导时附加到内核映像(内核映像是 initramfs 的容器,而不是其他方式)。

该 CPIO 存档包含一个初始 rootfs,其中包含设置所有设备以访问正确的根文件系统所需的模块和一些程序来识别这些设备、加载模块、执行一些其他启动任务,将正确的根文件系统重新挂载到 / 并启动 /sbin /在里面

initrd类似,主要区别在于它是一个文件系统映像,可能并且通常是压缩的。内核必须支持内置使用的文件系统,并将此映像挂载为初始 /。

由于 CPIO 简单了几个数量级,因此 initramfs 比 initrd 更受欢迎,因为这既节省了对任何内置文件系统模块的要求,也使 initramfs 的创建更容易。无需创建 ext2 映像、loopdevice 挂载和填充它,它归结为一个简单的存档创建,与使用 tar 不同。

但是,如果您使用内核映像中内置的所有必需驱动程序和模块编译内核,并且您的根文件系统设备在系统中具有固定名称,则您不需要 initramfs,因为内核可以自己做事。

于 2011-06-19T21:16:38.687 回答
6

最小的 QEMU + Buildroot 示例

这是一个最小的具体示例,表明 initrd 不是强制性的:https ://github.com/cirosantilli/linux-kernel-module-cheat/tree/0b4f156b1b536a89c90882ed8ce551abcd3780af#initrd

通过该设置,我们可以轻松运行两个工作的 QEMU 命令类型:

qemu-system-x86_64 -drive file=rootfs.ext2

和:

qemu-system-x86_64 -initrd rootfs.cpio

在哪里:

  • rootfs.ext2并且rootfs.cpio基本上是相同的根文件系统,但格式不同
  • 第一个命令有一个硬盘驱动器,没有-initrd
  • 第二个命令一个-initrd但没有硬盘

在这两种情况下,Linux 都可以正常启动,除了在-initrd系统中,文件写入不是持久的,因为所有内容都在内存中。

于 2018-02-16T09:44:38.080 回答
5

initrd 包含理解根文件系统所需的模块,因此能够访问内核模块的正常存储。

如果您的内核是使用所有内置代码编译的,而不是作为模块编译的,则不需要 initrd。

于 2011-06-19T21:14:33.520 回答
3

是的,您可以在没有 initrd 映像的情况下引导系统。

initrd 映像要么是压缩的 ramdisc 映像,要么是(现在更常见的)压缩的 .cpio 映像。

在后一种情况下,.cpio 被扩展为一个名为 initramfs 的文件系统。

如果 .cpio 映像不存在,内核将使用内置映像,它只包含一些特殊文件(例如 /dev/console、/dev/null 和一些目录),但没有二进制文件。

然后内核使用一些内置的逻辑和命令行选项来尝试查找并挂载“真正的”根文件系统,该文件系统挂载在 initramfs 的“上方”,因此将其隐藏。

这种“传统”引导系统在现代发行版中大多不使用。

于 2011-06-20T09:06:39.933 回答
-1

我的 Debian Linux 机器中有一个自定义内核。我自己编译内核,然后将它们用于 dpkg 系统的知识。

配置内核时,我首先删除的是 initrd。我知道我的装备如何访问根文件系统(串行 ATA、SCSI 支持、SCSI 磁盘和 ext4),所以我将它们编译到内核中。其他模块可从根文件系统 /lib/modules 访问

这救了我很多次。如果出现问题,内核会将我带到一个工作提示符,我可以使用它来访问我的装备。如果 initrd 坏了,我需要一个引导棒(通常会丢失)。现在,当内核知道如何才能进入引导提示时,我可以使用我的系统工具来解决问题。

于 2020-07-28T16:42:39.097 回答