我认为 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 配置存在。