磁盘分区

一、 BIOS/MBRUEFI/GPT 他们之间的关系

1、传统的主板就是传统 BIOS,可在使用 MBR 分区表的硬盘(俗称 MBR磁盘,就是传统常用的模式)上安装32或64位操作系统。同时也支持使用 GUID 分区表的硬盘(俗称GPT磁盘),但该硬盘上不能安装操作系统。
2、新型主板使用 UEFI BIOS,只能在使用 GUID 分区表的硬盘(俗称GPT磁盘)上安装64位操作系统。同时也支持 MBR 磁盘,但该硬盘上不能安装操作系统。
因此,无论主板是传统 BIOS,还是 UEFI BIOS,都可以同时使用 GPT 磁盘与 MBR 磁盘,但要安装操作系统,就有明确的区别:传统 BIOS 的主板只能使用 MBR 磁盘安装操作系统;UEFI BIOS 的主板只能在 GPT 磁盘上安装64位操作系统。

二、MBR分区

主引导记录(Master BootRecord,缩写:MBR),又叫做主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上的三维地址为(0柱面,0磁头,1扇区)。在深入讨论主引导扇区内部结构的时候,有时也将其开头的446字节内容特指为主引导记录MBR),其后是416字节的磁盘分区表DPT),以及2字节的结束标志(55AA)。因此,在使用主引导记录MBR)这个术语的时候,需要根据具体情况判断其到底是指整个主引导扇区,还是主引导扇区的前446字节。如下:

对应到我电脑第一个扇区:

启动代码

主引导记录最开头是第一阶段引导代码。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后将控制权交给硬盘上的引导程序(如GNU GRUB)。它不依赖任何操作系统,而且启动代码也是可以改变的,从而能够实现多系统引导。

硬盘分区表

硬盘分区表占据主引导扇区的64个字节(偏移01BEH–偏移01FDH),可以对四个分区的信息进行描述,其中每个分区的信息占据16个字节。具体每个字节的定义可以参见硬盘分区结构信息

主引导记录的结构可以知道,它仅仅包含一个64个字节的硬盘分区表。由于每个分区信息需要16个字节,所以对于采用MBR型分区结构的硬盘,最多只能识别4个主要分区(Primary partition)。所以对于一个采用此种分区结构的硬盘来说,想要得到4个以上的主要分区是不可能的。这里就需要引出扩展分区了。扩展分区也是主要分区的一种,但它与主分区的不同在于理论上可以划分为无数个逻辑分区。

扩展分区中逻辑驱动器的引导记录是链式的。每一个逻辑分区都有一个和MBR结构类似的扩展引导记录(EBR),其分区表的第一项指向该逻辑分区本身的引导扇区,第二项指向下一个逻辑驱动器的EBR,分区表第三、第四项没有用到。

Windows系统默认情况下,一般都是只划分一个主分区给系统,剩余的部分全部划入扩展分区。这里有下面几点需要注意:

MBR分区表中最多4个主分区或者3个主分区+1个扩展分区,也就是说扩展分区只能有一个,然后可以再细分为多个逻辑分区。

Linux系统中,硬盘分区命名为sda1sda4或者hda1hda4(其中a表示硬盘编号可能是abc等等)。在MBR硬盘中,分区号14是主分区(或者扩展分区),逻辑分区号只能从5开始。

MBR分区表中,一个分区最大的容量为2T,且每个分区的起始柱面必须在这个disk的前2T内。你有一个3T的硬盘,根据要求你至少要把它划分为2个分区,且最后一个分区的起始扇区要位于硬盘的前2T空间内。如果硬盘太大则必须改用GPT

 常见文件系统标记类型:

三、GPT分区

全局唯一标识分区表GUID Partition Table缩写GPT)是一个实体硬盘分区表的结构布局的标准。它是可扩展固件接口EFI)标准(被Intel用于替代个人计算机的BIOS)的一部分,被用于替代BIOS系统中的一32bits来存储逻辑块地址和大小信息的主引导记录MBR)分区表。对于那些扇区为512字节的磁盘,MBR分区表不支持容量大于2.2TB2.2×1012字节[1]分区,然而,一些硬盘制造商(诸如希捷和西部数据)注意到这个局限性,并且将他们的容量较大的磁盘升级到4KB扇区,这意味着MBR的有效容量上限提升到16 TiB。这个看似正确的解决方案,在临时地降低人们对改进磁盘分配表的需求的同时,也给市场带来关于在有较大的块(block)的设备上从BIOS启动时,如何最佳的划分磁盘分区的困惑。GPT分配64bits给逻辑块地址,因而使得最大分区大小在264-1个扇区成为可能。对于每个扇区大小为512字节的磁盘,那意味着可以有9.4ZB9.4×1021字节)或8 ZiB512字节9,444,732,965,739,290,426,880字节或18,446,744,073,709,551,615264-1)个扇区×51229)字节每扇区)[1][2]

 

gpt分区表图:

 

 

GPT分区表的结构。此例中,每个逻辑块(LBA)为512字节,每个分区的记录为128字节。负数的LBA地址表示从最后的块开始倒数,−1表示最后一个块。

 

 

efi msr分区是什么?

ESP分区:EFI systempartition,该分区用于采用了EFI BIOS的电脑系统,用来启动操作系统。分区内存放引导管理程序、驱动程序、
系统维护工具等。如果电脑采用了EFI系统,或当前磁盘用于在EFI平台上启动操作系统,则应建议ESP分区。
MSR分区:即微软保留分区,是GPT磁盘上用于保留空间以备用的分区,例如在将磁盘转换为动态磁盘时需要使用这些分区空间。

GPT分区标志

GPT硬盘结构:

GPT硬盘在保护MBR”450字节偏移处设置“EE”标志标明本硬盘为GPT

gpt分区在硬盘中的格式

分区表头的格式

起始字节

长度

内容

0

8字节

签名("EFI PART", 45 46 49 20 50 41 52 54

8

4字节

修订(在1.0版中,值是00 00 01 00

12

4字节

分区表头的大小(单位是字节,通常是92字节,即5C 00 00 00

16

4字节

分区表头(第091字节)的CRC32校验,在计算时,把这个字段作为0处理,需要计算出分区序列的CRC32校验后再计算本字段

20

4字节

保留,必须是0

24

8字节

当前LBA(这个分区表头的位置)

32

8字节

备份LBA(另一个分区表头的位置)

40

8字节

第一个可用于分区的LBA(主分区表的最后一个LBA + 1

48

8字节

最后一个可用于分区的LBA(备份分区表的第一个LBA − 1

56

16字节

硬盘GUID(在UNIX系统中也叫UUID

72

8字节

分区表项的起始LBA(在主分区表中是2

80

4字节

分区表项的数量

84

4字节

一个分区表项的大小(通常是128

88

4字节

分区序列的CRC32校验

92

*

保留,剩余的字节必须是0(对于512字节LBA的硬盘即是420个字节)

主分区表和备份分区表的头分别位于硬盘的第二个扇区(LBA 1)以及硬盘的最后一个扇区。备份分区表头中的信息是关于备份分区表的。

分区表项(LBA 2–33

GPT分区表使用简单而直接的方式表示分区。一个分区表项的前16字节是分区类型GUID。例如,EFI系统分区GUID类型是{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}。接下来的16字节是该分区唯一的GUID(这个GUID指的是该分区本身,而之前的GUID指的是该分区的类型)。再接下来是分区起始和末尾的64LBA编号,以及分区的名字和属性。

GPT分区表项的格式

起始字节

长度

内容

0

16字节

分区类型GUID

16

16字节

分区GUID

32

8字节

起始LBA小端序

40

8字节

末尾LBA

48

8字节

属性标签(如:60表示只读

56

72字节

分区名(可以包括36UTF-16(小端序)字符)

 分区类型GUID

相关操作系统

分区类型

GUID[1]

None

未使用

00000000-0000-0000-0000-000000000000

MBR分区表

024DEE41-33E7-11D3-9D69-0008C781F39F

EFI系统分区

C12A7328-F81F-11D2-BA4B-00A0C93EC93B

BIOS引导分区

21686148-6449-6E6F-744E-656564454649

Windows

微软保留分区

E3C9E316-0B5C-4DB8-817D-F92DF00215AE

基本数据分区[2]

EBD0A0A2-B9E5-4433-87C0-68B6B72699C7

逻辑软盘管理工具元数据分区

5808C8AA-7E8F-42E0-85D2-E1E90434CFB3

逻辑软盘管理工具数据分区

AF9B60A0-1431-4F62-BC68-3311714A69AD

Windows恢复环境

DE94BBA4-06D1-4D40-A16A-BFD50179D6AC

IBM通用并行文件系统GPFS)分区

37AFFC90-EF7D-4e96-91C3-2D7AE055B174

HP-UX

数据分区

75894C1E-3AEB-11D3-B7C1-7B03A0000000

服务分区

E2A1E728-32E3-11D6-A682-7B03A0000000

Linux

数据分区[2]

EBD0A0A2-B9E5-4433-87C0-68B6B72699C7

RAID分区

A19D880F-05FC-4D3B-A006-743F0F84911E

交换分区

0657FD6D-A4AB-43C4-84E5-0933C84B4F4F

逻辑卷管理员LVM)分区

E6D6D379-F507-44C2-A23C-238F2A3DF928

保留

8DA63339-0007-60C0-C436-083AC8230908

FreeBSD

启动分区

83BD6B9D-7F41-11DC-BE0B-001560B84F0F

数据分区

516E7CB4-6ECF-11D6-8FF8-00022D09712B

交换分区

516E7CB5-6ECF-11D6-8FF8-00022D09712B

UFS分区

516E7CB6-6ECF-11D6-8FF8-00022D09712B

Vinum volume manager分区

516E7CB8-6ECF-11D6-8FF8-00022D09712B

ZFS分区

516E7CBA-6ECF-11D6-8FF8-00022D09712B

Mac OS X

HFSHFS+)分区

48465300-0000-11AA-AA11-00306543ECAC

苹果公司UFS

55465300-0000-11AA-AA11-00306543ECAC

ZFS[3]

6A898CC3-1DD2-11B2-99A6-080020736631

苹果RAID分区

52414944-0000-11AA-AA11-00306543ECAC

苹果RAID分区,下线

52414944-5F4F-11AA-AA11-00306543ECAC

苹果启动分区

426F6F74-0000-11AA-AA11-00306543ECAC

Apple Label

4C616265-6C00-11AA-AA11-00306543ECAC

Apple TV恢复分区

5265636F-7665-11AA-AA11-00306543ECAC

Solaris

启动分区

6A82CB45-1DD2-11B2-99A6-080020736631

根分区

6A85CF4D-1DD2-11B2-99A6-080020736631

交换分区

6A87C46F-1DD2-11B2-99A6-080020736631

备份分区

6A8B642B-1DD2-11B2-99A6-080020736631

/usr分区[3]

6A898CC3-1DD2-11B2-99A6-080020736631

/var分区

6A8EF2E9-1DD2-11B2-99A6-080020736631

/home分区

6A90BA39-1DD2-11B2-99A6-080020736631

备用扇区

6A9283A5-1DD2-11B2-99A6-080020736631

保留分区

6A945A3B-1DD2-11B2-99A6-080020736631

6A9630D1-1DD2-11B2-99A6-080020736631

6A980767-1DD2-11B2-99A6-080020736631

6A96237F-1DD2-11B2-99A6-080020736631

6A8D2AC7-1DD2-11B2-99A6-080020736631

NetBSD[4]

交换分区

49F48D32-B10E-11DC-B99B-0019D1879648

FFS分区

49F48D5A-B10E-11DC-B99B-0019D1879648

LFS分区

49F48D82-B10E-11DC-B99B-0019D1879648

RAID分区

49F48DAA-B10E-11DC-B99B-0019D1879648

concatenated分区

2DB519C4-B10F-11DC-B99B-0019D1879648

加密分区

2DB519EC-B10F-11DC-B99B-0019D1879648

^本表中的GUID使用小端序表示。例如,EFI系统分区的GUID在这里写成C12A7328-F81F-11D2-BA4B-00A0C93EC93B但实际上它对应的16字节的序列是28 732A C1 1F F8 D2 11 BA 4B 00 A0 C9 3E C9 3B——只有前3部分的字节序被交换了。

ab LinuxWindows的数据分区使用相同的GUID

ab Solaris系统中/usr分区的GUIDMac OS X上被用作普通的ZFS分区。

^具体定义见src/sys/sys/disklabel_gpt.hNetBSDGUID在单独定义之前曾经使用过FreeBSDGUID

 

四、MBRGPT区别

1mbr gpt 分区数量?

mbr:只支持4个主分区或三个主分区和一个扩展分区,扩展分区下可以有多个逻辑分区。扩展分区中逻辑驱动器的引导记录是链式的。每一个逻辑分区都有一个和MBR结构类似的扩展引导记录(EBR),其分区表的第一项指向该逻辑分区本身的引导扇区,第二项指向下一个逻辑驱动器的EBR,分区表第三、第四项没有用到。

gptGPT,全局唯一标识分区表(GUIDPartition Table),与MBR最大4个分区表项的限制相比,GPT对分区数量没有限制,但
Windows最大仅支持128GPT分区GPT可管理硬盘大小达到了18EB。只有基于UEFI平台的主板才支持GPT分区引导启动。

2mbr最大分区不超过2Tgpt分区可以超过2T

 

五、注意事项

1、 磁盘控制相关函数,参考DeviceIoControl系列函数,参考下面这篇文章。

http://www.xuebuyuan.com/2221670.html

2、读写磁盘数据时,需要时扇区大小的整数倍,否则容易失败。默认扇区大小为512.

3writefile写磁盘失败解决方法:

主要是在打开磁盘后,需要Lock磁盘,再读写数据,然后UnLock磁盘。

参考这篇文章

https://blog.csdn.net/dijkstar/article/details/50947652

4、自己写分区表,最后看分区对不对,使用DiskGenius磁盘分区查看。

猜你喜欢

转载自blog.csdn.net/byxdaz/article/details/80069758