Linux 启动过程分步详解17 Mar 2025 | 6 分钟阅读 当 H.We click the power button of our system, several processes are executing in the background. It's very important to understand the booting process to learn the working of an operating system. It's a must to understand how the Linux kernel boots to resolve the booting error. It is a very curious topic to know, so let's begin with the basics. 下面将讨论一种清晰的启动读取方法 Linux 启动过程阶段- 机器的启动微码或 BIOS 运行大量的代码,并执行一个引导加载程序。
- 引导加载程序从磁盘捕获内核映像,并将其加载到内存中以启动计算机。
- 内核引导设备和驱动程序。
- 内核挂载通用文件系统。
- 内核启动一个名为 init 的程序,其方法 ID 为零。
- Init 配置系统进程继续运行。
- Init 启动一个允许我们出于某种目的登录的方法,通常在启动顺序的最后或最前面。
启动消息经典的 UNIX 操作系统在启动时会生成许多诊断消息,告诉我们启动过程。最初,这些消息来自 init 启动的内核和进程。虽然,这些消息并不一致或漂亮,在某些情况下,它们甚至不是很有信息量。硬件的进步也使得内核比以前启动得更快,消息闪烁得如此之快;可能很难看清发生了什么。几乎所有当前的 Linux 发行版都在尽力用不同的过滤器和启动画面来隐藏启动的医学知识,以分散我们的注意力,而系统正在启动。 内核启动和初始化选项 - CPU 检查
- 设备总线发现
- 内存检查
- 设备发现
- 根文件系统挂载
- 辅助内核系统启动
- 用户空间启动
CPU 检查和内存检查并不那么特别。但是,当内核探测设备时,就会出现依赖性问题。例如,磁盘设备驱动程序可能依赖于 SCSI 系统和总线支持。我们通常不需要担心依赖性,只是因为一些关键部分是可加载内核模块,而不是几乎所有内核的一部分。 内核参数Linux 内核在启动时会接收一组基于文本的内核参数,包含一些额外的系统详细信息。这些参数描述了各种替代行为,例如内核的诊断结果,以及设备驱动程序特定和制造商的选择。Ro 参数指导内核在用户区域启动时以只读模式挂载通用文件系统。这种通用的只读模式确保 fsck 可以在执行任何重要操作之前安全地检查根文件系统。启动技术在检查期间会将根文件系统重新挂载为读写模式。 引导加载程序任务- 从多个内核中选择。
- 在内核参数组之间切换。
- 支持启动不同的操作系统。
值得注意的是,自 Linux 内核诞生以来,引导加载程序变得越来越先进,提供了菜单系统和命令行历史记录等选项。但是,在参数选择和内核映像的灵活性方面,人们的需求一直是固定的。一个显著的发展是,一些需求已经减少了。 例如,由于我们可以从 USB 设备执行恢复启动或关联紧急情况,我们很少需要担心手动输入内核参数或进入单用户模式。现代引导加载程序提供了前所未有的强大功能,这在我们创建自定义内核或想要调整参数时尤其有用。 引导加载程序概述- GRUB:它是 Linux 系统中一个近乎通用的引导加载程序,支持 UEFI 和 BIOS/MBR 版本。
- SYSLINUX:SYSLINUX 可以被配置从多种不同的文件系统样式执行。
- LILO:它是主要的 Linux 引导加载程序之一。ELILO 是 UEFI 版本。
- LOADLIN:它通过 DOS 引导内核。
- System-boot:这是一个简单的 UEFI 引导管理器。
- coreboot:它是系统 BIOS 的一个很好的替代品,它将显示内核。
- EFI Linux:这是一个 UEFI 引导加载程序,被指定为模型,并支持其他 UEFI 引导加载程序。
- Linux Kernel EFISTUB:这是一个内核插件,用于直接从相关的 UEFI/EDI 系统分区加载内核。
GRUB 的工作原理和简介GRUB 是 **Grand Unified Boot Loader** 的缩写。GRUB 最重要的功能之一是文件系统导航,它允许进行简单的配置选择和内核映像。 - GRUB 代码被加载。
- BIOS 在搜索引导代码时加载并运行它。通常,这就是 GRUB 开始的地方。
- 代码被初始化。此时,GRUB 将可以访问文件系统和磁盘。
- GRUB 识别其引导分区和其中的几个配置。
- GRUB 向用户提供区分配置的机会。
- GRUB 在用户操作或超时后执行配置。
- 在配置执行过程中,GRUB 可能会在引导分区中加载额外的代码。此外,还会预加载几个模块。
- 为了运行和加载内核,GRUB 执行引导命令。
Linux 启动过程详解操作系统是处理资源、为其他软件提供基本服务以及控制外围设备的低级软件。我们将详细解释每个启动过程  - BIOS
BIOS 是 Basic Input/Output System 的缩写。换句话说,BIOS 可以加载和运行 MBR(Master Boot Record)引导加载程序。当我们第一次打开系统时,BIOS 会首先对 SSD 或 HDD 进行一些完整性检查。 之后,BIOS 会查找、加载并运行引导加载程序功能,该功能可以在 MBR 中找到。有时,MBR 位于 CD-ROM 或 USB 驱动器上,就像使用 Live Linux 安装一样。然后,引导加载程序功能被加载到内存中,一旦被检测到,BIOS 就会将系统控制权交给它。 - MBR
MBR 是 Master Boot Record 的缩写,负责加载和运行 GRUB 引导加载程序。MBR 位于第一个可引导磁盘扇区,通常是 /dev/sda,具体取决于我们的硬件。此外,MBR 包含 GRUB 的详细信息,或者对于旧系统是 LILO。 - GRUB
GRUB 有时被称为 **GNU GRUB**,代表 **GNU GRand Unified Bootloader**。它是几乎所有最新 Linux 系统的经典引导加载程序。GRUB 的启动画面通常是我们启动系统时看到的第一个东西。它包含一个通用菜单,我们可以在其中选择一些选项。 如果我们安装了多个内核映像,我们可以使用键盘选择我们希望系统启动的那个。最新的内核映像是默认选择的。启动画面会延迟几秒钟,以便我们选择选项。如果我们不选择,它将加载内核映像(默认)。在许多系统中,我们可以在 **/etc/grub/conf **或 /boot/grub/grub.conf 找到 GRUB 配置文件。 - 内核
通常,内核被称为操作系统的代码。它包含了我们系统中所有内容的完全控制权。在这个启动过程阶段,内核会挂载在 grub.conf 文件中选择的、已设置好的基本文件系统。然后,它会运行 /sbin/init 函数,该函数始终是第一个运行的函数。我们可以通过其 PID(进程 ID)来确认它,它应该始终是 1。然后,内核会在实际文件系统被挂载之前,借助 initrd(Initial RAM Disk)创建一个临时的基本文件系统。 - Init(初始化)
在此阶段,我们的系统会运行 runlevel 程序。它会查找 init 文件,通常位于 /etc/inittab,以确定 Linux 的运行级别。现代 Linux 系统使用 systemd 来选择运行级别。然后,systemd 将开始运行 runlevel 程序。 Linux 操作系统有六个运行级别标签- 0- 停止
- 1- 单用户模式
- 2- 多用户模式,无 NFS
- 3- 完全多用户模式
- 4- 未使用
- 5- X11
- 6- 重启
我们可以通过运行以下命令来检查我们系统的默认运行级别配置 - Runlevel 程序
根据我们安装的 Linux 发行版不同,我们可以看到不同的服务正在启动。它们被称为 runlevel 程序,并且根据我们的运行级别从不同的目录运行。上面提到的所有六个运行级别都有其对应的目录- 运行级别 0 - /etc/rc0.d/
- 运行级别 1 - /etc/rc1.d/
- 运行级别 2 - /etc/rc2.d/
- 运行级别 3 - /etc/rc3.d/
- 运行级别 4 - /etc/rc4.d/
- 运行级别 5 - /etc/rc5.d/
- 运行级别 6 - /etc/rc6.d/
重要提示: 目录的确切位置因发行版而异。 如果我们查看不同的运行级别目录,我们会找到以 **"K" **或 "S" 开头的程序,分别代表“杀死”和“启动”。这些启动程序在系统启动时运行,并在关机时杀死一些程序。
|