MBR与GPT
MBR与GPT
reference:
https://zhuanlan.zhihu.com/p/26098509
机械硬盘原理
机械硬盘由坚硬金属材料制成的涂以磁性介质的盘片,盘片两面称为盘面或扇面,都可以记录信息,由磁头对盘面进行操作(如果你有坏的硬盘,可以动手拆开看。嗯?为什么用坏的?用好的可能费钱……)一般用磁头号区分。结构特性决定了机械硬盘如果受到剧烈冲击(摔在地上或是勤奋的你想拆开学习),磁头与盘面可能产生的哪怕是轻微撞击都有可能报废。
继续讲原理:假设磁头不动,硬盘旋转,那么磁头就会在磁盘表面画出一个圆形轨迹并将之磁化,数据就保存在这些磁化区中,称之为磁道,将每个磁道分段,一个弧段就是一个扇区。一个硬盘可以包含多个扇面,扇面同轴重叠放置,每个盘面磁道数相同,具有相同周长的磁道所形成的圆柱称之为柱面,柱面数与磁道数相等。如下图
了解了这些,我们就可以对最初的硬盘地址管理方式作一个原理层面的了解:
最初的寻址方式称为CHS,在LBA(Logical Block Address)概念诞生之前,由他负责管理磁盘地址。所谓CHS即柱面(cylinder),磁头(header),扇区(sector),通过这三个变量描述磁盘地址,需要明白的是,这里表示的已不是物理地址而是逻辑地址了。这种方法也称作是LARGE寻址方式。该方法下:
硬盘容量=磁头数×柱面数×扇区数×扇区大小(一般为512byte)。
后来,人们通过为每个扇区分配逻辑地址,以扇区为单位进行寻址,也就有了LBA寻址方式。但是为了保持与CHS模式的兼容,通过逻辑变换算法,可以转换为磁头/柱面/扇区三种参数来表示,和 LARGE寻址模式一样,这里的地址也是逻辑地址了。(固态硬盘的存储原理虽然与机械硬盘不同,采用的是flash存储,但仍然使用LBA进行管理,此处不再详述。)
科普到这里,我们可以试图去理解MBR分区了。现在我们来看看MBR分区的技术原理。
MBR原理
MBR:Master Boot Record,主分区引导记录。最早在1983年在IBM PC DOS 2.0中提出。前面说过,每个扇区/区块都被分配了一个逻辑块地址,即LBA,而引导扇区则是每个分区的第一扇区,而主引导扇区则是整个硬盘的第一扇区(主分区的第一个扇区)。MBR就保存在主引导扇区中。另外,这个扇区里还包含了硬盘分区表DPT(Disk Partition Table),和结束标志字(Magic number)。扇区总计512字节,MBR占446字节(0000H - 01BDH),DPT占据64个字节(01BEH - 01FDH),最后的magic number占2字节(01FEH – 01FFH)。
现在,我们来看一个MBR记录的实例:
80 01 01 00, 0B FE BF FC, 3F 00 00 00, 7E 86 BB 00
其中, “80”是一个分区的激活标志,表示系统可引导;“01 01 00”表示分区开始的磁头号为01,开始的扇区号为01,开始的柱面号为00;“0B”表示该分区的系统类型是FAT32,其他比较常用的有04(FAT16)、07(NTFS);“FE BF FC”表示分区结束的磁头号为254,分区结束的扇区号为63、分区结束的柱面号为764;“3F 00 00 00”表示首扇区的相对扇区号为63;“7E 86 BB 00”表示总扇区数为12289622。
可以看到,在只分配64字节给DPT的情况下,每个分区项分别占用16个字节,因此只能记录四个分区信息,尽管后来为了支持更多的分区,引入了扩展分区及逻辑分区的概念。但每个分区项仍然用16个字节存储。能表示的最大扇区数为FF FF,FF FFH,因此可管理的最大空间=总扇区数*扇区大小(512byte),也就是2TB(由于硬盘制造商采用1:1000进行单位换算,因此也有2.2TB一说,别怪他们,他们不是程序员)。超过2TB以后的空间,不能分配地址,自然也就无法管理了。
MBR的诸多缺点使其应用大大受限。硬盘技术日新月异,硬盘容量突飞猛进(希捷将于今年开卖60TB 固态硬盘),多出来的硬盘空间总不能晾着吧,于是,在刚诞生的UEFI规范下一起研发了新技术。
GPT
GPT分区:全称为Globally Unique Identifier Partition Table,也叫做GUID分区表,它是UEFI 规范的一部分。由于硬盘容量的急速增长,MBR的2.2T容量难以满足要求,而UEFI BIOS的推广也为GPT的实现打下了坚实的技术基础,GPT应运而生,
我们来看看GPT的结构图:
等等,MBR是不是走错片场了?答案当然是没有。这里的P意为protective,PMBR存在的意义就是,当不支持GPT的分区工具试图对硬盘进行操作时(例如MS-DOS和Linux的fdisk程序),它可以根据这份PMBR以传统方式启动,过程和MBR+BIOS完全一致,极大地提高了兼容性。而支持GPT的系统在检测PMBR后会直接跳到GPT表头读取分区表。和MBR类似,分区表中存储了某个分区的起始和结束位置及其文件系统属性信息,而分区才是实际存在的物理磁盘的一部分。
GPT HDR:GPT表头,如下图,主要定义了分区表中项目数及每项大小,还包含硬盘的容量信息。在64位的Windows Server 2003的机器上,最多可以创建128个分区,即分区表中保留了128个项,其中每个都是128字节。(也是EFI标准中的最低要求:分区表最小要有16,384字节)分区表头还记录了这块硬盘的GUID,分区表头位置(总是LBA1)和大小,也包含了备份分区表头和分区表的位置和大小信息(LBA-1~LBA-34)。同时还储存着它本身和分区表的CRC32校验。固件、引导程序和操作系统在启动时可以根据这个校验值来判断分区表是否出错,如果出错,可以使用软件从硬盘最后的备份GPT中恢复整个分区表,如果备份GPT也校验错误,硬盘将不可使用。具体内容如下表:
Partition Table:分区表,包含分区的类型GUID(如:EFI系统分区的GUID类型是{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}),名称,起始终止位置,该分区的GUID以及分区属性。其内容如下:
Microsoft对分区属性做了更详细的区分,目前有:
相较于MBR,GPT具有以下优点:
(1)得益于LBA提升至64位,以及分区表中每项128位设定,GPT可管理的空间近乎无限大,假设一个扇区大小仍为512字节,可表示扇区数为,算下来,可管理的硬盘容量=18EB(1EB=1024PB=1,048,576TB),2T在它面前完全不在话下。按目前的硬盘技术来看,确实近乎无限,不过,以后的事谁知道呢。
(2)分区数量几乎没有限制,由于可在表头中设置分区数量的大小,如果愿意,设置个分区也可以(有人愿意管理这么多分区吗),不过,目前windows仅支持最大128个分区。
(3)自带保险,由于在磁盘的首尾部分各带一个GPT表头,任何一个受到破坏后都可以通过另一份恢复,极大地提高了磁盘的抗性(两个一起坏的请出门买彩票)。
(4)循环冗余检验值针对关键数据结构而计算,提高了数据崩溃的检测几率。
(5)尽管目前分区类型不超过百数(十数也没有吧。),GPT仍提供了16字节的GUID来标识分区类型,使其更不容易产生冲突。
(6)每个分区都可以拥有一个特别的名字,最长72字节,足够写一首七律了。满足你的各种奇葩起名需求。
完美支持UEFI,毕竟它就是UEFI规范的衍生品。在将来全行业UEFI的情境下,GPT必将更快淘汰MBR。
一些经常被问到的关于GPT的问题:
- Q:怎么知道我的硬盘是MBR的还是GPT的?
A: windows自带个非常好用的工具-diskpart,简单几条命令即可,如图: