正文开始:
大家好,我是你的Linux老司机张王岩。
前几天有读者问我:“现代Linux启动为什么和以前不一样了?UEFI简化了早期阶段,systemd又取代了传统init,这到底是怎么回事?”
我当时用文字拆解了一遍,但总觉得不够直观。
今天,我直接给你一张专业级流程图(来自行业标准参考资料),配合最通俗易懂的逐框讲解,保证你看完就能完全明白——从按下电源键,到系统完全运行,Linux到底经历了哪12个关键步骤!
(插入图片位置 ↓)
配图这张图叫《Exhibit A: Linux & UNIX boot process》(例A:Linux & UNIX引导过程),它把整个启动流程画得清清楚楚。我们就按箭头顺序,一步一步拆给你看!
1. Power On(按下电源键)
一切从这里开始。电脑通电,主板开始工作。
2. Load BIOS/UEFI from NVRAM(加载UEFI固件)
这就是你经常听到的现代UEFI!
老式BIOS又慢又复杂,现在UEFI直接从主板NVRAM里读取配置,概念上简化了早期启动阶段,这正是原文里说的“至少从概念的角度来看是这样”。
3. Probe for hardware(硬件探测)
主板开始检查CPU、内存、硬盘、显卡等设备有没有问题。
4. Select boot device(选择启动设备)
决定从哪个盘启动——机械硬盘、SSD、U盘,还是网络启动。
5. Identify EFI system partition(识别EFI系统分区)
UEFI特有的步骤,找到硬盘上那个专门存放启动文件的小分区(/boot/efi)。
6. Load boot loader (e.g., GRUB)(加载GRUB等引导加载器)
GRUB跳出来,就是那个让你选择“Ubuntu / Windows / 安全模式”的菜单界面。
7. Determine which kernel to boot(决定加载哪个内核)
GRUB告诉你:今天用哪个Linux内核版本。
8. Load kernel(加载内核)
真正的Linux核心被读进内存,开始苏醒。
9. Instantiate kernel data structures(内核初始化数据结构)
内核开始搭建各种内部表格和驱动框架。
10. Start init/systemd as PID 1(启动systemd作为1号进程)
重头戏来了!
这里就是后期阶段的最大变化!
传统UNIX用老的init,现在99%的发行版都换成了systemd(进程号永远是1)。它带来的革命性改进正是原文所说的:
11. Execute startup scripts(执行启动脚本)
systemd按照依赖关系,井井有条地启动网络、图形界面、数据库、Docker等各种服务。
12. Running system(系统运行中)
登录界面出现,你可以愉快地敲代码了!
管理员到底能控制什么?
图下方那段话讲得特别清楚:
管理员对大多数步骤其实没有直接交互控制。
你只能通过修改配置文件(GRUB参数、systemd unit文件)或者给内核传递启动参数来间接影响启动过程。这也是为什么我们运维人员那么爱折腾 /etc/default/grub 和 systemctl 的原因。
实用小彩蛋:自己动手看启动过程
想亲眼看看你电脑的启动流程吗?开机后敲这三条命令就行:
systemd-analyze # 查看总启动时间
systemd-analyze blame # 哪个服务最慢
systemd-analyze plot > boot.svg # 生成超级漂亮的启动时间图!
写在最后
从老BIOS + SysV init,到现在的UEFI + systemd,Linux启动过程已经变得更快、更稳定、更可控。这张图几乎浓缩了所有核心变化。
看完之后,你是不是也觉得“原来这么简单”?
欢迎在评论区告诉我:
点赞 + 在看 + 转发给需要的小伙伴,我们下期继续拆Linux底层黑魔法!
作者:张王岩
地点:上海
专注分享好懂的Linux、运维、开源知识
欢迎关注,回复“启动”获取更多启动相关命令合集