MBR分区表为什么最大只能识别2TB硬盘容量

转载:MBR分区表为什么最大只能识别2TB硬盘容量

MBR磁盘分区是一种使用最为广泛的分区结构,它也被称为DOS分区结构,但它并不仅仅应用于Windows系统平台,也应用于Linux,基于X86的UNIX等系统平台。它位于磁盘的0号扇区(一扇区等于512字节),是一个重要的扇区(简称MBR扇区)。

MBR扇区由以下几个部分组成:

  • 主要启动记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有 446 bytes;
  • 分区表(partition table):记录整颗硬盘分区的状态,有 64 bytes
  • MBR结束标志:占MBR扇区最后2个字节,一直为55 AA
图片名称

可以看到分区表只有64字节,最多只能有4个主分区或者3个主分区1个扩展分区。

那么每个分区表项占有16个字节,如果是记录起始扇区id,也不止2T的容量啊。这就需要了解一下分区表的结构和硬盘的寻址方式了。

如下图所示,为MBR分区表的详细结构:

图片名称

可以看到,这里使用了柱面(cylinder),磁头(header),扇区(sector)三个变量进行寻址,这种寻址方式称为CHS,这里表示的地址已经不是物理地址,而是逻辑地址了,又称为LARGE寻址方式,在这种方式下,

硬盘容量=磁头数×柱面数×扇区数×扇区大小(一般为512byte)

那如果磁头数足够多,岂不是可以管理无限的容量?答案当然是否定的,我们看到上表的最后两项:

可以看到两个以4字节表示分区之前以及本分区的扇区数,也就是可以表示的最大扇区数为:

232=42949672962^{32}=4294967296

而每个标准扇区的容量为512字节,于是能表示的最大容量为:

4294967296*512 Bytes
=2199023255552 Bytes(硬盘厂商采用1:1000进行单位换算,因此也有2.2TB一说
=2147483648 KB
=2097152 MB
=2048 GB
=2TB

在网上还可以找到另外一个答案:

由于它(MBR)是为32位操作系统设计的,这就限制了它的寻址范围为2的32次方个扇区……

其实这种说法是不严谨的,准确来说,MBR分区表最大能容纳2T容量的主要原因,是因为分区表中的本分区表之前使用的扇区数以及分区的总扇区数这两个字段为4字节,因此导致的限制。

尽管后来为了支持更多的分区,引入了扩展分区及逻辑分区的概念。但每个分区项仍然用16个字节存储。