1. Linux系统引导过程深度解析
每次按下电源键到看到登录界面,Linux系统其实经历了一个精密而复杂的启动过程。作为运维人员,我经常需要排查各种启动故障,理解这个过程的每个环节至关重要。
1.1 从硬件自检到内核加载
典型的Linux引导过程分为以下几个关键阶段:
-
BIOS/UEFI阶段:
- 硬件自检(POST)完成后,固件读取启动设备顺序
- 查找可启动设备的MBR(传统BIOS)或GPT分区表中的ESP分区(UEFI)
- 我在实际工作中发现,UEFI模式下经常遇到的"grub-efi-amd64-signed"错误通常与ESP分区挂载点设置不当有关
-
Bootloader阶段:
- GRUB2作为主流引导加载程序,会读取/boot/grub/grub.cfg
- 常见问题:当/boot分区单独划分且空间不足时,内核更新会导致引导失败
- 小技巧:定期检查/boot分区使用率
df -h /boot
-
内核初始化:
- 解压内核镜像并初始化硬件驱动
- 挂载根文件系统(注意initramfs的作用)
- 经验之谈:内核参数panic=30可以避免系统在严重错误时无限等待
1.2 init与systemd的演进对比
现代Linux发行版主要采用两种初始化系统:
| 特性 | SysV init | systemd |
|---|---|---|
| 启动方式 | 串行执行脚本 | 并行启动服务 |
| 服务管理 | service命令 | systemctl命令 |
| 日志系统 | 分散的日志文件 | 集中journalctl |
| 单元文件 | /etc/init.d/* | /lib/systemd/system/* |
我在CentOS 6到7的迁移过程中深刻体会到:理解systemd的target(相当于旧版的runlevel)对服务管理至关重要。例如:
bash复制# 查看当前target
systemctl get-default
# 修改
