Linux 系统的启动过程

Linux 系统的启动过程是一个精密且环环相扣的链式流程,从按下电源键到最终进入用户登录界面,主要经历了以下五个核心阶段。

🚀 阶段一:BIOS/UEFI 固件初始化

这是启动流程的物理起点,由主板上的固件负责,与操作系统无关。

  1. 加电自检 (POST):计算机通电后,固件(BIOS 或其继任者 UEFI)首先执行 POST,检测 CPU、内存、显卡等核心硬件是否正常。
  2. 初始化硬件:设置系统时钟、中断,并初始化键盘、鼠标等基本外设。
  3. 选择启动设备:固件根据预设的启动顺序(如硬盘、U盘、网络),查找并锁定第一个可用的启动设备。

BIOS vs UEFI

  • BIOS:传统固件,使用 MBR 分区表,支持硬盘最大 2TB,启动过程为串行,速度较慢。
  • UEFI:现代固件,使用 GPT 分区表,支持超大硬盘,启动更快,并提供安全启动(Secure Boot)等高级功能。

🎛️ 阶段二:引导加载程序 (Bootloader)

固件将控制权交给引导加载程序,它充当了固件与操作系统内核之间的桥梁。Linux 系统中最主流的引导加载程序是 GRUB (GRand Unified Bootloader)。

  • 加载位置
    • BIOS 模式:从硬盘的第一个扇区(主引导记录 MBR)加载 GRUB。
    • UEFI 模式:从专门的 EFI 系统分区(ESP)中加载 GRUB。
  • 核心任务
    1. 显示启动菜单:提供一个界面,允许用户选择要启动的内核版本或操作系统(在双系统环境中非常有用)。
    2. 加载内核与 initramfs :根据用户选择,将 Linux 内核镜像(vmlinuz)和一个临时的根文件系统镜像(initramfsinitrd)加载到内存中。
    3. 移交控制权:将 CPU 的控制权正式移交给 Linux 内核。

🐧 阶段三:Linux 内核初始化

内核被加载到内存后,开始接管系统,并进行全面的初始化。

  1. 硬件探测与驱动加载:内核识别 CPU、内存、硬盘、网络设备等所有硬件,并加载相应的驱动程序。
  2. 挂载 initramfs :内核首先挂载 initramfs。这是一个临时的根文件系统,其中包含了挂载真实根文件系统所必需的驱动和工具(例如 LVM、RAID 或特定文件系统的驱动)。
  3. 挂载真实根文件系统 :利用 initramfs 中的工具,内核根据启动参数找到并挂载硬盘上真正的根文件系统(/)。
  4. 启动 init 进程 :完成根文件系统的挂载后,内核启动用户空间的第一个进程------init 进程(其进程 ID 恒为 1)。

⚙️ 阶段四:init 系统与服务管理

init 进程是所有其他用户空间进程的"鼻祖",负责启动和管理系统服务。现代 Linux 发行版(如 CentOS 7+, Ubuntu 16.04+)普遍采用 systemd 作为默认的 init 系统,它取代了传统的 SysVinit

  • systemd 的核心概念
    • 目标 (Target)systemd 使用"目标"来替代传统 SysVinit 的"运行级别 (Runlevel)"。例如:
      • multi-user.target:对应运行级别 3,即多用户命令行模式,是服务器的常用模式。
      • graphical.target:对应运行级别 5,即多用户图形界面模式。
    • 并行启动systemd 能够并行启动多个服务,显著加快了系统的启动速度。
  • 核心任务systemd 根据默认的目标(可通过 systemctl set-default 命令设置),依次启动网络、SSH、防火墙、定时任务等一系列系统服务和守护进程。

🖥️ 阶段五:用户登录

当所有必要的系统服务都已启动,系统便进入了等待用户交互的状态。

  • 启动登录程序
    • 命令行模式 :启动 getty 进程,在终端上显示登录提示符。
    • 图形界面模式 :启动显示管理器(如 gdmlightdm),呈现图形化的登录界面。
  • 用户认证 :用户输入用户名和密码后,系统通过 /etc/passwd/etc/shadow 文件进行验证。
  • 进入系统:验证通过后,系统加载用户的 shell 环境或桌面环境,用户便可开始使用系统。



相关推荐
2023自学中8 分钟前
i.MX6ULL 板子的完整启动流程图(从上电 → 用户空间)
linux·嵌入式
闫利朋8 分钟前
Ubuntu 24.04 桌面安装向日葵完整指南
linux·运维·ubuntu
mfxcyh1 小时前
使用MobaXterm配置nginx
java·服务器·nginx
YSF2017_31 小时前
C语言16-makefile(3)——makefile的模式规则
linux·c语言·开发语言
阿里巴巴首席技术官1 小时前
通过纯Nginx实现一个简单的文件上传功能
运维·nginx
pengyi8710152 小时前
动态IP池快速更换实操方案,5分钟完成IP替换
服务器·网络·tcp/ip
GL_Rain2 小时前
快速搭建Halo博客 + 崩溃秒恢复方案(Docker极简部署)
运维·docker·容器
不做无法实现的梦~2 小时前
Linux 上使用 CLion 开发嵌入式,并用 Codex CLI
linux·运维·服务器
张3232 小时前
Ansible拆分大型Playbook
linux·ansible
被摘下的星星3 小时前
以太网技术
服务器·网络