为什么发行版(例如 Arch)同时使用 initramfs 和 root={smth}?

为什么发行版(例如 Arch)同时使用 initramfs 和 root={smth}?

我认为 initramfs 的目标是引导根分区并对其进行 chroot。但我不明白为什么发行版开发人员要使用 initramfs 如果总是有一个 root={smth} 标志。

答案1

我认为 initramfs 的目标是引导根分区并对其进行 chroot。

不完全是,不。根据我对 Linux 历史的记忆,initramfs (initrd) 的前身被挂载并/linuxrc运行,然后出口(看过时的根更改机制)。然后内核将负责安装 root。后来,安装 root 并转入 root 的工作被转移到 initramfs 中,并且/init它不会退出。

这表明 initramfs 的功能远不止简单的 mount 和 chroot。

Linus Torvalds 阐述了 initramfs 的两个原因:

  • “让人们更容易定制他们的初始系统,而无需修改内核代码,甚至无需使用不同的启动顺序。”

  • “许多事情在用户空间中更容易完成,因为用户空间有保护、‘无限堆栈’,而且一般来说有更好的基础设施(即更容易调试等)。”


但我不明白为什么发行版开发人员要使用 initramfs 如果总是有一个 root={smth} 标志。

我将 initramfs 视为单个编译程序。当然,从技术上讲,它是一个包含脚本和二进制文件的文件系统,但是通常它不包含(太多)配置。有些参数最好留给用户在运行时修改,而不是对其进行硬编码。

这使您可以在引导加载程序(例如:grub)中修改系统启动,而无需重新编译系统的一部分。在 grub 中,这就像e按菜单项一样简单。

Initramfs 可以通过/proc/cmdline.因此,即使最初/root可能是作为内核配置,它仍然作为 initramfs 配置存在。

相关内容