一文讲懂Linux BIOS、grub、UEFI、boot、bootloader

📅 2026/7/2 5:22:46
一文讲懂Linux BIOS、grub、UEFI、boot、bootloader
1. 概述当一台基于Linux的计算机从按下电源键到出现登录界面中间经历了一系列复杂的初始化与引导过程。理解其中的核心组件——BIOS、UEFI、Bootloader如GRUB、以及“boot”这一概念是系统运维与内核开发的基础。2. 核心概念详解2.1 BIOSBasic Input/Output System定义BIOS是固化在主板ROM芯片中的固件诞生于20世纪70年代提供最底层的硬件初始化和运行时服务。工作模式16位实模式仅能访问1MB内存空间。启动限制从第一个扇区512字节加载主引导记录MBRMBR中仅446字节用于引导代码64字节用于分区表2字节用于结束标志0x55AA。缺点不支持大硬盘MBR最大2TB、启动慢、无安全校验、扩展性差。2.2 UEFIUnified Extensible Firmware Interface定义UEFI是BIOS的现代替代标准支持32/64位模式提供更丰富的接口与图形界面。关键特性支持GPT分区表突破2TB限制。内置驱动模型可识别文件系统如FAT32、NTFS、ISO9660。提供引导服务Boot Services和运行时服务Runtime Services。支持Secure Boot安全启动防止恶意代码劫持引导链。启动文件EFI应用程序.efi存放于ESP分区EFI System Partition通常是FAT32格式挂载于/boot/efi。2.3 Boot引导与 Bootloader引导加载程序Boot引导指计算机从加电到操作系统内核运行之前的全过程包括固件自检、启动设备选择、加载Bootloader、加载内核等步骤。Bootloader引导加载程序一个特殊的程序负责从存储介质中读取操作系统内核并将控制权移交给内核。根据启动阶段分为第一阶段位于MBR或GPT保护区代码极小仅负责加载第二阶段。第二阶段功能完整提供菜单、文件系统驱动、内核参数配置等如GRUB的core.img。2.4 GRUBGRand Unified Bootloader地位Linux世界最主流的Bootloader支持BIOS与UEFI两种模式。版本GRUB Legacy已淘汰→ GRUB 2现代标准。核心文件/boot/grub/grub.cfg配置文件自动生成不建议直接编辑。/etc/default/grub用户配置源。boot.img、core.img、*.mod模块化组件。工作流程以UEFIGPT为例UEFI读取ESP分区中的EFI/BOOT/BOOTX64.EFI或发行版特定路径如EFI/ubuntu/grubx64.efi。GRUB加载配置文件显示启动菜单。选择内核后加载内核与initramfs镜像。调用ExitBootServices()移交控制权。3. 启动流程图以下为传统BIOSMBR与UEFIGPT两种模式的对比流程【BIOSMBR 模式】 加电 → BIOS自检(POST) → 加载中断向量表 → 读取MBR(0柱面0磁头1扇区) ↓ MBR中的bootloader(446B) ↓ 加载活动分区的卷引导记录(VBR) → 第二阶段bootloader(如GRUB) ↓ 读取/boot/grub → 加载内核initramfs ↓ 启动Linux内核 → 挂载根文件系统 【UEFIGPT 模式】 加电 → 平台初始化 → UEFI固件 → 读取NVRAM中的启动项(EFI变量) ↓ 进入ESP分区(EFI/BOOT/或指定路径) ↓ 加载*.efi启动程序(如grubx64.efi) ↓ GRUB读取grub.cfg → 显示菜单 ↓ 加载内核vmlinuz initramfs → ExitBootServices() ↓ 内核启动 → 执行init → 用户态4. 扩展技术详解4.1 MBRMaster Boot Record与 GPTGUID Partition Table特性MBRGPT最大磁盘容量2 TB18 EBZFS/大型阵列无实际限制分区数量4个主分区可扩展逻辑分区通常128个Windows限制存储位置第0扇区512B前34个扇区 备份表在尾部校验机制无CRC32校验头与分区表与BIOS/UEFI关系BIOS强制依赖MBRUEFI强制GPT可兼容MBR4.2 Secure Boot安全启动原理UEFI固件验证每一个被加载的.efi程序是否有有效数字签名。签名由Microsoft或硬件厂商密钥PK、KEK、db签发。Linux适配主流发行版Ubuntu、Fedora、openSUSE使用由Microsoft签名的“Shim”引导器作为一级loader再加载自身签名的GRUB或内核。用户操作可关闭Secure Boot或自行导入MOKMachine Owner Key来签名自定义内核。4.3 Initramfs / Initrd概念一个临时的根文件系统镜像包含必要的内核模块如磁盘驱动、文件系统驱动和init脚本帮助内核挂载真实的根文件系统。为什么需要根文件系统可能位于RAID、LVM、加密卷或网络存储上这些驱动模块未被编译进内核时需要initramfs先加载环境。生成工具dracutRHEL/Fedora、mkinitramfsDebian/Ubuntu、mkinitcpioArch。查看内容lsinitramfs /boot/initrd.img-$(uname -r)或zcat initrd | cpio -it。4.4 其他Bootloader简述LILO传统Linux加载器不支持文件系统需重写MBR才能更新配置已基本被淘汰。SYSLINUX轻量级常用于Live USB或PXE网络启动支持FAT/NTFS。systemd-boot原名gummiboot集成于systemd项目仅支持UEFI配置简单适合单内核或双系统。U-Boot嵌入式系统常用ARM、MIPS支持多种文件系统和网络启动。4.5 内核启动参数cmdlineBootloader向内核传递的重要参数示例root/dev/sda2指定根文件系统位置。ro以只读方式挂载根fs便于fsck。quiet减少日志输出。consoletty0 consolettyS0,115200同时输出到显卡和串口。5. 常见故障与排错思路现象可能原因解决方法开机显示“No bootable device”BIOS/UEFI启动顺序错误或MBR损坏检查启动顺序用Live CD修复MBR/GPT表GRUB Rescue模式GRUB core.img损坏或分区路径变化使用set rootinsmod normalnormal恢复内核加载后挂载根fs失败initramfs缺少驱动或root参数错误在GRUB菜单编辑linux行修改rootSecure Boot阻止引导未签名的内核或自定义EFI程序关闭Secure Boot或导入MOK签名6. 总结术语核心作用关联技术BIOS传统固件16位MBR启动中断调用CMOS设置UEFI现代固件64位GPT启动支持安全校验ESP分区EFI变量Secure BootBootloader加载内核到内存传递启动参数GRUBsystemd-bootLILOGRUB功能最强大的Bootloader模块化设计支持多系统core.imggrub.cfgMBR/GPT磁盘分区表格式决定启动方式与容量限制分区工具fdiskgdiskInitramfs临时根文件系统加载真正根fs所需的驱动dracutmkinitramfs