你是否在每次安装操作系统的时候,都搞不清BIOS,MBR,UEFI和GPT这些名词之间的关系?今天这篇文章绝对可以给你带来一个更清晰的理解。
首先我们来看看电脑是怎么启动的。我们知道,当电脑被接上电源以后,它需要读取储存在硬盘上的操作系统启动代码来启动操作系统。但是电脑要怎么找到这些代码储存在什么地方呢?传统上人们把这个任务交给BIOS
。BIOS
是储存在主板上的固件(Firmware
),实际上就是一个在电脑通电的时候会被自动运行的程序。由于早期技术的限制,BIOS
只能运行一些非常简单的指令,所以如果要用它来从硬盘文件系统中直接定位并读取相关的操作系统启动代码不太现实。为了解决这个问题,人们把用来启动操作系统的指令放在硬盘上的一个固定的,容易找到的位置,那么BIOS就不需要在硬盘里面搜索,而是只需要直接从那个特定地方读取指令并运行就可以了。这就是MBR
(Master Boot Record
)格式的来源。下图是MBR格式硬盘的内部布局(来源):
我们可以看到,使用MBR格式的硬盘把硬盘分区的信息还有一个启动小程序(Master Boot Code
)放在硬盘的第一个扇区(sector
)(图中蓝色部分),当BIOS启动的时候就从这一个扇区读取并运行启动小程序。由于扇区大小的限制,往往MBR中的启动小程序还没有能力直接启动操作系统,它还需要再加载一段耳机启动程序来达到最终启动操作系统的目的。根据操作系统的不同,这个过程也略有不一样,例如对于Windows系统,MBR中的启动小程序会找到当前的活跃分区(active partition
),然后读取位于活跃分区第一个扇区的二级启动程序来达成Windows的启动。而对于Linux系统,MBR中的小程序会启动储存于MBR
和第一分区中间的二级启动程序,而这个启动程序会找到GRUB2
程序位置,启动GRUB2
,从而最终达到启动Linux的目的。
MBR
硬盘的优点是原理简单,而且能够兼容只支持BIOS
的老主板。但随着时间的发展,MBR
也暴露出越来越多的问题。受制于扇区的大小,MBR最多只能支持4个主分区,而且最大只能支持2TB的容量。为此,人们开发了一种新的硬盘格式:GPT
( GUID Partition Table
)。与MBR
不同的是,在GPT
中,分区信息不再被储存在第一个扇区当中。没有了这个限制,GPT
能够有更多的空间储存分区的信息,使得分区数量最多能达128个。而且所支持硬盘的最大容量也提升到了9.4ZB。下图是GPT
硬盘的内在布局:
可以看到的是,现在分区表所占空间是33个扇区(图中绿色部分),而且在硬盘最后还有一个分区表的备份,对防止硬盘数据损坏多了一重保障。值得注意的是图中灰色部分有一个叫Protective MBR
的区域。GPT
专门腾出这个区域来防止一些程序把该硬盘当作MBR
硬盘写入信息从而破坏分区表。
同时人们也开始觉得,像MBR
一样把启动程序挤在第一个扇区实在太有局限性了。所以在系统启动上GPT
也采用了新的方式:GPT
中有一个系统分区(system partition
),该硬盘上所有操作系统的启动程序都像平常的可执行程序一样放在这个系统分区中。启动的时候固件只需要找到这个系统分区,列出里面的程序让用户选择哪个操作系统来运行就可以了。
这个新的硬盘格式对主板的固件提出了更高的要求,例如这个固件需要能够在GPT
中找到并读取分区表,这个固件还需要明白文件系统(File System
)来读取启动程序。很明显,传统BIOS
并不能胜任这项工作。我们需要一个新的固件标准,UEFI
正好能够满足这样的要求。相比起BIOS,UEFI
能够执行更加复杂的指令,同时还能提供对用户更加友好的界面,将会在将来逐渐取代BIOS
。为了维持兼容性,UEFI
往往会带有Legacy
模式来兼容MBR
格式的硬盘。
在了解了MBR
和GPT
的不同以后,我们能够更好的理解有时候安装多系统时遇到的问题。例如当你在MBR
硬盘中先安装了Windows,然后安装Linux作为双系统的时候,Linux安装程序实际上会替换掉原来在MBR
中的启动小程序,使它指向新的GRUB2
启动程序。但是由于原来的启动小程序被替换了,当你卸载Linux以后,GRUB2
也随之被卸载了,你的Windows也不能够启动了。这个时候你必须要使用你的Windows启动盘来先修复MBR
里的小程序,从而能够再启动Windows。同样情形如果发生在一个GPT
硬盘上,卸载Linux只是意味着删除系统分区中其中一个启动程序而已。