每次您启动 Linux PC 时,它都会经过一系列阶段,最终显示一个登录屏幕,提示您输入用户名或密码。每个 Linux 发行版在典型的启动过程中都会经历 4 个不同的阶段。

在本指南中,我们将重点介绍 Linux 操作系统从启动到登录的各个步骤。请注意,本指南仅考虑了目前被绝大多数现代 Linux 发行版使用的GRUB2引导加载程序和systemd init。
启动过程包括以下 4 个步骤,我们将详细讨论:
- BIOS 完整性检查(POST)
- 加载引导加载程序(GRUB2)
- 内核初始化
- 启动systemd,所有进程的父进程
1. BIOS 完整性检查(POST)
当用户按下开机按钮(如果 PC 已经关闭)或使用 GUI 或命令行重新启动系统时,启动过程通常会初始化。
当 Linux 系统启动时,BIOS(基本输入输出系统)启动并执行自检(POST)。这是一个执行大量诊断检查的完整性检查。
POST会检测如HDD或SSD、键盘、RAM、USB端口等硬件组件的可操作性。如果某个硬件设备未被检测到,或者任何设备出现故障,比如HDD或SSD损坏,屏幕上就会显示错误信息,提示需要您的干预。
在某些情况下,如果缺少RAM模块,会发出蜂鸣声。然而,如果预期的硬件存在并且运行正常,启动过程就会进入下一个阶段。
2. 引导加载程序(GRUB2)
一旦POST完成,一切正常,BIOS就会探测MBR(主引导记录)以获取引导加载程序和磁盘分区信息。
MBR是一个512字节的代码,位于硬盘的第一个扇区,通常是/dev/sda
或/dev/hda
,具体取决于您的硬盘架构。但是,请注意,有时MBR可能位于Live USB或DVD的Linux安装中。
Linux中有三种主要的引导加载程序:LILO、GRUB和GRUB2。GRUB2引导加载程序是现代Linux发行版中最新和主要的引导加载程序,这也是我们决定淘汰其他两种已经过时的引导加载程序的原因。
GRUB2代表GRand Unified Bootloader第2版。一旦BIOS找到grub2引导程序,它就会执行并将其加载到主内存(RAM)中。
grub2菜单允许您做几件事情。它允许您选择您想要使用的Linux内核版本。如果您的系统升级了几次,您可能会看到列出了不同的内核版本。此外,它还允许您通过按键盘键的组合来编辑一些内核参数。

此外,在您有多个操作系统安装的双启动设置中,grub菜单允许您选择要引导进入的操作系统。grub2的配置文件是/boot/grub2/grub2.cfg文件。GRUB的主要目标是将Linux内核加载到主内存中。
3. 内核初始化
内核是任何Linux系统的核心。它将PC的硬件与底层进程接口。内核控制着您Linux系统上的所有进程。一旦选定的Linux内核被引导程序加载,它必须在执行任何任务之前从其压缩版本中自行提取。自提取后,选定的内核会挂载根文件系统并初始化/sbin/init程序,通常称为init。

Init总是第一个被执行的程序,并被分配进程ID或PID为1。它是init进程,负责生成各种守护进程和挂载在/etc/fstab文件中指定的所有分区。
内核然后挂载初始RAM磁盘(initrd),这是一个临时的根文件系统,直到真正的根文件系统被挂载。所有的内核都位于/boot
目录中,与初始RAM磁盘映像一起。
4.启动Systemd
内核最终加载Systemd,它是旧的SysV init的替代品。Systemd是所有Linux进程的母体,它管理的事项包括挂载文件系统、启动和停止服务等。
Systemd使用/etc/systemd/system/default.target文件来确定Linux系统应该启动到的状态或目标。
- 对于桌面工作站(带有GUI)默认目标值是5,相当于旧的SystemV init的运行级别5。
- 对于服务器,默认目标是multi-user.target,对应于SysV init的运行级别3。
以下是systemd目标的细分:
- poweroff.target (运行级别0):关闭或关机系统。
- rescue.target (运行级别1):启动一个救援shell会话。
- multi-user.target (运行级别2,3,4):将系统配置为非图形化(控制台)多用户系统。
- 图形化.target (运行级别 5):设置系统使用带网络服务的图形化多用户界面。
- 重启.target (运行级别 6):重启系统。
要检查当前系统的目标,请运行命令:
$ systemctl get-default

您可以通过在终端上运行以下命令从一个目标切换到另一个目标:
$ init runlevel-value
例如,init 3 配置系统为非图形化状态。
命令 init 6 会重启您的系统,而 init 0 会关闭系统电源。在切换到这两个目标时,确保调用 sudo 命令。
一旦 systemd 加载所有守护进程并设置目标或运行级别值,启动过程就结束了。此时,系统会提示您输入用户名和密码,之后您就可以进入您的 Linux 系统了。