webadm
发布于 2024-06-14 / 29 阅读
0
0

Linux boot 启动过程

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

用户登录提示

用户登录提示

在本指南中,我们将重点介绍 Linux 操作系统从开机到登录期间采取的各种步骤。请注意,本指南仅考虑了 GRUB2 引导加载程序和 systemd init,因为它们目前被绝大多数现代 Linux 发行版使用。

启动过程采用以下 4 个步骤,我们将更详细地讨论这些步骤:

  • BIOS的完整性检查 (POST)

  • 加载引导加载程序 (GRUB2)

  • 内核初始化

  • 启动 systemd,所有进程的父进程

1. BIOS 完整性检查 (POST)

当用户按下开机按钮(如果 PC 已关闭)或使用 GUI 或命令行重新启动系统时,通常会初始化启动过程。

当 Linux 系统通电时,BIOS基本输入输出系统)启动并执行开机自检POST)。这是一项完整性检查,可执行大量诊断检查。

开机自检探测 HDDSSD键盘RAMUSB 端口和任何其他硬件等组件的硬件可操作性。如果未检测到某些硬件设备,或者任何设备出现故障,例如损坏的 HDD 或 SSD,屏幕上会弹出一条错误消息,提示您进行干预。

在某些情况下,会发出哔哔声,尤其是在缺少 RAM 模块的情况下。但是,如果预期的硬件存在并按预期运行,则启动过程将进入下一阶段。

2. 引导加载程序 (GRUB2)

一旦开机自检完成并且海岸清晰,BIOS 就会探测 MBR主引导记录)以获取引导加载程序和磁盘分区信息。

MBR 是一个 512 字节的代码,位于硬盘驱动器的第一个扇区,通常或取决于您的硬盘架构。但请注意,有时 MBR 可以位于 Linux 的 Live USBDVD 安装上。/dev/sda/dev/hda

Linux 中有 3 种主要类型的引导加载程序:LILO、GRUBGRUB2GRUB2 引导加载程序是现代 Linux 发行版中最新和主要的引导加载程序,它告知我们省略其他两个随着时间的推移而过时的引导加载程序。

GRUB2 代表 GRand Unified Bootloader 版本 2。一旦 BIOS 找到 grub2 引导加载程序,它就会执行并将其加载到主内存 (RAM) 上。

grub2 菜单允许您执行一些操作。它允许您选择要使用的 Linux 内核版本。如果您已经升级了几次系统,您可能会看到列出了不同的内核版本。此外,它还使您能够通过按键盘键组合来编辑某些内核参数。

选择内核版本

选择内核版本

此外,在安装多个操作系统的双启动设置中,grub 菜单允许您选择要启动到哪个操作系统。grub2 配置文件是 /boot/grub2/grub2.cfg 文件。GRUB 的主要目标是将 Linux 内核加载到主内存上。

3. 内核初始化

内核是任何 Linux 系统的核心。它将 PC 的硬件与底层进程连接起来。内核控制 Linux 系统上的所有进程。一旦引导加载程序加载了选定的 Linux 内核,它必须在执行任何任务之前从其压缩版本中自行解压。自解压后,选定的内核挂载根文件系统并初始化通常称为 init/sbin/init 程序。

内核初始化过程

内核初始化过程

Init 始终是第一个要执行的程序,并为其分配进程 ID 或 PID 为 1。它是 init 进程,它生成各种守护进程并挂载 /etc/fstab 文件中指定的所有分区。

然后,内核挂载初始 RAM 磁盘 (initrd),这是一个临时的根文件系统,直到挂载真正的根文件系统。所有内核都与初始 RAM 磁盘映像一起位于目录中。/boot

4.启动Systemd

内核最终加载 Systemd,这是旧 SysV init 的替代品。Systemd 是所有 Linux 进程之母,负责管理文件系统的挂载、启动和停止服务等。

Systemd 使用 /etc/systemd/system/default.target 文件来确定 Linux 系统应启动到的状态或目标。

  • 对于桌面工作站(具有 GUI),默认目标值为 5,相当于旧 SystemV 初始化的运行级别 5。

  • 对于服务器,默认目标是 multi-user.target,它对应于 SysV init 中的运行级别 3。

以下是 systemd 目标的细分:

  • poweroff.target(运行级别 0):关闭或关闭系统。

  • rescue.target(运行级别 1):启动救援 shell 会话。

  • multi-user.target(运行级别 2、3、4):将系统配置为非图形(控制台)多用户系统。

  • graphical.target(运行级别 5):将系统设置为对网络服务使用图形多用户界面。

  • reboot.target(运行级别 6):重新启动系统。

要检查系统上的当前目标,请运行以下命令:

$ systemctl get-default

检查运行级别

检查运行级别

您可以通过在终端上运行以下命令从一个目标切换到另一个目标:

$ init runlevel-value

例如,init 3 将系统配置为非图形状态。

init 6 命令重新启动系统,init 0 关闭系统电源。当您要切换到这两个目标时,请务必调用 sudo 命令

一旦 systemd 加载所有守护进程并设置目标或运行级别值,引导过程就会结束。此时,系统会提示您输入用户名和密码,以便您进入 Linux 系统。


评论