流浪的加菲
2024-07-23 10:39 deepin
很多人喜欢折腾GRUB,系统启动引导相关的的皮毛知识还是要了解下的,然后再决定要不要去深入学习和折腾。
Reply Like 1 View the author
很多人喜欢折腾GRUB,系统启动引导相关的的皮毛知识还是要了解下的,然后再决定要不要去深入学习和折腾。
再学习一下,温故而知新。。。
补充和纠正一下:
电脑主板CMOS或者叫BIOS芯片是一种易失性的存储芯片,关机后需要钮扣电池供电保持数据,否则会丢失数据,实际上现在都是FLASH芯片了,钮扣电池更多的只是用来维持RTC时钟,扣电池清除BIOS配置可能只是程序做出的状态识别反馈
BIOS/UEFI程序是传统和现代两种体系的计算机基础固件程序,是计算机开机加电运行的第一段程序
MBR/GPT也是两种硬盘分区方案,在苹果IOS和其它专业、小众的操作系统中还有其它分区方案
固件/分区表的搭配除了bios+mbr和uefi+gpt以外,还有bios+gpt+grub+linux
补充和纠正一下:
电脑主板CMOS或者叫BIOS芯片是一种易失性的存储芯片,关机后需要钮扣电池供电保持数据,否则会丢失数据,实际上现在都是FLASH芯片了,钮扣电池更多的只是用来维持RTC时钟,扣电池清除BIOS配置可能只是程序做出的状态识别反馈
BIOS/UEFI程序是传统和现代两种体系的计算机基础固件程序,是计算机开机加电运行的第一段程序
MBR/GPT也是两种硬盘分区方案,在苹果IOS和其它专业、小众的操作系统中还有其它分区方案
固件/分区表的搭配除了bios+mbr和uefi+gpt以外,还有bios+gpt+grub+linux
专业的勒
温故而知新
不知道为啥,对grub不是很感冒。更喜欢systemd直接做boot,可能是因为配置更方便吧 。
Popular Events
More
与操作系统启动相关的几个概念
不管是 Windows 还是 Linux 操作系统,操作系统启动之前都需要对搭载系统的硬件进行检测,然后硬盘引导启动操作系统,以下是与操作系统启动相关的几个概念。
关于启动方式
BIOS
BIOS(Basic Input Output System),直译成中文名称就是"基本输入输出系统"。它是一组固化到主板中一个ROM芯片上的程序,它可以从CMOS中读写系统设置的具体信息。此程序保存着计算机最重要的基本输入输出程序、开机后的自检程序和系统自启动程序。
简单来说,BIOS是一个控制电脑中所有输入输出的程序,它可以对主板上的键盘、鼠标、外部接口、频率、电源、磁盘驱动器等方面进行参数控制和调整。
CMOS
CMOS是一种集成电路(IC)技术,被广泛用于存储BIOS设置和其他计算机配置信息的非易失性存储器。CMOS存储器通常位于主板上的特定芯片中,可持久保存BIOS设置即使在断电情况下。
BIOS与CMOS的区别
UEFI
UEFI(Unified Extensible Firmware Interface)则是取代传统BIOS的,UEFI运行于32或64位模式,它突破了传统16位代码的寻址能力,达到处理器的最大寻址,克服了BIOS代码运行缓慢的弊端。相比传统BIOS来说,UEFI更易实现,容错和纠错特性也更强,UEFI支持2TB以上硬盘。
传统BIOS主要支持MBR引导,而UEFI一般是GPT引导,所以这里又要说下MBR和GPT
关于引导分区表
MBR
MBR是传统的分区表类型,当一台电脑启动时,它会先启动主板上的BIOS系统,BIOS再从硬盘上读取MBR主引导记录,硬盘上的MBR运行后,就会启动操作系统,但最大的缺点则是不支持容量大于2T的硬盘。
GPT
GPT是一种更先进的磁盘系统分区方式,它的出现弥补了MBR这个缺点,最大支持18EB的硬盘,是基于UEFI使用的磁盘分区架构。
目前所有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加载引导简化流程如图:
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 引导过程与服务控制