操作系统安装程序如何工作?

che*_*rai 12 linux operating-systems installation redhat-enterprise-linux

我正在学习 Linux 操作系统安装的工作原理,但在互联网上搜索此内容并没有为我的问题提供任何信息。

注意:这个问题已被标记为服务器故障上的题外话,所以我在这里问。

Redhat 文档有相当简洁的信息,但它们是碎片化的。我无法将这些碎片粘合起来以获得完整的答案。
从这些片段中,我能够了解引导加载程序是如何工作的,它们如何启动 ramdisk 和内核,然后启动 systemd 或 initd。
找不到有关初始操作系统安装如何工作的任何参考。
该社区拥有该主题的优秀专业人士,因此我可以获得问题的解决方案。

这里有多个问题,请随意回答每个问题并添加参考(如果可能)

  1. 在引导过程中,MBR 被读取,引导加载程序被初始化;在正常设置期间,内核由引导加载程序加载,然后经过一些魔法后,会出现登录屏幕。
  2. 如果1成立,那么安装操作系统时的流程是什么?内核是否仍会加载以启动安装程序脚本,或者操作系统安装程序是可由引导加载程序调用的最小脚本吗?
  3. 如果使用了 kickstart 文件,那么在全新操作系统安装过程中,究竟什么时候会解析该文件并执行内容?
  4. 操作系统安装工作需要哪些文件或脚本(为了正常启动,我们需要 initrd、vmlinuz),那么安装程序又需要什么 - 我认为我们有安装树(ISO 提取并由 HTTPserver 提供服务)?
  5. RHEL 文档说它使用 anaconda 安装程序,但它是用 python 编写的,甚至在加载内核或解释器之前它是如何工作的?我检查了它们是否编译为 CPU 特定格式,以便它可以直接在 CPU 上运行,但找不到任何相关信息。

use*_*686 17

\n

如果满足1,那么安装操作系统时的流程是什么?内核是否仍然被加载以启动安装程序脚本,或者操作系统安装程序是可以由引导加载程序调用的最小脚本?

\n
\n

它几乎总是一个完整的操作系统,上面运行着普通的应用程序。例如,Debian 和 Fedora 的图形安装程序都是在 X11 (Xorg) 上运行的 GTK 应用程序。在这两种情况下,底层都有常规的 Linux,通常通过 Alt+F2 进行控制台登录。

\n

(类似地,Windows 安装程序是在 WinPE 上运行的 setup.exe,WinPE 是专为这种用途量身定制的 Windows 变体。如果您按 Shift+F10,它将启动 cmd.exe。)

\n

让安装程序使用完整的操作系统可以使许多事情变得更容易,因为它可以使用与正在安装的操作系统相同的概念和设施。例如,安装程序需要能够格式化并稍后读取/写入 Linux 分区/将使用 \xe2\x80\x93 的文件系统,并且由于安装程序是常规 Linux 应用程序,因此它可以只使用常规的mkfsmount,即 Linux已经有了。

\n

因此,Linux 安装程序的具体流程非常类似于启动真正的 Linux 系统:

\n
    \n
  1. 固件从安装 CD 或 USB 记忆棒加载并运行引导加载程序。
  2. \n
  3. 引导加载程序从 USB 记忆棒加载 Linux 内核和 initramfs(并且可能经过预配置以传递一些特定于安装程序的内核参数)。
  4. \n
  5. initramfs 挂载真正的根文件系统,这有点复杂,因为大多数 Linux“实时”系统不会将所有操作系统文件直接放在 USB 记忆棒上,而是将它们打包到“squashfs”存档中:\n
      \n
    • initramfs 挂载 U 盘本身的 FAT32 文件系统...
    • \n
    • 然后它从那里循环挂载真实 Linux 根文件系统的 SquashFS 存档......
    • \n
    • 然后它安装一个“overlayfs”或“unionfs”虚拟文件系统,允许只读的 SquashFS 基础变得可写,所有更改都存储在 RAM 中......
    • \n
    • ...overlayfs 就是安装程序运行的实际 Linux 操作系统的“/”。
    • \n
    \n
  6. \n
  7. initramfs 启动常规的“init”进程,该进程启动一些典型的服务以及一些特定于安装程序的服务。
  8. \n
  9. 最后,init 不启动登录屏幕,而是直接启动“安装程序”应用程序(tty1 上的文本模式应用程序,或带有 Xorg 的 X11 应用程序)。
  10. \n
\n

正如您所看到的,除了基于 overlayfs 的根之外,它的启动方式与 Linux 正常情况一样。一般来说,Linux 安装程序只是“实时”系统的一个特例,大多数发行版都会发布用于构建它们的工具,即 ISO 构建器和实际 UI 都是开源的。例如,您可以分析archisoArch Linux 用于创建可引导 Linux ISO 的工具。

\n

(Arch 是一个相关的案例,因为在过去的几年里,它没有像 \xe2\x80\x93 这样的安装程序,它会直接引导您进入 Linux shell,您可以在其中对磁盘进行分区并安装一组初始软件包,这就是您安装的 Linux 系统。因此您可以亲自了解 Anaconda 或 di 在幕后会做什么。)

\n
\n

RHEL 文档说它使用了 anaconda 安装程序,但它是用 python 编写的,甚至在加载内核或解释器之前它们是如何工作的。

\n
\n

他们不这样做。在加载内核或解释器之前,Anaconda 的任何部分都不需要运行。

\n

(请记住,如上所述,安装程序实际上有自己的 Linux 内核和自己的 /usr/bin/python,它不需要等到“真正的”内核安装完毕。)

\n
\n

如果使用了 kickstart 文件,那么在全新操作系统安装期间解析该文件并执行内容的确切时间?

\n
\n

一般来说,它只是由安装程序应用程序读取。没有特定的“时间”,每个安装程序都会做自己的事情。

\n

  • 也可能是。一些发行版使用与“真实”系统完全相同的软件包构建 ISO,包括带有所有驱动程序的完整内核。但其他发行版*确实*使用特殊的构建,特别是如果他们试图实现尽可能小的 ISO(例如“netboot”ISO),在这种情况下删除不必要的驱动程序可以节省多达 150 MB 的空间。 (4认同)