服务器测评网
我们一直在努力

Linux启动流程详解,各阶段做了什么,如何排查启动问题?

Linux 启动详解

Linux 系统的启动过程是一个复杂而有序的流程,涉及硬件初始化、引导加载、内核加载、系统服务启动等多个阶段,理解这一过程有助于排查启动故障、优化系统性能,以及深入掌握 Linux 系统的运行机制,本文将从开机加电到用户登录界面,详细拆解 Linux 系统的完整启动流程。

Linux启动流程详解,各阶段做了什么,如何排查启动问题?

开机加电与 BIOS/UEFI 初始化

当计算机按下电源键后,首先执行的是硬件自检(POST),这一阶段由主板上的固件(BIOS 或 UEFI)负责,主要任务是检测硬件设备(如 CPU、内存、硬盘、键盘等)是否正常工作,并初始化最基础的硬件组件。

  • BIOS vs UEFI
    传统 BIOS(基本输入输出系统)是 16 位实模式程序,功能较为简单,且仅支持 MBR(主引导记录)分区格式,而 UEFI(统一可扩展固件接口)是 32/64 位程序,支持 GPT(GUID 分区表),具备更快的启动速度、更高的安全性(如 Secure Boot)和更好的硬件兼容性。

  • 启动设备选择
    BIOS/UEFI 完成自检后,会根据预设的启动顺序(如硬盘、U 盘、网络)查找可引导设备,若从硬盘启动,BIOS/UEFI 会读取硬盘的第一个扇区(MBR 或 GPT 的引导扇区),加载引导加载程序(如 GRUB)。

引导加载程序(GRUB/LILO)

引导加载程序是 Linux 启动过程中的关键环节,其核心任务是加载 Linux 内核并传递启动参数,常见的引导加载程序包括 GRUB(Grand Unified Bootloader)和 LILO(Linux Loader),GRUB 是目前的主流选择。

  • GRUB 的工作流程

    1. 阶段 1(Stage 1):由 BIOS/UEFI 加载,位于硬盘的第一个扇区,仅包含极少代码,用于加载下一阶段。
    2. 阶段 1.5(Stage 1.5):加载文件系统驱动,以便读取 GRUB 的核心文件(如 stage2)。
    3. 阶段 2(Stage 2):加载 GRUB 的核心功能,包括菜单显示、内核加载等。
    4. 加载内核:根据配置文件(如 /boot/grub/grub.cfg)选择要启动的 Linux 内核,并将内核和初始内存盘(initrd)加载到内存中。
  • GRUB 配置文件
    /boot/grub/grub.cfg 是 GRUB 的核心配置文件,定义了启动菜单项、内核路径、启动参数等。

    menuentry "Ubuntu Linux" {  
        linux   /boot/vmlinuz-5.15.0-52-generic root=/dev/sda1 ro  
        initrd  /boot/initrd.img-5.15.0-52-generic  
    }  

    linux 行指定内核路径和根文件系统,initrd 行提供临时根文件系统,用于加载驱动模块。

    Linux启动流程详解,各阶段做了什么,如何排查启动问题?

Linux 内核初始化

内核被加载到内存后,开始接管系统控制权,完成硬件初始化和根文件系统挂载。

  • 内核解压与启动
    内核镜像(如 vmlinuz)是经过压缩的,启动时会先解压自身,随后,内核初始化进程(init 进程,通常为 PID 1)被创建,负责后续的系统服务启动。

  • 设备探测与驱动加载
    内核通过 Device Tree 或 ACPI 探测硬件设备,并加载对应的驱动程序,对于 SATA 硬盘,内核会加载 ahci 模块;对于 NVIDIA 显卡,则加载 nouveau 模块。

  • 根文件系统挂载
    内核通过启动参数(如 root=/dev/sda1)定位根文件系统,并将其挂载为只读模式(ro),随后,内核会运行第一个用户空间程序,通常是 /sbin/init/bin/systemd/sbin/upstart,具体取决于发行版。

系统初始化(Systemd/Init)

现代 Linux 发行版多采用 systemd 作为系统初始化系统,取代了传统的 SysVinit。systemd 并行启动服务,提高了启动效率,并提供了依赖管理、日志记录等功能。

  • systemd 的工作流程

    1. 挂载基本文件系统systemd 首先挂载 /sys/proc/dev 等虚拟文件系统。
    2. 启动目标(Target)systemd 通过“目标”定义系统运行状态,如 default.target(多用户模式)、rescue.target(救援模式)。
    3. 激活服务:根据目标,systemd 启动相关服务(如网络服务、日志服务),并处理服务依赖关系。
  • 关键服务与单元(Unit)
    systemd 通过“单元”管理系统资源,包括服务(.service)、挂载点(.mount)、设备(.device)等。network.service 负责网络配置,sshd.service 启动 SSH 服务。

    Linux启动流程详解,各阶段做了什么,如何排查启动问题?

用户登录与启动完成

当系统服务启动完成后,systemd 会启动登录管理器(如 gdmlightdm),显示登录界面,用户输入用户名和密码后,启动 Shell(如 bash),进入交互式环境。

  • 运行级别与目标
    传统 Linux 使用运行级别(如 3 为多命令行模式,5 为图形模式),而 systemd 通过目标实现类似功能。multi-user.target 对应运行级别 3,graphical.target 对应运行级别 5。

  • 启动流程总结
    以下表格总结了 Linux 启动的主要阶段:

    阶段 主要任务 关键组件
    硬件初始化 POST 自检、引导设备选择 BIOS/UEFI
    引导加载 加载内核和 initrd GRUB/LILO
    内核启动 初始化硬件、挂载根文件系统 Linux 内核
    系统初始化 启动服务、管理依赖 systemd
    用户登录 启动登录管理器、进入 Shell gdm/lightdm

常见启动问题与排查

  • GRUB 菜单不显示:检查 /boot/grub/grub.cfg 是否存在,或运行 update-grub 重新生成配置。
  • 内核 panic:可能是根文件系统挂载失败或驱动不兼容,可通过 dmesg 查看内核日志。
  • 服务启动失败:使用 systemctl status <service>.service 检查服务状态,或查看 journalctl 日志。

Linux 系统的启动流程从硬件初始化到用户登录,环环相扣,各阶段紧密协作,通过理解这一过程,用户可以更高效地管理系统、排查故障,并根据需求优化启动性能,无论是开发者还是系统管理员,掌握 Linux 启动机制都是必备技能。

赞(0)
未经允许不得转载:好主机测评网 » Linux启动流程详解,各阶段做了什么,如何排查启动问题?