Linux引导过程的基本指南

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

User Login Prompt

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

启动过程包括以下 4 个步骤,我们将详细讨论:

  • BIOS 完整性检查(POST
  • 加载引导加载程序(GRUB2
  • 内核初始化
  • 启动systemd,所有进程的父进程

1. BIOS 完整性检查(POST)

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

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

POST会检测如HDDSSD键盘RAMUSB端口等硬件组件的可操作性。如果某个硬件设备未被检测到,或者任何设备出现故障,比如HDD或SSD损坏,屏幕上就会显示错误信息,提示需要您的干预。

在某些情况下,如果缺少RAM模块,会发出蜂鸣声。然而,如果预期的硬件存在并且运行正常,启动过程就会进入下一个阶段。

2. 引导加载程序(GRUB2)

一旦POST完成,一切正常,BIOS就会探测MBR主引导记录)以获取引导加载程序和磁盘分区信息。

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

Linux中有三种主要的引导加载程序:LILOGRUBGRUB2GRUB2引导加载程序是现代Linux发行版中最新和主要的引导加载程序,这也是我们决定淘汰其他两种已经过时的引导加载程序的原因。

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

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

Select Kernel Version

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

3. 内核初始化

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

Kernel Initialization Process

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
Check Run Level

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

$ init runlevel-value

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

命令 init 6 会重启您的系统,而 init 0 会关闭系统电源。在切换到这两个目标时,确保调用 sudo 命令

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

Source:
https://www.tecmint.com/linux-boot-process/