Linux系统启动流程详解:从按下电源到登录提示符(零基础友好)

原创:根据实际生产环境与CentOS 7/8/9主流体系整理,适合Linux初学者、运维入门


一、整体评价:你的理解到哪里了?

很多新手在学习Linux启动流程时,容易陷入"概念模糊""体系混乱"的困境。如果你已经能说出 BIOS → MBR → GRUB → Kernel → init → 登录界面 这条主线,那么恭喜你,大方向完全正确!这五个阶段是Linux启动的"骨架",能分清它们,说明你已经入门了。

但仅仅知道"骨架"是不够的,很多细节上的颠倒、混淆、遗漏,往往会让新手在真正排障时手足无措。

下面我先帮你理清常见误区,再逐阶段拆解,保证让你一次搞懂。


二、常见误区逐点剖析(小白避坑指南)

误区 正确理解
"加载BIOS信息" BIOS是主板固件,开机自动运行,不是系统去"加载"它
MBR和GRUB混为一谈 MBR只有512字节,只存了GRUB的"最小引导"(stage1),完整菜单是stage2
内核启动直接挂载根分区 中间漏掉了initramfs临时文件系统,没有它内核根本认不出硬盘
所有Linux都用init脚本 那是CentOS 6及以前的老古董,CentOS 7+全换成了systemd,两者差异巨大
登录界面就是终点 输入密码后还要加载Shell和环境变量,出现命令提示符才算完

一句话:启动过程不是"线性执行",而是"逐级接力",每一级都有明确的职责和局限性。


三、逐阶段详细拆解(零基础友好版)

阶段1:BIOS/UEFI 上电自检(硬件层)

按下电源键后发生了什么?

  1. 主板通电,自动运行固化在主板ROM芯片中的BIOS(或UEFI)固件。

  2. POST(上电自检):依次检测CPU、内存、显卡、硬盘、键盘等。如果内存坏了,你会听到蜂鸣器报警,屏幕都不亮。

  3. BIOS读取用户设定的启动顺序(硬盘、U盘、光驱、网络),按优先级逐个尝试。

  4. 传统BIOS找到硬盘后,读取该硬盘的第一个扇区(0磁头0柱面1扇区) ,即MBR

    • 新式UEFI则不再用MBR,而是读取ESP分区(EFI系统分区)中的引导文件。

小白记忆:BIOS就是硬件"体检医生",查完身体后,把接力棒交给硬盘的第一个扇区。


阶段2:MBR(主引导记录)------ 仅仅512字节的"小跳板"

MBR位于硬盘起始位置,总共只有 512字节,分为:

  • 前446字节 :存放引导程序第一阶段(stage1),这是GRUB最精简的代码。

  • 后66字节:硬盘分区表(记录4个主分区信息)。

stage1 能做什么? 它体积太小,功能极其有限------只能识别硬盘,看不懂分区,更读不到内核文件。它的唯一任务是找到 /boot 分区,并加载第二阶段的引导程序(stage2)

⚠️ 踩坑提醒 :如果MBR损坏,开机只会黑屏提示 Boot missingNo bootable device,此时系统完全进不去,需要用安装盘修复引导。


阶段3:GRUB引导加载程序 ------ 让你看到系统选择菜单

当GRUB的stage2被加载后,它才算真正"活"过来:

  1. 读取配置文件 /boot/grub2/grub.cfg(CentOS下路径)。

  2. 屏幕弹出漂亮的菜单,列出所有可启动的操作系统(Linux不同内核版本、Windows、救援模式等)。

  3. 用户用键盘选择(或超时自动默认)。

  4. 选中后,GRUB做两件核心事

    • Linux内核镜像(vmlinuz) 加载到内存。

    • 临时文件系统(initramfs) 一起载入内存。

  5. 移交CPU控制权,正式进入内核阶段。


⭐ 重点:为什么需要 initramfs?(新手必问)
  • 根文件系统(/)通常放在硬盘的ext4/xfs分区,但内核刚启动时,还没有硬盘控制器驱动,它无法直接读取硬盘。

  • initramfs 是一个预先制作好的小型压缩文件系统,里面打包了硬盘、RAID、LVM等必要驱动。

  • 内核先解压initramfs并运行,借助里面的驱动识别硬盘,然后才能挂载真正的根分区。

  • 如果initramfs缺失或驱动不对,内核会报 Kernel panic - not syncing: VFS: Unable to mount root fs,启动立刻失败。


阶段4:Linux内核初始化 ------ 正式进入系统世界

GRUB把内核vmlinuz加载到内存后,内核开始:

  1. 自解压,并初始化所有底层硬件(CPU、中断控制器、内存管理、磁盘控制器、网卡等)。

  2. 运行initramfs ,加载驱动,识别硬盘,挂载真实的根文件系统 /

  3. 卸载initramfs(它已完成历史使命),释放内存。

  4. 挂载根分区后,内核在根文件系统中找到 第一个用户空间进程(PID=1),将其加载运行。

🔥 关键区分(面试/考试高频)

  • CentOS 6 / RHEL 6 及更早:PID=1 是 /sbin/init(System V 初始化风格,脚本串行启动)。

  • CentOS 7 / 8 / 9、Ubuntu 16.04+ :PID=1 是 /usr/lib/systemd/systemd(新一代并行初始化,速度更快,管理更灵活)。


阶段5:一号进程初始化系统服务(新旧体系对比)

① 老式 System V init(CentOS 6,现在极少用了)
  • 读取 /etc/inittab,确定运行级别(0关机,1单用户,3字符界面,5图形界面,6重启)。

  • 依次执行 /etc/rc.d/rcN.d/ 目录下的脚本(以S开头启动,K开头停止),启动网络、sshd、数据库等服务。串行执行,速度慢。

② 新式 systemd(CentOS 7+,现役主流)
  • 不再使用运行级别,改用 target(目标) 概念:multi-user.target 对应字符界面,graphical.target 对应图形界面。

  • 并行启动所有无依赖的服务,启动速度大幅提升。

  • 同时挂载其他文件系统(/home/var/tmp),加载定时任务、环境变量、日志服务(rsyslog/journald)。

  • 最后启动终端管理器getty),准备迎接用户登录。


阶段6:登录界面 & 登录后的完整收尾

systemd 启动 getty 终端程序,屏幕出现:

  • 字符界面:CentOS Linux 7 (Core) Kernel ... login:

  • 图形界面:图形化登录窗口(如GDM、LightDM)

输入账号密码后

  1. 系统读取 /etc/passwd/etc/shadow 校验身份。

  2. 验证通过后,启动你默认的Shell(如 /bin/bash)。

  3. 自动执行全局配置文件 /etc/profile,再执行用户自己的配置文件 ~/.bashrc(或 ~/.zshrc)。

  4. 最终出现命令行提示符,例如 [root@localhost ~]#[user@host ~]$

到此,Linux才算完全启动完成,你可以开始敲命令了!


四、完整启动流程全景图(可背诵)

按下电源 →

① BIOS/UEFI自检硬件,按顺序找可引导设备 →

② 读取硬盘MBR(stage1),加载GRUB第二阶段(stage2) →

③ GRUB显示菜单,加载内核 vmlinuz 和临时文件系统 initramfs

④ 内核解压,借助initramfs识别硬盘,挂载真实根分区 /,启动PID=1进程 →

⑤ systemd(或init)并行(或串行)启动所有系统服务,挂载分区 →

⑥ 显示登录提示,用户登录后加载Shell与环境,出现命令提示符。


五、高频故障快速定位(面试常问)

故障现象 可能原因
开机提示 Boot missing 或黑屏无引导 MBR损坏(446字节引导代码丢失)
GRUB菜单无法出现,只显示 grub rescue> /boot 分区丢失或grub.cfg损坏
内核报错 Unable to mount root fs initramfs 缺少对应磁盘驱动,或根分区标识不对
能进GRUB,也能看到内核加载,但卡在某个服务长时间不动 systemd服务依赖异常(如网络服务等待超时)

六、最后给初学者的两点提醒

  1. 前三步(BIOS→MBR→GRUB)不属于Linux系统 ,它们是硬件和固件层面的通用流程,即便装的是Windows,也会走这前三步。从内核启动开始,才真正进入Linux的世界

  2. 学习启动流程时,不要死记硬背命令 ,而是理解每一级"为什么需要它""它要解决什么问题"。当你懂得initramfs是为了加载硬盘驱动,那么排障时自然知道去检查它。


希望这篇博客能帮你彻底理清Linux启动的来龙去脉。如果觉得有用,欢迎收藏、转发,也欢迎在评论区交流你的学习心得或排障经历!

--- 本文基于CentOS 7/8/9及主流Linux发行版编写,适用于初学者及运维新人。

关注我,后续带你深入systemd单元管理、grub2修复、内核参数调优等实战内容。