BIOS(Basic Input Output System): 基本输入输出系统。
UEFI(Unified Extensible Firmware Interface): 统一可扩展固件接口,用于替换BIOS的新式程序。
这两个主板内置程序作用上都差不多,无非就是初始化硬件,检测硬件信息,然后引导硬盘上的系统运行。
说几点对用户比较有用的对比点
(1) 流程:
BIOS:
UEFI:
(2) 搭配的分区类型:
BIOS:可以正常使用分区类型为MBR的磁盘
UEFI:可以正常使用分区类型为GPT的磁盘
(3) 速度与灵活性:
BIOS:传统的BIOS程序运行起来比较傻瓜,它基本上只能管理硬件部分的东西,不会和系统有什么交互。
UEFI:较传统的BIOS启动更快了,传统的BIOS不能存储硬件信息,每次上电后都要给这些硬件重新分配资源;而UEFI可以存储配置信息,硬件没有更换的前提下每次上电后只要按照配置信息分配资源即可。对于比较复杂的设备,UEFI也可以让硬件本身存储自己的配置信息,并且提供API与操作系统协同初始化此硬件,加快了系统的运行。
磁盘分区有两种类型,MBR和GPT。
MBR(Master Boot Record): 主引导记录
● 主引导程序(MBR): BIOS初始化完成后,会加载磁盘0号扇区的主引导程序到内存中运行。而此处的主引导程序
会查找活动分区,并将活动分区中的引导程序(一般占一个扇区大小,即512字节)
加载到内存中运行,然后再跳转到真正能引导操作系统的程序引导(如下图的bootloader或者GRUB2等)windows内核程序运行。
BootLoader:用于引导windows vista,7,8,10
GRUB2:用于引导linux的操作系统
● 分区表(DPT): MBR格式的磁盘只有四个分区表,每个分区表大小占16字节,并对应磁盘中的某一个主分区。因为只有四个主分区表,所以MBR类型分区的磁盘只能有四个主分区
,想要更多分区只能将其中的一个主分区变为扩展分区(一个磁盘最多只有一个扩展分区),然后扩展分区可以分出来若干个逻辑分区。
字节位 | 内容及含义 |
---|---|
0x000 | 若为80H,代表此分区为活动分区;若为00H,则代表非活动分区。一个磁盘只能有一个活动分区,活动分区一般存放操作系统 |
0x001~0x003 | 此分区第一个扇区的地址(磁头号,柱面号,扇区号) |
0x004 | 此分区类型 00H:此分区未使用 05H:扩展分区 06H:FAT16类型 07H:NTFS类型 0BH:FAT32类型 |
0x005~0x007 | 此分区的最后一个扇区的地址(磁头号,柱面号,扇区号) |
0x008~0x011 | 四个字节表示此分区之前的总扇区数,所以每个分区之前的总容量最大为:2^32 * 512 = 2TB |
0x012~0x015 | 四个字节表示此分区的总扇区数,所以每个分区最大容量:2^32 * 512 = 2TB |
结合8 ~ 11位
和12 ~ 15位
可知,理论上MBR分区只支持最大容量4TB的磁盘。而实际情况下,windows系统在分区管理中只能分出来最大2TB的容量,要想分出来4TB,就需要使用第三方工具来分区(但是不建议这么干,否则后果自负)
● 结尾标志: 占两个字节,分别为0x55和0xAA,如果不是这两个值,BIOS会认为此磁盘不能被正确引导,BIOS会继续检查磁盘列表中的下一个磁盘。如果所有的磁盘都是无效的,就会报引导类错误。
上边整个第一扇区对应下图红框内容:
注:上图查看磁盘字节数据的工具名为 winhex
GPT(GUID Partition Table): 全局唯一标识磁盘分区表
● [LBA0] 保护性MBR(Protective MBR): 占一个扇区大小,格式与正常的MBR分区一致,但是除了结尾标志还是0x55和0xAA外,其余大部分都为0。在只有GPT分区的磁盘上,这部分只是为了以前的MBR磁盘工具可以正确识别磁盘,防止误操作造成磁盘损坏。
● [LBA1] GPT头(Primary GPT Header): 占一个扇区大小,其中具体含义见下表
字节位 | 字节数 | 内容及含义 |
---|---|---|
0x200~0x207 | 8 | GPT头的签名,通过ascii码转换译为EFI PART |
0x208~0x20B | 4 | 版本号 |
0x20C~0x20F | 4 | GPT头中有意义数据所占大小,一般就是92字节,剩下的420字节全部填充0 |
0x210~0x213 | 4 | GPT头的CRC校验和 |
0x214~0x217 | 4 | 必须是“00 00 00 00” |
0x218~0x21F | 8 | GPT头的起始扇区号 |
0x220~0x227 | 8 | GPT头备份扇区号,如上图所示,一般就是最后一个扇区 |
0x228~0x22F | 8 | 可进行分区的起始扇区号(LBA34) |
0x230~0x237 | 8 | 可进行分区的结束扇区号(倒数第34个扇区) |
0x238~0x247 | 16 | 磁盘的GUID(类UNIX系统中也叫UUID) |
0x248~0x24F | 8 | 分区表的起始扇区号(LBA2) |
0x250~0x253 | 4 | 分区表的总数,因windows系统限定其最大为128,所以理论上windows最大可分出来128个分区 |
0x254~0x257 | 4 | 每个分区表所占用的字节数,通常为128bytes |
0x258~0x25B | 4 | 所有分区表的CRC校验和 |
0x25C~0x3FF | 420 | 保留位,全部为0 |
● [LBA2~LBA33] 分区表: 每个分区表项固定占用128 bytes,又因为windows可支持最大分区数为128个,所以装有windows系统的磁盘上,整个分区表项占用字节数为 = 128 bytes * 128 = 16384 bytes = 32个LBA大小。每个分区表项格式如下表(以第一个分区表项举例)
字节位 | 字节数 | 内容及含义 |
---|---|---|
0x400~0x40F | 16 | 该分区类型,GUID表示 |
0x410~0x41F | 16 | 该分区唯一标识符,GUID表示 |
0x420~0x427 | 8 | 该分区起始扇区,单位:LBA |
0x428~0x42F | 8 | 该分区结束扇区,单位:LBA |
0x430~0x437 | 8 | 该分区属性标志 |
0x438~0x47F | 72 | 该分区的分区名称,最大为32字符,通常这些字符的编码方式为UTF-16 |
分区属性见下表(8个字节=8*8bit=64bit):
比特位 | 内容及含义 |
---|---|
0 | 系统分区(磁盘分区工具必须将此分区保持原样,不得做任何修改) |
1 | EFI隐藏分区(EFI不可见分区) |
2 | 传统BIOS的可引导分区标志 |
60 | 只读 |
62 | 隐藏 |
63 | 不自动挂载,也就是不自动分配盘符 |
分区类型见下表:
操作系统 | GUID(小端字节序) | 内容及含义 |
---|---|---|
None | 00000000-0000-0000-0000-000000000000 | 未使用 |
None | 024DEE41-33E7-11D3-9D69-0008C781F39F | MBR分区表 |
None | C12A7328-F81F-11D2-BA4B-00A0C93EC93B | EFI系统分区 |
None | 21686148-6449-6E6F-744E-656564454649 | BIOS引导分区 |
None | D3BFE2DE-3DAF-11DF-BA40-E3A556D89593 | Intel Fast Flash (iFFS) partition (for Intel Rapid Start technology) |
Windows | E3C9E316-0B5C-4DB8-817D-F92DF00215AE | 微软保留分区 |
Windows | EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 | 基本数据分区 |
Windows | DE94BBA4-06D1-4D40-A16A-BFD50179D6AC | Windows恢复环境 |
Linux | 0FC63DAF-8483-4772-8E79-3D69D8477DE4 | 数据分区。Linux曾经使用和Windows基本数据分区相同的GUID。这个新的GUID是由GPT fdisk和GUID Parted开发者根据Linux传统的"8300"分区代码发明的。 |
Linux | A19D880F-05FC-4D3B-A006-743F0F84911E | RAID分区 |
Linux | 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F | 交换分区 |
Linux | E6D6D379-F507-44C2-A23C-238F2A3DF928 | 逻辑卷管理器(LVM)分区 |
Linux | 8DA63339-0007-60C0-C436-083AC8230908 | 保留 |
下面是三种类型的分区表,分别对应上面分区类型表中红,蓝,黑字体的分区类型
UEFI+GPT的方案因为它不限制磁盘容量,运行速度等方面优点,让传统的BIOS+MBR方案渐渐淡出了市场。所以建议大家如果安装支持UEFI+GPT系统的时候,可以优先考虑UEFI+GPT的方案。