为什么我们需要 initramfs 和 initrd

sol*_*ron 5 boot kernel initrd initramfs init

例如,我们在磁盘上有外来文件系统,为了加载系统,我们需要挂载根文件系统。但是我们不能,因为内核映像中不存在合适的驱动程序。

让我来解释我是如何理解kernelinitrd

  1. 编译内核时,我们可以选择要包含在内核映像中的不同模块(单个文件)
  2. 例如,我的根文件系统是,reiserfs并且我已将内核配置为不包含module此文件系统
  3. 在这种情况下,内核不知道如何挂载这样的文件系统,它需要一些帮助 -> 所以加载initramfs到内存中
  4. 在 ram fs (lib/modules 等) 中找到合适的模块
  5. 将此模块加载到内核
  6. 现在内核可以挂载reiserfs它,然后卸载(释放)占用的内存ramfs

我对吗 ?

但是我不明白为什么我们需要initramfs在每个发行版中(我在我安装过的每个发行版中都看到过)如果大多数特定驱动程序已经存在于内核映像(单个文件)中,而且我们只需要内核驱动程序时的文件系统驱动程序boots 其他驱动程序可以在挂载后从文件系统加载。

那么它真的是任何发行版的重要组成部分吗?

PS 什么更经常使用initramfsinitrd为什么?

Hen*_*ity 4

力量来自于除了加载模块之外你可以做的所有其他事情。基本上,它为您提供了一个用户空间以及执行所有您可以执行的操作的可能性。

一个例子:我使用 initrd 来拥有加密的根文件系统,设置它需要内核中没有意义的代码。

initrd 维基百科页面的“基本原理”部分有更多示例。

initramfs 是同一想法的较新(但仍然相当古老)的实现,但 initrd 这个名称经常被用来指代用作早期用户空间的映像。

我刚刚想到的一个完全不同的原因:嵌入式设备,它们可能没有足够的内存来应对包含所有内容的内核。