我正在学习 Linux 操作系统的安装工作原理,但在互联网上搜索这方面的内容并不能为我的问题提供任何信息。
注意:该问题在 Server Fault 上被标记为离题,因此我在这里提问。
Redhat 文档中的信息非常简洁,但内容不完整。我无法将这些部分拼凑起来以获得完整的答案。
从这些部分中,我可以了解引导加载程序的工作原理,它们如何启动 ramdisk 和内核,然后启动 systemd 或 initd。
找不到有关初始操作系统安装如何工作的任何参考资料。
这个社区有非常优秀的专业人士,他们是这个主题的专家,所以我可以得到我的问题的解决方案。
这里有多个问题,请随意回答每个问题,并尽可能添加参考资料
- 在启动过程中,MBR 被读取并且引导加载程序被初始化;在正常设置期间,内核由引导加载程序加载,然后在一些神奇的事情之后出现登录屏幕。
- 如果1那么安装操作系统时的流程是怎样的?内核是否仍会加载以启动安装程序脚本,或者操作系统安装程序是否是引导加载程序可以调用的最小脚本?
- 如果使用 kickstart 文件,那么在全新安装操作系统期间,何时解析该文件并执行其内容?
- 操作系统安装需要哪些文件或脚本才能工作(为了正常启动,我们需要 initrd、vmlinuz),那么安装程序需要什么 - 我认为我们有安装树(ISO 提取并由 HTTPserver 提供服务)?
- RHEL 文档说它使用 anaconda 安装程序,但它是用 python 编写的,在内核或解释器加载之前它如何工作?我检查了它们是否编译为特定于 CPU 的格式,以便可以直接在 CPU 上运行,但找不到任何相关信息。
答案1
如果 1 满足,那么安装操作系统时的流程是什么?内核是否仍会被加载以启动安装程序脚本,或者操作系统安装程序是可由引导加载程序调用的最小脚本?
它几乎总是一个完整的操作系统,上面运行着一个普通的应用程序。例如,图形Debian 和 Fedora 的安装程序都是在 X11 (Xorg) 上运行的 GTK 应用程序。在这两种情况下,底层都是常规 Linux,通常使用 Alt+F2 进行控制台登录。
(类似地,Windows 安装程序是在 WinPE 上运行的 setup.exe,WinPE 是专门为这种用途定制的 Windows 变体。如果按下 Shift+F10,它将启动 cmd.exe。)
让安装程序使用完整的操作系统可以使很多事情变得更容易,因为它可以使用与要安装的操作系统相同的概念和功能。例如,安装程序需要能够格式化并稍后读取/写入 Linux 分区将使用的文件系统/
- 而且由于安装程序是一个常规的 Linux 应用程序,它只能使用Linux 已有的常规mkfs
和。mount
因此,Linux 安装程序的流程与启动真正的 Linux 系统非常相似:
- 固件从您的安装 CD 或 USB 记忆棒加载并运行引导加载程序。
- 引导加载程序从 USB 记忆棒加载 Linux 内核和 initramfs(并且可能预先配置为传递一些安装程序特定的内核参数)。
- initramfs 安装了真正的根文件系统,这有点复杂,因为大多数 Linux“实时”系统不会将所有操作系统文件直接放在 USB 驱动器上,而是将它们打包到“squashfs”档案中:
- initramfs 安装 USB 驱动器本身的 FAT32 文件系统...
- 然后它从那里循环挂载真实 Linux 根文件系统的 SquashFS 存档……
- 然后,它安装一个“overlayfs”或“unionfs”虚拟文件系统,使只读的 SquashFS 基础变为可写,而所有更改都存储在 RAM 中……
- ...并且该 overlayfs 将成为安装程序运行的实际 Linux 操作系统的“/”。
- initramfs 启动常规的“init”进程,该进程启动一些典型服务以及一些安装程序特定的服务。
- 最后,init 不再启动登录屏幕,而是直接启动“安装程序”应用程序(tty1 上的文本模式应用程序或带有 Xorg 的 X11 应用程序)。
如您所见,除了基于 overlayfs 的根目录之外,它的启动方式与 Linux 正常启动方式相同。通常,Linux 安装程序只是“实时”系统的一个特例,大多数发行版都会发布用于构建它们的工具,即 ISO 构建器和实际 UI 都是开源的。例如,您可以分析archiso
Arch Linux 用于创建可启动 Linux ISO 的工具。
(Arch 是一个相关案例,因为在过去几年里,它没有安装程序 – 它会直接引导您进入 Linux shell,您将在其中对磁盘进行分区并安装一组初始软件包,这就是安装好的 Linux 系统。因此,您可以亲身体验 Anaconda 或 di 在后台执行的操作。)
RHEL 文档说它使用了 anaconda 安装程序,但它是用 python 编写的,并且它们在内核或解释器加载之前就已经知道如何工作了。
不需要。在内核或解释器加载之前,Anaconda 的任何部分都不需要运行。
(请记住,如上所述,安装程序实际上有自己的 Linux 内核和自己的 /usr/bin/python,它不需要等到“真实”内核安装完成。)
如果使用 kickstart 文件,那么在全新操作系统安装期间,文件何时被解析并且内容被执行?
通常,它只是由安装程序应用程序读取。没有特定的“时间”,每个安装程序都会执行自己的操作。