[Share Experiences] 关于BIOS, CMOS, UEFI, MBR, GPT, GRUB的大杂烩介绍
Tofloor
poster avatar
流浪的加菲
deepin
2024-07-23 10:35
Author

与操作系统启动相关的几个概念

不管是 Windows 还是 Linux 操作系统,操作系统启动之前都需要对搭载系统的硬件进行检测,然后硬盘引导启动操作系统,以下是与操作系统启动相关的几个概念。

关于启动方式

BIOS

BIOS(Basic Input Output System),直译成中文名称就是"基本输入输出系统"。它是一组固化到主板中一个ROM芯片上的程序,它可以从CMOS中读写系统设置的具体信息。此程序保存着计算机最重要的基本输入输出程序、开机后的自检程序和系统自启动程序。

简单来说,BIOS是一个控制电脑中所有输入输出的程序,它可以对主板上的键盘、鼠标、外部接口、频率、电源、磁盘驱动器等方面进行参数控制和调整。

image.png

CMOS

CMOS是一种集成电路(IC)技术,被广泛用于存储BIOS设置和其他计算机配置信息的非易失性存储器。CMOS存储器通常位于主板上的特定芯片中,可持久保存BIOS设置即使在断电情况下。

BIOS与CMOS的区别

  • 可变性:BIOS是可固化(固件)的,一旦被写入芯片中,通常无法直接更改。CMOS存储器是可擦写的,允许用户在操作系统启动时通过BIOS设置界面更改配置参数。
  • 电源需求:由于BIOS是固化在芯片中的,它不需要持续的电源供应来保持数据完整性。CMOS存储器是非易失性的,需要小型的纽扣电池或外部电源来保持存储数据的稳定性。(这里是不是很熟悉,知道为什么电脑主板上有纽扣电池了吧🤧 )

UEFI

UEFI(Unified Extensible Firmware Interface)则是取代传统BIOS的,UEFI运行于32或64位模式,它突破了传统16位代码的寻址能力,达到处理器的最大寻址,克服了BIOS代码运行缓慢的弊端。相比传统BIOS来说,UEFI更易实现,容错和纠错特性也更强,UEFI支持2TB以上硬盘。

image.png

传统BIOS主要支持MBR引导,而UEFI一般是GPT引导,所以这里又要说下MBR和GPT

关于引导分区表

MBR

MBR是传统的分区表类型,当一台电脑启动时,它会先启动主板上的BIOS系统,BIOS再从硬盘上读取MBR主引导记录,硬盘上的MBR运行后,就会启动操作系统,但最大的缺点则是不支持容量大于2T的硬盘。

image.png

GPT

GPT是一种更先进的磁盘系统分区方式,它的出现弥补了MBR这个缺点,最大支持18EB的硬盘,是基于UEFI使用的磁盘分区架构。

image.png

目前所有Windows系统均支持MBR,而GPT只有64位系统才能支持。BIOS只支持MBR引导系统,而GPT仅可用UEFI引导系统。正因为这样,现在主板大多采用BIOS集成UEFI,或UEFI集成BIOS,以此达到同时兼容MBR和GPT引导系统的目的。

启动引导和分区表的搭配

BIOS使用MBR分区表

这是最传统的组合,系统都会支持,唯一的缺点就是不支持容量大于2T的硬盘。

BIOS + Windows:

Bios 读取 MBR 前446字节的引导程序到内存并执行,MBR里面也有分区表,引导程序根据这个分区表找到引导分区,再加载引导分区的第一个扇区(PBR)的二级引导程序,二级引导加载下一步的bootmgr (bootloader)。

BIOS + Linux

Bios 读取 MBR 前446字节(GRUB的boot.img)的引导程序到内存并执行,MBR里面也有分区表,引导程序读取分区表,并加载core.img,MBR和第一个分区中间的空隙放的是GRUB的core.img,从/boot/grub中读取配置和其他功能代码从而加载系统。

特别说明:BIOS也是可以使用GPT分区表的硬盘来作为数据盘的,但不能引导系统;若电脑同时带有容量小于2T的硬盘和容量大于2T的硬盘,小于2T的可以用MBR分区表安装系统,而大于2T的可以使用GPT分区表来存放资料。但系统须使用64位系统。

UEFI使用gpt分区表

如果要把大于2T的硬盘作为系统盘来安装系统的话,就必须UEFI+GPT,而且系统须使用64位系统,否则无法引导。

UEFI + Windows

Uefi自身可以识别fat32文件系统,uefi启动时会自动扫描启动设备,只要是带、fat32分区的都可以是启动设备,这些启动设备会显示在uefi的启动项里面,比如插上了一个带fat32分区的U盘,就会被uefi识别到,下一步就是去第一个启动设备的fat32分区的/boot/efi/目录下找osloader,也就是bootloader,64位系统叫做bootx64.efi,32位系统叫做boot.efi。一般这个efi是根据EDK2工程编译出来的,它的作用就是加载操作系统内核。

UEFI + Linux

Uefi自身可以识别fat32文件系统,uefi启动时会自动扫描启动设备,只要是带、fat32分区的都可以是启动设备,这些启动设备会显示在uefi的启动项里面,比如插上了一个带fat32分区的U盘,就会被uefi识别到,下一步就是去第一个启动设备的fat32分区的/boot/efi/目录下找osloader,也就是bootloader,64位系统叫做bootx64.efi,32位系统叫做boot.efi。一般这个efi是根据EDK2工程编译出来的,它的作用就是加载操作系统内核。 linux 系统上可能就是 core.img 的功能,只不过做成了efi文件。

特别说明:UEFI也是可以搭配MBR分区表来使用的,但是需要把UEFI设置成Legacy模式(传统模式)让其支持传统MBR启动,效果同BIOS+MBR;

关于GRUB引导

GRUB(GRand unified bootloader),多操作系统启动程序。它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。

GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。它是一个多重操作系统启动管理器,用来引导不同系统,如Windows、Linux。Linux的GRUB加载引导简化流程如图:

image.png

Linux系统的开机引导过程:

1)开机自检:检测硬件设备,找到能够引导系统的设备,比如硬盘
2)MBR引导:运行MBR扇区里的主引导程序GRUB
3)启动GRUB菜单:系统读取GRUB配置文件(/boot/grub2/grub.cfg)获取内核的设置和位置,并在屏幕显示GRUB菜单页面
4)加载Linux内核:把内核加载到内存,将系统控制权交接给内核
5)init进程初始化:内核将init进程加载到内存中运行,并把init进程作为系统的第一个进程
6)系统初始化:启动内核模块,执行运行级别的启动脚本,执行/etc/rc.d/rc.local文件里的命令等

对于Linux启动引导感兴趣的同学可以查阅:Linux 引导过程与服务控制

Reply Favorite View the author
All Replies
流浪的加菲
deepin
2024-07-23 10:39
#1

很多人喜欢折腾GRUB,系统启动引导相关的的皮毛知识还是要了解下的,然后再决定要不要去深入学习和折腾。

Reply View the author
乾豫恒益
deepin
2024-07-23 11:17
#2

再学习一下,温故而知新。。。

Reply View the author
阿尼樱奈奈
Moderator
2024-07-23 19:35
#3
感谢分享
Reply View the author
132******94
deepin
2024-07-23 21:50
#4

补充和纠正一下:

电脑主板CMOS或者叫BIOS芯片是一种易失性的存储芯片,关机后需要钮扣电池供电保持数据,否则会丢失数据,实际上现在都是FLASH芯片了,钮扣电池更多的只是用来维持RTC时钟,扣电池清除BIOS配置可能只是程序做出的状态识别反馈

BIOS/UEFI程序是传统和现代两种体系的计算机基础固件程序,是计算机开机加电运行的第一段程序

MBR/GPT也是两种硬盘分区方案,在苹果IOS和其它专业、小众的操作系统中还有其它分区方案

固件/分区表的搭配除了bios+mbr和uefi+gpt以外,还有bios+gpt+grub+linux

IMG_20240723_214441.jpg

Reply View the author
流浪的加菲
deepin
2024-07-24 08:50
#5
132******94

补充和纠正一下:

电脑主板CMOS或者叫BIOS芯片是一种易失性的存储芯片,关机后需要钮扣电池供电保持数据,否则会丢失数据,实际上现在都是FLASH芯片了,钮扣电池更多的只是用来维持RTC时钟,扣电池清除BIOS配置可能只是程序做出的状态识别反馈

BIOS/UEFI程序是传统和现代两种体系的计算机基础固件程序,是计算机开机加电运行的第一段程序

MBR/GPT也是两种硬盘分区方案,在苹果IOS和其它专业、小众的操作系统中还有其它分区方案

固件/分区表的搭配除了bios+mbr和uefi+gpt以外,还有bios+gpt+grub+linux

IMG_20240723_214441.jpg

专业的勒like

Reply View the author
Oli
deepin
2024-07-24 17:27
#6

温故而知新

Reply View the author
库罗靡靡
deepin
2024-08-01 13:05
#7

不知道为啥,对grub不是很感冒。更喜欢systemd直接做boot,可能是因为配置更方便吧 。

Reply View the author