名词解释教学工作区 · 课程 0012 · 形态 单概念 · 约 5 分钟 · 前置:无(只需知道「内核」这个词) · 相关:0011 · tmux · 2026-10-01

GRUB:开机到内核之间,那一步是谁在干

你能做到:把开机头几秒拆成固件 → 引导加载程序 → 内核三步,说清每一步归谁、分界在哪; 并解释两件事 —— 多系统菜单是谁画的、为什么它的配置「改完必须重新生成」。

1 | 定义

GRUB,全称 GRand Unified Bootloader(大一统引导加载程序): 一个存在磁盘上的程序,固件做完自检后把控制权交给它;它自带读文件系统的能力, 于是能按名字找到内核文件、必要时弹出一份菜单让你挑一个系统,再把内核与配套的 临时根文件系统 initramfs 一起读进内存,跳过去执行。 像接力的第一棒:固件把机器叫醒,由它决定接下来跑哪个系统 —— 挑好人、送上跑道,它自己就退场了。

2 | 它解决什么麻烦

刚通上电时内存是空的、操作系统还不存在,能跑的只有焊在主板上的固件 firmware。 它对硬盘的认知少得可怜:老的 BIOS 基本只会读硬盘第一个扇区 (MBR,主引导记录,512 字节);新的 UEFI 也只认 ESP(EFI 系统分区)—— 一个 FAT 格式小分区里的可执行文件。 而内核是一个带版本号的文件,住在某个分区的目录里,还常常要先加载一份临时根文件系统, 才能挂上真正的根分区。

缺的是一个认识文件系统、能按名字找文件、还能画一份菜单的程序。

3 | 它怎么解决

固件 firmware 自检完,去找下一个能跑的程序 -> GRUB 读自己的配置、弹菜单、把内核读进内存 -> 内核 kernel 接管整台机器,挂上真正的根分区 -> init 内核拉起的第一个用户程序

4 | 用它的代价

5 | 真实使用场景

场景一:装完双系统,开机菜单里挑 Windows 还是 Linux。

sudo grub-install /dev/sda   # UEFI 机器改成 --target=x86_64-efi --efi-directory=/boot/efi

那条菜单就是 GRUB 画的,每条对应一个能启动的系统或内核;名字是生成配置那一刻探测出来的, 探测不到就不会出现。

场景二:内核更新后菜单自动多一项,顺手改默认项与等待时间。

# 发行版装新内核时会自动跑一次生成命令,菜单里于是多出一个新版本条目
sudo update-grub             # Debian/Ubuntu;Fedora 上是 grub2-mkconfig -o /boot/grub2/grub.cfg
sudo nano /etc/default/grub  # 改 GRUB_DEFAULT 与 GRUB_TIMEOUT(默认项、等待秒数)
sudo update-grub             # 改完原料必须再生成一次,新配置才生效

场景三:起不来的时候,用一张 live USB 把它修回去。

sudo mount /dev/sda2 /mnt                 # 先挂上装了系统的根分区
sudo mount /dev/sda1 /mnt/boot/efi        # UEFI 机器再挂上 ESP
sudo chroot /mnt grub-install /dev/sda    # 进系统环境重装引导程序
sudo chroot /mnt update-grub              # 重新生成菜单

GRUB 挂了不等于系统没了:文件都还在盘上,缺的只是那个负责把内核找出来、送上去的程序。

6 | 和相近的东西怎么分

先问一句:这一刻它认不认文件系统、能不能按名字读内核? 再问一句:它住在主板里,还是住在磁盘上?

名称它是什么和 GRUB 什么关系
GRUB(引导加载程序) 存在磁盘上、能按名字读内核、可弹多系统菜单的那段程序 本课主角:固件与内核之间的那一步
UEFI 固件 现在主板上的固件:自检、读 ESP 里的可执行文件、把它交给下一段 上一站:它按下电源先跑,再把控制权交给 GRUB
传统 BIOS 上一代固件:只读硬盘第一个扇区,只认 16 位实模式 也是上一站,但不认文件系统,只能把一小段代码搬进内存;新机器普遍已换成 UEFI
systemd-boot 另一种引导加载程序:只跑在 UEFI 上,菜单条目就是一个个普通配置文件 同类替代品:更朴素、配置更直白,但没法退到传统 BIOS,菜单能力也更少
rEFInd 另一款引导加载程序:图形化菜单,偏向自动探测各类系统 同类替代品:菜单更花哨,但配置与主题又是一套新东西
Windows 启动管理器 Windows 自己的引导程序:选完系统就把 Windows 内核交出去 同类但只管 Windows:控制权交到它手上之后它才出现;双系统菜单通常由 GRUB 这类程序统一画
initramfs(临时根文件系统) 内核与真正的根分区之间先顶上的一小份内存里的文件系统 下游同一段路:它由 GRUB 连内核一起读进内存,真正挂根分区的是内核

一句话分工:固件管「我该把控制权交给谁」,GRUB 管「加载哪个内核」,内核管「怎么把系统跑起来」。例外是树莓派这类单板机:固件自己读 FAT 启动分区里的文件,没有 GRUB 这一站。

7 | 常见误解

8 | 练习

三题自测,每题只有一个正确选项;选完立刻看到解释。

1. 开机后先自检硬件、再按自己保存的清单决定把控制权交给谁,这是谁?

对。自检与「下一个交给谁」都是固件的事;认文件系统、找内核是它交棒之后那一段干的,它自己不看内核。

2. 自带读文件系统的能力、能按名字找到内核,还能弹一份多系统菜单让你挑,这是谁?

对。「认文件系统、按名字找内核、画菜单」正是引导加载程序的定义;固件做不到这些,内核要等交棒之后才登场。

3. 内核与真正的根分区之间,那份先被读进内存的临时根文件系统叫什么?

对。内核与真正的根分区之间需要一份临时根文件系统顶班,它就是 initramfs,由 GRUB 连内核一起读进内存。