# 电脑启动需要经历哪些过程？

> 发布于：2024-11-27 | 分类：笔记, 技能分享 | 原文：https://www.imbailey.cn/post/computer-boot-process

# 传统BIOS启动流程

## 1. BIOS

BIOS 启动，BIOS程序是烧进主板自带的ROM里的，所以无硬盘也可以启动。BIOS先进行自检，检查内存、显卡、磁盘等关键设备是否存在功能异常，会有蜂鸣器汇报错误，无错误自检飞快结束。

硬件自检完成后，BIOS把控制权转交给下一阶段的启动程序。需要有一个外部储存设备的排序，排在前面的设备就是优先转交控制权的设备。这种排序叫做启动顺序。可以在BIOS中设置。


## 2. 主引导

BIOS按照"启动顺序"读取第一位的储存设备。判断有没有MBR，如果有就读取。MBR：存储设备中的第一个扇区，磁盘最前面的512Byte，称为“主引导扇区”（Master boot record，缩写为MBR）

MBR很小，只有512字节，存放程序很小，其主要作用是：告诉计算机在哪一个位置去找操作系统。

MBR由三个部分组成：调用操作系统的机器码、硬盘分区表（Partition table）、主引导记录签名（0x55和0xAA）（用于判断这段程序是不是主引导，不是的话就按启动顺序往下继续找）

## 3. 硬盘启动

这时，计算机的控制权就要转交给硬盘的某个分区了。分成三种情况：情况A：卷引导记录、情况B：扩展分区和逻辑分区、情况C：启动管理器。

Linux环境中，目前最流行的启动管理器是Grub。Windows是Windows Boot Manager。

## 4. 操作系统

控制权转交给操作系统后，操作系统的内核首先被载入内存。最后完成所有启动流程。


# UEFI启动
UEFI：UEFI 是 BIOS 的升级版本，是一种更现代的固件接口，逐渐取代传统 BIOS。现在的华硕主板的BIOS界面都很好看，还能支持鼠标操作，这就是UEFI了。

UEFI 使用 GPT 分区标准，取代了旧的 MBR 标准。这让 UEFI 可以从超过 2TB 的大容量硬盘启动，而且理论上也没有磁盘大小限制。它支持 32 位和 64 位系统启动，并提供了安全启动 (Secure Boot) 等功能，不仅启动速度更快，还能检测恶意软件，确保启动过程未被篡改。

UEFI与BIOS的主要区别：

| 区别     | BIOS                     | UEFI                                           |
| -------- | ------------------------ | ---------------------------------------------- |
| 分区表   | 使用主引导记录 (MBR)     | 使用全局唯一标识分区表 (GPT)                   |
| 数据存储 | 存储在主板的 BIOS 芯片上 | 存储在存储设备的 EFI 文件中                    |
| 运行模式 | 只能在 16 位模式下工作   | 可以在 64 位模式下运行，可寻址内存更大         |
| 用户界面 | 仅支持键盘导航的文本界面 | 提供更直观的图形界面，支持鼠标操作             |
| 网络支持 | 无网络功能               | 有些具备网络功能，可在线更新固件，远程排除故障 |

UEFI 最终也是需要启动一个引导程序（如 GRUB 或 Windows Boot Manager）来完成操作系统的启动过程。

在启动了GRUB之后，是可以编辑启动配置项的。比如可以禁用一些驱动（例如nouvea）来解决bug。

## UEFI是怎么处理双系统的

在UEFI系统的硬盘上，有一个专门的分区叫做 EFI 系统分区（ESP），这里存放着每个操作系统的引导程序，比如 Windows 的 `bootmgfw.efi` 和 Linux 的 `grubx64.efi`。

如果你的电脑装了双系统，比如 Windows 和 Linux，当你安装操作系统时，它们都会在 ESP 中添加自己的引导程序，同时告诉 UEFI 固件这个启动文件的位置。Windows 会创建自己的引导程序 `bootmgfw.efi`，默认直接启动 Windows。而 Linux 安装时，通常会使用 GRUB 作为引导程序，并把 GRUB 设置为默认的启动项。GRUB 很强大，它不仅能加载 Linux 系统，还能自动检测到 Windows 的存在，并在启动时提供一个菜单，让你选择启动 Windows 或 Linux。

如果安装顺序是先装 Windows 再装 Linux，Linux 的 GRUB 通常会接管启动流程。这意味着当你开机时，电脑会优先加载 GRUB，然后你可以从菜单里选择想进入的操作系统。但如果 Windows 后来更新系统，它可能会覆盖 GRUB，把自己设为默认启动项。这时你会发现电脑直接进入 Windows，而看不到 GRUB 的菜单。这种情况下，可以通过调整 UEFI 的启动顺序，或者用 Linux 的工具（比如 `sudo update-grub`）重新修复启动菜单。

如果先装 Linux 再装 Windows，大概率会把 Linux 的引导程序（通常是 GRUB）覆盖掉，导致开机时直接进入 Windows 系统，而无法看到 Linux 的启动菜单。这是因为 Windows 安装程序在处理引导设置时，不会主动识别或保留其他操作系统的引导程序。Windows 安装完成后，会覆盖原来的引导加载程序（GRUB），导致无法直接启动 Ubuntu。这时需要修复 GRUB 来恢复双系统启动选项。可以使用 Ubuntu 安装介质（U盘）启动计算机，进入 Ubuntu 的 “试用” 模式（在安装界面选择 “试用 Ubuntu” 而不是 “安装 Ubuntu”）。然后打开终端，使用命令来重新安装和修复 GRUB。例如，在终端中输入 “sudo mount /dev/sdaX/mnt”（其中 sdaX 是 Ubuntu 系统分区的设备名称，需要根据实际情况替换），将 Ubuntu 分区挂载到 /mnt 目录下，接着输入 “sudo grub - install -- root - directory=/mnt/dev/sda”（假设硬盘设备名称是 sda）来重新安装 GRUB，这样就可以恢复双系统启动选项，在启动时可以选择进入 Ubuntu 或者 Windows。
