Linux启动过程详解:容易忽略的核心知识

Linux启动过程详解:容易忽略的核心知识

上图是Linux启动过程的基本步骤。理解这个过程,有助于系统管理人员排查问题。下面将详细展开讲解

1 开机自检(BIOS/UEFI)

当你按下开机按钮时,计算机的硬件并不会立刻开始运行操作系统,而是先进行一系列的自我检查。这一阶段由 BIOS(基本输入输出系统) 或 UEFI(统一扩展固件接口) 负责。

  • 自检(POST):启动时,BIOS/UEFI 会对硬件进行初步检查,确保硬件设备如 CPU、内存、硬盘等能够正常工作。
  • 启动设备选择:完成硬件自检后,BIOS/UEFI 会查找引导设备(如硬盘、U盘、光盘等)。它会根据预设的顺序选择一个设备,查找上面是否有操作系统。

这时,计算机会找到存储在硬盘上的启动引导程序,并将控制权交给它。

2 引导加载程序(Bootloader)

引导加载程序是 Linux 启动流程中的关键部分。最常见的引导程序是 GRUB它负责加载操作系统的内核,并将控制权交给内核。具体过程如下:

  • 加载内核:GRUB 会从硬盘上的 /boot 分区加载 Linux 内核(通常是 vmlinuz 文件),并将其载入内存。
  • 加载初始内存盘(initramfs):除了内核映像,GRUB 还会加载 initramfs,这是一个包含启动时所需的最小操作环境的压缩文件系统。initramfs 包含了必要的驱动程序和工具,能帮助系统在启动阶段挂载根文件系统。

3 内核初始化

内核是操作系统的核心部分,它承担着管理硬件、执行程序和提供服务等任务。内核被加载到内存后,开始进行一系列初始化操作:

  • 硬件初始化:内核会识别并初始化计算机的硬件组件,包括 CPU、内存、硬盘、显示器、网络适配器等。内核会通过加载合适的驱动程序来与这些硬件进行交互。
  • 挂载临时根文件系统:内核会使用 initramfs 作为临时根文件系统,挂载到 / 目录,这时,根文件系统中的程序和文件还没有完全加载。

当内核初始化完成后,它会启动第一个用户空间进程,这个进程通常是 init,它负责启动系统的其他部分。

4 启动第一个进程(init/systemd)

内核启动后,它会创建一个进程号为 1 的进程,这个进程通常是 init(在现代 Linux 系统中,init 通常是由 systemd 取代的)。init 是 Linux 系统中的第一个用户空间进程,它是所有其他用户空间进程的祖先,负责整个系统的初始化和管理。

  • 挂载根文件系统:init 进程会确保最终的根文件系统(硬盘上的实际文件系统)被正确挂载。如果 initramfs 被使用,它会将根文件系统切换到实际的磁盘分区。

5 启动系统服务

系统进入用户空间后,Linux 会启动多个重要的系统服务和守护进程。这些服务包括:

  • 网络服务:配置网络接口,分配 IP 地址,启动 DNS 等服务,确保系统可以访问网络。
  • 系统日志:启动日志服务(如 rsyslog),收集并保存系统日志,方便后续查看。
  • SSH 服务:如果系统允许远程访问,sshd 服务会被启动,允许用户通过 SSH 登录到系统。
  • 定时任务:启动定时任务管理器(如 cron),执行预定的自动化任务。

这些系统服务通常通过配置文件(在 systemd 中是单元文件)来管理,可以按需启用或禁用。

6 用户登录界面

所有的系统服务启动完毕后,系统会进入可供用户交互的阶段。如果系统配置了图形界面,登录界面就会弹出;如果是命令行模式,系统会显示终端提示符等待用户登录。

  • 图形界面登录:如果系统使用桌面环境(,登录管理器(如 GDM、LightDM)会显示图形界面,用户可以输入用户名和密码进行登录。
  • 命令行界面登录:如果系统没有图形界面(如一些服务器版的 Linux),则会显示一个命令行终端,用户可以通过终端输入用户名和密码进行登录。

这就是 Linux 从开机到完成启动的基本流程。不同的 Linux 发行版和配置可能在某些细节上有所不同,但大体流程基本一致。

 

阅读剩余
THE END