原创:根据实际生产环境与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 上电自检(硬件层)
按下电源键后发生了什么?
-
主板通电,自动运行固化在主板ROM芯片中的BIOS(或UEFI)固件。
-
POST(上电自检):依次检测CPU、内存、显卡、硬盘、键盘等。如果内存坏了,你会听到蜂鸣器报警,屏幕都不亮。
-
BIOS读取用户设定的启动顺序(硬盘、U盘、光驱、网络),按优先级逐个尝试。
-
传统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 missing或No bootable device,此时系统完全进不去,需要用安装盘修复引导。
阶段3:GRUB引导加载程序 ------ 让你看到系统选择菜单
当GRUB的stage2被加载后,它才算真正"活"过来:
-
读取配置文件
/boot/grub2/grub.cfg(CentOS下路径)。 -
屏幕弹出漂亮的菜单,列出所有可启动的操作系统(Linux不同内核版本、Windows、救援模式等)。
-
用户用键盘选择(或超时自动默认)。
-
选中后,GRUB做两件核心事:
-
将 Linux内核镜像(vmlinuz) 加载到内存。
-
将 临时文件系统(initramfs) 一起载入内存。
-
-
移交CPU控制权,正式进入内核阶段。
⭐ 重点:为什么需要 initramfs?(新手必问)
-
根文件系统(
/)通常放在硬盘的ext4/xfs分区,但内核刚启动时,还没有硬盘控制器驱动,它无法直接读取硬盘。 -
initramfs是一个预先制作好的小型压缩文件系统,里面打包了硬盘、RAID、LVM等必要驱动。 -
内核先解压
initramfs并运行,借助里面的驱动识别硬盘,然后才能挂载真正的根分区。 -
如果
initramfs缺失或驱动不对,内核会报Kernel panic - not syncing: VFS: Unable to mount root fs,启动立刻失败。
阶段4:Linux内核初始化 ------ 正式进入系统世界
GRUB把内核vmlinuz加载到内存后,内核开始:
-
自解压,并初始化所有底层硬件(CPU、中断控制器、内存管理、磁盘控制器、网卡等)。
-
运行initramfs ,加载驱动,识别硬盘,挂载真实的根文件系统
/。 -
卸载initramfs(它已完成历史使命),释放内存。
-
挂载根分区后,内核在根文件系统中找到 第一个用户空间进程(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)
输入账号密码后:
-
系统读取
/etc/passwd和/etc/shadow校验身份。 -
验证通过后,启动你默认的Shell(如
/bin/bash)。 -
自动执行全局配置文件
/etc/profile,再执行用户自己的配置文件~/.bashrc(或~/.zshrc)。 -
最终出现命令行提示符,例如
[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服务依赖异常(如网络服务等待超时) |
六、最后给初学者的两点提醒
-
前三步(BIOS→MBR→GRUB)不属于Linux系统 ,它们是硬件和固件层面的通用流程,即便装的是Windows,也会走这前三步。从内核启动开始,才真正进入Linux的世界。
-
学习启动流程时,不要死记硬背命令 ,而是理解每一级"为什么需要它""它要解决什么问题"。当你懂得
initramfs是为了加载硬盘驱动,那么排障时自然知道去检查它。
希望这篇博客能帮你彻底理清Linux启动的来龙去脉。如果觉得有用,欢迎收藏、转发,也欢迎在评论区交流你的学习心得或排障经历!
--- 本文基于CentOS 7/8/9及主流Linux发行版编写,适用于初学者及运维新人。
关注我,后续带你深入
systemd单元管理、grub2修复、内核参数调优等实战内容。