2023年11月25日发(作者:)

安装系统的时候涉及到MBRGPT,现在也贴上来,供以后复习使用。

MBR GPT 的问题已经走到了非常现实的阶段-3T硬盘开始普及。MBR 由于对 3T 硬盘寻址无法支持,

终于要开始被弃用了。但仅仅只是开始,我感觉至少10年之内 MBR 还不会消失。恐怕当GPT适应不

了需求的时候,MBR才会消失。

一、MBR 的失误

失误牵强了一点。我们不能要求当年只有5M的硬盘就扣出2M来放寻址信息。计算机永远比你想象的

要发展的快。

首先你要有一些基本的硬盘的MBR知识,如果你不熟悉,可以先在 wiki 看一看硬盘的基本结构。

在了解了磁道、柱面、扇区之后,再看下面的 MBR 结构就很了然了:

基本MBR结构

偏移量(位置)

(within sector)

长度

(in bytes)

解释

引导程序

十进制十六进制

000 445000 1BD

446 5091BE 1FD

510 5111FE 1FF

446

64

2

分区表

引导记录

1.

MBR 永远占用了第一个扇区,通常为512bytes大小。在这512bytes中被MBR本身的程序用去了446bytes

于是,真正描述分区信息的就只有 64 bytes而根据4个主分区的设计,每一个分区能用到的只有 16bytes.

那么!这16bytes是如何工作的?

16-byte 分区表结构

Relative

Offsets

(within entry)

0

1 3

4

5 7

8 11

长度

(bytes)

1

3

1

3

4

内容

引导标记 (80h = active)

CHS 开始位置

分区类型

描述

CHS 结束位置

启始扇区

12 15

2.

4

分区大小 (扇区单位)

在表2中,有2开始位置,我们分开理解。

硬盘的历史过程中,第一个遇到的问题就是 8G 瓶颈。这就是因为在 CHS 描述方式中,描述起点和终点

均为3 byte。我们假设是 FF FF FF ,所以是 16*16*16*16*16*16*512=8589934592 这就是 8G

颈的由来了。

但是今天 CHS 方式几乎已经不用了。后面还有 4 bytes 启始是给 LPA 方式用的。他的极限就

8589934592 * 256 =22 这就是 2T 的限制由来了。

在硬盘容量的历史中,有很多因素决定了它的限制。BIOSATAIDE),文件系统。百度上的这篇文章

简单的介绍了各个阶段的限制。

二、GPT 的思路

GPT GUID Partition Table)属于 EFI 方案中的一部分。虽然很早就开始制定这个标准,但到今天,还

是有很多系统不支持 GPT

首先,引用一张wikipedia上的结构图,来了解一下 GPT 的基本结构。

GPT 为了兼容 MBRLBA 0 依旧保留了MBR的结构。GPT工作是,会优先读取 GPT (LBA1) 内容。

如果没有 GPT 内容,则认为这是一块MBR磁盘。再从LBA 0 读取MBR

在硬盘末尾,GPT 备份了一份,这样当GPT出错时,可以快速的从硬盘末尾恢复。LBA -1 (1) 表示倒

数第一块 LBA

LBA 2 LBA 33 ,一共预留了 128 个分区表空间。 GPT 支持在一块硬盘上创建 128 个分区(真

有这种需求?)。所以每一个分区可以使用 128 bytes 的空间。

来看一看 LBA 1 的结构吧,有了 512bytes 的巨型空间,都用不掉了。

08字节名(”EFI PART”, 45 46 49 20 50 41 52 54

84字节订(比如,1.0,值是 00 00 01 00

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

164字节区表头前3项(第015字节)的CRC32校验,如果值正在计算,则是 0

204字节留,必须是 0

248字节LBA(这个分区表头的位置)

328字节LBA(备份分区表头的位置)

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

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

5616字节GUID(在类UNIX系统中也叫UUID

728字节区表项的起始LBA(对于主分区表来说,这个值是 LBA 2

804字节区表的数量

844字节个分区表的大小(通常是128

884字节区串行的CRC32校验

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

此表来源为 中文 Wikipedia, 稍微修改了两个字,便于理解。

通过这张表,程序可以获知分区数量,第一个分区在哪个位置,以及GPT头是否正确(CRC32)。在这

里着重解决的是分数数量问题,以及分区表的安全性问题。而分区的大小问题,则依赖了 GPT 的分区表:

016字节区类型GUID

1616字节GUID

328字节LBA(小端序)

408字节LBA

488字节性标签(如:60表示只读

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

重点就在这里了,在描述分区位置的时候,使用了8个字节,其最大值为 FF FF FF FF FF FF FF FF

那么,假设每一个LBA 512 bytes。其能描述的大小为 8589934592 TB = 8 ZB 。关于这个数字我算下

来的确是在 ZB 级别的。但是搜索到的文章说法不一:

突破2TB限制 3TB硬盘装操作系统实战 9.4ZB GPT分区表采用8个字节即64bit来存储扇区数,因此

它最大可支持264个扇区。)

关于windows server 2003最大支持硬盘容量的问题 18EB

对于上面这些数字,18EB 恐怕是 LBA 数量,忘记乘 512 bytes 了。9.4ZB 暂时不知道是怎么来的。但

这个数字暂且不做定论。因为微软的 FAQ 也提到了,这只是理论值,谁知道下一个瓶颈在哪里呢。

Q. How big can a GPT disk be?

A. In theory, a GPT disk can be up to 2^64 logical blocks in length. Logical blocks are commonly 512

bytes in size.

The maximum partition (and disk) size is a function of the operating system version. Windows XP and the

original release of Windows Server 2003 have a limit of 2TB per physical disk, including all partitions. For