安装系统前你需要了解的 MBR, GPT,Legacy,EFI基础

本教程参考的相关内容如下:
鸟哥私房菜
维基百科EFI
维基百科GPT
CSDN博客几篇:
https://blog.csdn.net/qq_24965035/article/details/51659697
https://blog.csdn.net/yeshahayes/article/details/52806095
https://blog.csdn.net/u013201439/article/details/50273113

MBR分区格式

主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区,一般就是磁盘的第一个扇区。

开机管理程序纪录区与分区表则通通放在磁盘的第一个扇区,这个扇区通常是512Bytes的大小(旧的磁盘扇区都是 512Bytes喔!,所以说第一个扇区512Bytes会有这两个数据

  • 主要开机记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有446 Bytes
  • 分区表(partition table):记录整颗硬盘分区的状态,有64 Bytes

由于分区表所在区块仅有64Bytes容量,因此最多仅能有四组记录区,每组记录区录了该区段的启始与结束的柱面号码。 若将硬盘以长条形来看,然后将柱面以直条图来看,那么那64Bytes的记录区段有点像下面的图示:
安装系统前你需要了解的 MBR, GPT,Legacy,EFI基础_第1张图片
上图中我们假设硬盘只有400个柱面,共分区成为四个分区,第四个分区所在为第301到400号柱面的范围。当你的操作系统为Windows时,那么第一到第四个分区的代号应该就是C, D, E, F,当你有数据要写入F盘时, 你的数据会被写入这颗磁盘的301~400号柱面之间的意思。

由于分区表就只有64Bytes而已,最多只能容纳四笔分区的记录, 这四个分区的记录被称为主要(Primary)或延伸(Extended)分区。根据上面的图示与说明,我们可以得到几个重点信息:

  • 其实所谓的“分区”只是针对那个64Bytes的分区表进行设置而已!
  • 硬盘默认的分区表仅能写入四组分区信息
  • 这四组分区信息我们称为主要(Primary)或延伸(Extended)分区
  • 分区的最小单位“通常”为柱面(cylinder)
  • 当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分区进行数据的处理

既然分区表只有记录四组数据的空间,那么是否代表我一颗硬盘最多只能分区出四个分区?当然不是啦!有经验的朋友都知道, 你可以将一颗硬盘分区成十个以上的分区的!那又是如何达到的呢?在Windows/Linux系统中, 我们是通过刚刚谈到的延伸分区(Extended)的方式来处理的啦!延伸分区的想法是: 既然第一个扇区所在的分区表只能记录四笔数据, 那我可否利用额外的扇区来记录更多的分区信息?实际上图示有点像下面这样
安装系统前你需要了解的 MBR, GPT,Legacy,EFI基础_第2张图片
实际上延伸分区并不是只占一个区块,而是会分布在每个分区的最前面几个扇区来记载分区信息的!同时在上图当中,我们知道硬盘的四个分区记录区仅使用到两个,P1为主要分区,而P2则为延伸分区。请注意, 延伸分区的目的是使用额外的扇区来记录分区信息,延伸分区本身并不能被拿来格式化。 然后我们可以通过延伸分区所指向的那个区块继续作分区的记录。如上图右下方那个区块有继续分区出五个分区, 这五个由延伸分区继续切出来的分区,就被称为逻辑分区(logical partition)。 同时注意一下,由于逻辑分区是由延伸分区继续分区出来的,所以他可以使用的柱面范围就是延伸分区所设置的范围喔! 也就是图中的101~400啦!

  • P1:/dev/sda1
  • P2:/dev/sda2
  • L1:/dev/sda5
  • L2:/dev/sda6
  • L3:/dev/sda7
  • L4:/dev/sda8
  • L5:/dev/sda9

仔细看看,怎么设备文件名没有/dev/sda3与/dev/sda4呢?因为前面四个号码都是保留给Primary或Extended用的嘛! 所以逻辑分区的设备名称号码就由5号开始了!这在 MBR方式的分区表中是个很重要的特性,不能忘记喔!
MBR总结如下:

  • 主要分区与延伸分区最多可以有四笔(硬盘的限制)
  • 延伸分区最多只能有一个(操作系统的限制)
  • 逻辑分区是由延伸分区持续切割出来的分区;
  • 能够被格式化后,作为数据存取的分区为主要分区与逻辑分区。延伸分区无法格式化;
  • 逻辑分区的数量依操作系统而不同,在Linux系统中SATA硬盘已经可以突破63个以上的分区限制;
  • 延伸分区是主分区的一种,里面以链表形式记录了逻辑驱动器的引导记录。

举个例子如下:在Windows操作系统当中,如果你想要将D与E盘整合成为一个新的分区,而如果有两种分区的情况如下图所示, 图中的特殊颜色区块为D与E盘的示意,请问这两种方式是否均可将D与E整合成为一个新的分区?
安装系统前你需要了解的 MBR, GPT,Legacy,EFI基础_第3张图片
上图可以整合:因为上图的D与E同属于延伸分区内的逻辑分区,因此只要将两个分区删除,然后再重新创建一个新的分区,就能够在不影响其他分区的情况下,将两个分区的容量整合成为一个。

下图不可整合:因为D与E分属主分区与逻辑分区,两者不能够整合在一起。除非将延伸分区破坏掉后再重新分区。 但如此一来会影响到所有的逻辑分区,要注意的是:如果延伸分区被破坏,所有逻辑分区将会被删除。 因为逻辑分区的信息都记录在延伸分区里面嘛!

GPT分区格式

全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体硬盘的分区表的结构布局的标准它是可扩展固件接口(UEFI)标准(被Intel用于替代个人计算机的BIOS)的一部分。
因为过去一个扇区大小就是 512Bytes 而已,不过目前已经有 4K 的扇区设计出现!为了相容于所有的磁盘,因此在扇区的定义上面, 大多会使用所谓的逻辑区块位址(Logical Block Address, LBA)来处理。GPT 将磁盘所有区块以此 LBA(默认为512Bytes 喔!) 来规划,而第一个 LBA 称为 LBA0 (从 0 开始编号)。与 MBR 仅使用第一个 512Bytes 区块来纪录不同, GPT 使用了 34 个 LBA 区块来纪录分区信息!同时与过去 MBR 仅有一的区块,被干掉就死光光的情况不同, GPT 除了前面 34 个 LBA 之外,整个磁盘的最后 33 个 LBA 也拿来作为另一个备份!这样或许会比较安全些吧!详细的结构有点像下面的模样:
安装系统前你需要了解的 MBR, GPT,Legacy,EFI基础_第4张图片

  • 传统MBR (LBA 0)
    在GPT分区表的最开头,出于兼容性考虑仍然存储了一份传统的MBR,用来防止不支持GPT的硬盘管理工具错误识别并破坏硬盘中的数据,这个MBR也叫做保护MBR
  • 分区表头(LBA 1)
    分区表头定义了硬盘的可用空间以及组成分区表的项的大小和数量,同时纪录了备份用的 GPT 分区 (就是前面谈到的在最后 34 个 LBA 区块) 放置的位置, 同时放置了分区表的检验机制码 (CRC32),操作系统可以根据这个检验码来判断 GPT 是否正确。若有错误,还可以通过这个纪录区来取得备份的 GPT(磁盘最后的那个备份区块) 来恢复 GPT 的正常运行!
  • 分区表项(LBA 2–33)
    从 LBA2 区块开始,每个 LBA 都可以纪录 4 笔分区纪录,所以在默认的情况下,总共可以有 432 = 128 笔分区纪录喔!因为每个 LBA 有 512Bytes,因此每笔纪录用到 128 Bytes 的空间,GPT分区表使用简单而直接的方式表示分区。一个分区表项的前16字节是分区类型GUID。例如,EFI系统分区的GUID类型是{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}。接下来的16字节是该分区唯一的GUID(这个GUID指的是该分区本身,而之前的GUID指的是该分区的类型),剩下的64bits 来记载开始/结束的扇区号码,因此,GPT 分区表对於单一分区来说, 他的最大容量限制就会在“ 264 * 512Bytes = 263 * 1KBytes = 233TB = 8 ZB ”,要注意 1ZB = 230TB 啦! 你说有没有够大了?

GPT总结:

  • GPT分区是硬盘分区表的结构布局,可以支持2T(MBR最大容量)以上的容量
  • 可以不受限于主分区的个数(MBR为4)
  • 由于表头和表尾都存有分区信息,更为安全

在了解了两种主要的分区表之后,现在来解释boot,MBR+Legacy, GPT+EFI的计算机启动过程

Boot

启动用英文来讲是boot,但是boot的意思是靴子,靴子又怎么和计算机的启动联系起来呐,这里的boot是bootstrap(鞋带)的缩写,它来自一句谚语:“pull oneself up by one’s bootstraps”。其字面意思就是拽着鞋带把自己拉起来,这当然是不可能的事情。最早的时候,工程师们用它来比喻,计算机启动是一个很矛盾的过程:必须先运行程序,然后计算机才能启动,但是计算机不启动就无法运行程序!
早期是这样,必须想尽各种办法,把一小段程序装进内存,然后计算机才能正常运行。所以,工程师们把这个过程叫做”拉鞋带”,久而久之就简称为boot了。

MBR+legacy

也就是传统的BIOS启动方式,相对应的刚是新型UEFI BIOS+GPT的启动方式。计算机里面有CMOS和BIOS两个东西,CMOS是记录各项硬件参数且嵌入在主板上面的储存器,BIOS则是一个写入到主板上的一个固件(再次说明, 固件就是写入到硬件上的一个软件程序)。这个BIOS就是在开机的时候,计算机系统会主动执行的第一个程序了!

  1. BIOS加电(台湾用语:引导)自检(Power On Self Test – POST)。BIOS执行内存地址为FFFF:0000H处的跳转指令,跳转到固化在ROM中的自检程序处,对系统硬件(包括内存)进行检查。
  2. 读取主引导记录(MBR),当BIOS检查到硬件正常并与CMOS中的设置相符后,按照CMOS中对启动设备的设置顺序检测可用的启动设备。BIOS将相应启动设备的第一个扇区(也就是MBR扇区)读入内存地址为0000:7C00H处。
  3. 检查0000:7DFEH-0000:7DFFH(MBR的结束标志位)是否等于55AAH,若不等于则转去尝试其他启动设备,如果没有启动设备满足要求则显示"NO ROM BASIC"然后死机。
  4. 当检测到有启动设备满足要求后,BIOS将控制权交给相应启动设备。启动设备的MBR将自己复制到0000:0600H处,然后继续执行。MBR这个仅有446 Bytes的硬盘容量里面会放置最基本的开机管理程序, 此时BIOS就功成圆满,而接下来就是MBR内的开机管理程序的工作了

也就是:

  1. BIOS:开机主动执行的固件,会认识第一个可开机的启动设备;
  2. MBR:第一个可开机启动设备的第一个扇区内的主要开机记录区块,内含开机管理程序;
  3. 开机管理程序(boot loader):一支可读取核心文件来执行的软件;
  4. 核心文件:开始操作系统的功能…

第二点要注意,如果你的分区表为GPT 格式的话,那么BIOS也能够从LBA0 的MBR相容区块读取第一阶段的开机管理程序码, 如果你的开机管理程序能够认识GPT 的话,那么使用BIOS同样可以读取到正确的操作系统核心喔!换句话说, 如果开机管理程序不懂GPT ,例如Windows XP 的环境,那自然就无法读取核心文件,开机就失败了,一般来说GPT分区中的系统核心是放在ESP分区当中的,要找到ESP分区,前提就是开机管理程序懂GPT分区。
由上面的说明我们会知道,BIOS与MBR都是硬件本身会支持的功能,至于Boot loader则是操作系统安装在MBR上面的一套软件了。由于MBR仅有446Bytes而已,因此这个开机管理程序是非常小而美的。 这个boot loader的主要任务有下面这些项目:

  • 提供菜单:使用者可以选择不同的开机项目,这也是多重开机的重要功能!
  • 载入核心文件:直接指向可开机的程序区段来开始操作系统;
  • 转交其他loader:将开机管理功能转交给其他loader负责。

上面前两点还容易理解,但是第三点很有趣喔!那表示你的计算机系统里面可能具有两个以上的开机管理程序呢!那表示你的计算机系统里面可能具有两个以上的开机管理程序呢!有可能吗?我们的硬盘不是只有一个MBR而已?是没错啦!但是开机管理程序除了可以安装在MBR之外, 还可以安装在每个分区的开机扇区(boot sector)喔!瞎密?分区还有各别的开机扇区喔?没错啊!这个特色才能造就“多重开机”的功能啊!
比如你如果将ubuntu和windows同时装在一个MBR分区当中,通过BIOS界面下调整它们的启动顺序则是调整MBR里面的开机管理程序的顺序。如果只有一个开机管理程序在MBR当中,则该开机管理程序会转交给其他的Loader来实现多重开机。
再比如你的个人计算机只有一个硬盘,里面切成四个分区,其中第一、二分区分别安装了Windows及Linux,你要如何在开机的时候选择用Windows还是Linux开机呢?假设MBR内安装的是可同时认识Windows/Linux操作系统的开机管理程序,
安装系统前你需要了解的 MBR, GPT,Legacy,EFI基础_第5张图片
MBR的开机管理程序提供两个菜单,菜单一(M1)可以直接载入Windows的核心文件来开机;菜单二(M2)则是将开机管理工作交给第二个分区的开机扇区(boot sector)。当使用者在开机的时候选择菜单二时,那么整个开机管理工作就会交给第二分区的开机管理程序了。当第二个开机管理程序启动后,该开机管理程序内(上图中)仅有一个开机菜单,因此就能够使用Linux的核心文件来开机啰。这就是多重开机的工作情况啦!
总结如下:

  • 每个分区都拥有自己的开机扇区(boot sector)。
  • 图中的系统盘为第一及第二分区,
  • 实际可开机的核心文件是放置到各分区内的!
  • loader只会认识自己的系统盘内的可开机核心文件,以及其他loader而已;
  • loader可直接指向或者是间接将管理权转交给另一个管理程序。

那现在请你想一想,为什么人家常常说:“如果要安装多重开机,最好先安装Windows再安装Linux”呢?这是因为:
Linux在安装的时候,你可以选择将开机管理程序安装在MBR或各别分区的开机扇区, 而且Linux的loader可以手动设置菜单(就是上图的M1, M2…),所以你可以在Linux的boot loader里面加入Windows开机的选项;Windows在安装的时候,他的安装程序会主动的覆盖掉MBR以及自己所在分区的开机扇区,你没有选择的机会, 而且他没有让我们自己选择菜单的功能。因此,如果先安装Linux再安装Windows的话,那MBR的开机管理程序就只会有Windows的项目,而不会有Linux的项目(因为原本在MBR内的Linux的开机管理程序就会被覆盖掉)。 那需要重新安装Linux一次吗?当然不需要,你只要用尽各种方法来处理MBR的内容即可。 例如利用Linux的救援模式来挽救MBR啊!
以windows启动过程为例,我们来看看windows的具体启动:
系统启动时顺序BIOS->MBR->DPT->PBR->寻找根目录下bootmgr(WIN7/Vista)/grldr(Grub)/btldr.mbr(Boot Link)->\boot\bcd->winload.exe->内核
其中引导配置数据库(BCD)写入的是winload的加载位置,目前内置用于管理配置数据库的公用程序为"bcdedit.exe;若要快速设置系统分区或是修复错误的引导选项则使用"bcdboot.exe"公用程序;其他用于管理BCD的工具还有EasyBCD、Bootice或是WMI等工具修改BCD。

GPT+UEFI

统一可扩展固件接口(英语:Unified Extensible Firmware Interface,缩写UEFI)是一种个人计算机系统规格,用来定义操作系统与系统固件之间的软件界面,作为BIOS的替代方案。也就是说,现在加电后首先进入的不再是BIOS,而是UEFI接口。UEFI在概念上非常类似于一个低阶的操作系统,并且具有操控所有硬件资源的能力。而平时我们装机所说的进入BIOS,一来是因为现在大多数的固件是BIOS,和UEFI同时具备,所以这个固件不好命名,二来是没有将它们具体分开,只是称呼加电后进入的那个界面为BIOS。
UEFI主要是想要取代BIOS这个固件界面,因此我们也称 UEFI 为 UEFI BIOS 就是了。UEFI 使用 C 程序语言,比起使用组合语言的传统 BIOS 要更容易开发!也因为使用 C 语言来撰写,因此如果开发者够厉害,甚至可以在 UEFI 开机阶段就让该系统了解 TCP/IP 而直接上网! 根本不需要进入操作系统耶!这让小型系统的开发充满各式各样的可能性!
UEFI相比于BIOS的好处在于:

  1. 仅从系统启动原理方面来做比较。UEFI之所以比BIOS强大,是因为UEFI本身已经相当于一个微型操作系统,其带来的便利之处在于:首先,UEFI已具备文件系统(操作系统组织管理文件的一种方法,直白点说就是把硬盘上的数据以文件的形式呈现给用户。Fat32、NTFS都是常见的文件系统类型)的支持,它能够直接读取FAT分区中的文件;
  2. 其次,可开发出直接在UEFI下运行的应用程序,这类程序文件通常以efi结尾。既然UEFI可以直接识别FAT分区中的文件,又有可直接在其中运行的应用程序。那么完全可以将Windows安装程序做成efi类型应用程序,然 后把它放到任意fat分区中直接运行即可,如此一来安装Windows操作系统这件过去看上去稍微有点复杂的事情突然就变非常简单了,就像在Windows下打开QQ一样简单。而事实上,也就是这么一回事。
  3. 开机速度上UEFI要比BIOS快上许多。
    具体差异可以用下表说明:
    安装系统前你需要了解的 MBR, GPT,Legacy,EFI基础_第6张图片
    由于过去cracker经常借由 BIOS 开机阶段来破坏系统,并取得系统的控制权,因此 UEFI 加入了一个所谓的安全启动(secure boot) 机制,Secure Boot只允许加载有适当数字签名的EFI驱动程序和EFI启动程序,操作系统核心也只加载有特定有效数字签名的驱动程序(尤其是Windows 10,当打开UEFI Secure Boot后,对驱动程序数字签名的检查更严格),因此 Secure Boot 可让引导过程更安全,但是可能会影响linux的安装,不过现在,Ubuntu、Fedora、openSUSE、RHEL(从RHEL 7开始)、CentOS(从CentOS 7开始)等Linux发行版已经支持Secure Boot。同时Secure Boot要求原生UEFI环境,即不能打开CSM,也就是打开Secure Boot的系统不支持Legacy引导及Legacy Option ROM。

UEFI的启动顺序如下:

  1. UEFI:开机主动执行的固件,会认识第一个可开机的启动设备;
  2. ESP:UEFI会调入执行EFI应用程序,这些EFI程序可以是OEM提供的硬件诊断软件,OEM提供的备份软件,操作系统的启动程序等等,也可以加载EFI驱动程序文件(如文件系统驱动程序),然后找到ESP分区当中的开机管理程序;
  3. 开机管理程序(boot loader):一支可读取核心文件来执行的软件;
  4. 核心文件:开始操作系统的功能…

系统创建UEFI启动时,会创建ESP(EFI SYSTEM PARTITION),格式为FAT分区,该分区位置随意设置,可以在硬盘起始,中间,末尾,只要在硬盘的前2T空间内就可以,用于存放启动文件。
以windows为例,启动顺序如下

EFI/Boot/bootx64.efi(或bootia32.efi) > EFI/Microsoft/Boot/bootmgfw.efi >EFI/Microsoft/Boot/BCD >EFI/Microsoft/Boot/winload.efi

下面具体讲解每个步骤:
EFI\BOOT\bootx64.efi(bootia32.efi)是用于UEFI固件加载的启动文件,相当于BIOS里面的开机管理程序,然后它会根据开机菜单,加载BCD,这是一个存储启动配置且独立于硬件的数据库,它会确定加载哪个分区的winload.efi,这样就完成了启动。
要注意双系统的安装,其启动方式必须一致。虽然不一致可以通过某些软件来修复引导文件,但是如果引导文件出错容易引发一些模糊的问题
对于UEFI启动的windows加ubuntu双系统,在第一个启动盘ESP分区里会有两个系统的开机管理程序,它们的加载顺序可以在BIOS里面调整。
对于legacy启动的双系统,在MBR里面会有开机管理程序(boot loader),然后它可以提供菜单,以便加载其它loader。

你可能感兴趣的:(安装系统前你需要了解的 MBR, GPT,Legacy,EFI基础)