2. BIOS/UEFI阶段:固件初始化、硬件自检(POST)、启动设备选择与引导加载程序加载
BIOS(Basic Input/Output System)与UEFI(Unified Extensible Firmware Interface)是计算机启动流程的第一阶段固件层。该阶段负责从硬件上电到引导加载程序(Bootloader)被加载至内存之间的所有操作。理解这一阶段对于排查“开机无显示”、“无法进入系统”、“引导丢失”等故障至关重要。
2.1 固件初始化与硬件自检(POST)
当按下电源键后,主板上的固件(BIOS或UEFI)首先获得控制权。其核心任务是初始化关键硬件组件并执行加电自检(Power-On Self-Test, POST)。
核心目标: 确保CPU、内存、芯片组、显卡、存储控制器等基础硬件处于可用状态,否则系统无法继续启动。
2.1.1 BIOS与UEFI的初始化流程对比
| 阶段/特性 | 传统BIOS(Legacy BIOS) | UEFI |
|---|---|---|
| 初始化模式 | 实模式(16位),寻址空间受限(1MB) | 保护模式/长模式(32/64位),可访问全部内存 |
| 固件存储 | ROM/Flash,代码体积小 | Flash,支持模块化驱动(DXE) |
| 硬件检测 | 顺序执行POST,依赖中断向量 | 并行初始化,使用事件驱动模型 |
| 用户界面 | 文本菜单,键盘操作 | 图形化界面,支持鼠标与网络 |
| 启动设备表 | 存储在CMOS中,顺序固定 | 存储在NVRAM中,支持Boot Manager |
| 引导方式 | 读取MBR(主引导记录) | 读取GPT分区中的EFI系统分区(ESP) |
2.1.2 POST流程与故障码
POST过程会依次检测CPU、内存、显卡、键盘、磁盘等设备。如果检测到致命错误,固件会通过蜂鸣声(Beep Code)或主板诊断灯(Q-Code/LED)报告故障。
- CPU检测失败: 无任何反应,风扇可能转但无显示,通常伴随持续长鸣或特定蜂鸣码。
- 内存检测失败: 重复长鸣或特定节奏的蜂鸣,主板诊断卡显示内存初始化错误代码。
- 显卡检测失败: 1长2短或1长3短蜂鸣(取决于BIOS厂商),屏幕无输出。
- 磁盘控制器检测失败: 系统可能卡在“Detecting drives...”界面,或直接提示“No bootable device”。
排查技巧: 如果服务器或工作站无法启动,优先查看主板上的数码管(Debug LED)显示的十六进制代码。例如,AMI BIOS的“D6”通常表示“No Console Output Devices Found”,而“A2”表示“IDE Detect”。
2.2 启动设备选择与引导加载程序加载
POST完成后,固件根据用户配置的启动顺序(Boot Order)遍历启动设备列表,寻找可引导介质。找到后,将引导加载程序的第一阶段代码加载到内存并跳转执行。
2.2.1 启动设备枚举与选择流程
2.2.2 传统BIOS引导:MBR与第一阶段加载
在Legacy BIOS模式下,固件会读取启动磁盘的第一个扇区(LBA 0),即主引导记录(MBR)。MBR大小为512字节,包含:
- 引导代码(Boot Code): 前446字节,负责定位并加载活动分区的卷引导记录(VBR)。
- 分区表(Partition Table): 64字节,记录4个主分区信息。
- 魔数(Magic Number): 最后2字节(0x55AA),用于验证MBR有效性。
故障案例: 如果MBR被覆盖(例如误装Windows引导或磁盘损坏),BIOS会读取到无效的0x55AA标记或错误的引导代码,导致系统卡在“Booting from Hard Disk...”或直接重启。此时需要使用Linux Live CD执行
grub-install /dev/sda 或 dd if=/usr/lib/syslinux/mbr.bin of=/dev/sda 修复MBR。
2.2.3 UEFI引导:ESP与Boot Manager
UEFI固件不再依赖MBR,而是读取GPT(GUID Partition Table)磁盘上的EFI系统分区(ESP)。ESP通常格式化为FAT32,包含引导加载程序文件(.efi)。
UEFI的启动流程如下:
- 固件读取NVRAM中的Boot Manager变量: 例如
Boot0001、BootCurrent,这些变量指向ESP中的具体EFI文件路径。 - 遍历Boot Order: 按优先级尝试加载对应的EFI应用程序。
- 加载EFI引导加载程序: 例如
\EFI\BOOT\BOOTX64.EFI(默认回退路径)或\EFI\GRUB\GRUBX64.EFI。 - 执行引导加载程序: 控制权移交给GRUB2或systemd-boot等。
2.2.4 常见引导加载程序及其加载位置
| 引导加载程序 | BIOS模式加载位置 | UEFI模式加载位置 | 配置文件 |
|---|---|---|---|
| GRUB2 | MBR → VBR → core.img | /EFI/grub/grubx64.efi |
/boot/grub/grub.cfg |
| SYSLINUX | MBR → VBR → ldlinux.sys | 不常用 | syslinux.cfg |
| systemd-boot | 不适用 | /EFI/systemd/systemd-bootx64.efi |
/loader/loader.conf |
| LILO | MBR → VBR(已过时) | 不支持 | /etc/lilo.conf |
2.3 固件阶段故障排查要点
关键原则: 固件阶段的故障通常表现为“黑屏”、“无响应”、“蜂鸣码”或“找不到启动设备”。排查时应遵循“电源→CPU→内存→显卡→磁盘”的硬件顺序,再检查固件配置。
- 检查蜂鸣码与诊断灯: 查阅主板手册,确认蜂鸣码含义。例如,AMI BIOS的“1长3短”表示内存错误。
- 重置固件设置: 拔掉CMOS电池或短接跳线,恢复默认启动顺序,排除配置错误。
- 验证启动介质: 使用另一台机器或Live CD检查磁盘是否可读,MBR/GPT结构是否完整。
- 检查ESP分区: 在UEFI模式下,确保ESP分区存在且包含正确的EFI文件。可以使用
efibootmgr -v查看当前UEFI启动项。 - Secure Boot影响: 如果启用了Secure Boot,引导加载程序必须经过签名。未签名的GRUB或自定义内核会导致“Invalid signature”错误,需在固件中关闭Secure Boot或使用已签名的shim。
实战命令: 在Linux Live环境中,使用
lsblk 查看磁盘分区,使用 fdisk -l /dev/sda 检查分区表类型(MBR还是GPT),使用 mount /dev/sda1 /mnt && ls /mnt/EFI/ 检查ESP内容。