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

磁盘分区MBRGPT格式详解(Linux

⼀、磁盘结构

机械硬盘主要由磁盘盘⽚、磁头、主轴与传动轴等组成,数据存放在具有磁性物质的磁盘盘⽚中。

实际运⾏时,主轴马达让碟⽚转动,然后磁头臂让磁头在碟⽚上⾯进⾏读写操作。

读取数据时以磁头转圈的⽅式进⾏,在磁⽚同⼼圆中切出⼀个⼀个的⼩区块,这些⼩区块就是磁盘的最⼩物理存储单位,成为

(sector),同⼀个同⼼圆的扇区组合成的圆就是磁道(track)。由于磁盘⾥可能会有多个碟⽚,因此在所有碟⽚上⾯的同⼀个磁道可

以组成 柱⾯(cylinder)。

外圈的圆⽐较⼤,为了合理利⽤这些空间,磁盘外圈圆会⽐内圈有更多的扇区。所以,当碟⽚转⼀圈时,外圈的扇区数量⽐较多,因此如果

数据写⼊在外圈,转⼀圈能够读写的数据量⽐内圈多。因此数据的读写会由外圈开始向内写,这是默认的⽅式。

原本硬盘的扇区都是设计成512B的⼤⼩,但随着硬盘容量的增⼤,为了减少数据量的拆解,⽬前绝⼤多数的⾼容量硬盘使⽤了4K⼤⼩的扇

区设计。

为什么要分区?

1.数据的安全性

每个分区的数据是分开存储的,当要对某个分区的数据进⾏整理时,不会影响到其它分区。例如对安装有Windows系统的C盘进⾏重装

时,对其它分区如D盘、E盘中的数据不会产⽣影响。

所谓的分区就是针对64字节的分区表进⾏设置⽽已。

磁盘默认的分区表仅能写⼊四组分区信息,每组记录区记录了该区段的起始与结束的柱⾯号码。

这四个分区的记录被称为主要(Primary)分区或扩展(Extended)分区。

当系统要写⼊磁盘时,⼀定会参考磁盘分区表,才能针对某个分区进⾏数据的处理。

2)扩展分区和逻辑分区:

MBR模式简略图:

MBR分区表结构:

偏移长度(字节)意义

00H1分区状态:00–>⾮活动分区;80–>活动分区;其它数值没有意义

01H1分区起始磁头号(HEAD),⽤到全部8位

02H2分区起始扇区号(SECTOR),占据02H的位0-5;该分区的起始磁柱号(CYLINDER),占据02H的位6-7和03H的全部8位

04H1⽂件系统标志位

05H1分区结束磁头号(HEAD),⽤到全部8位

06H2分区结束扇区号(SECTOR),占据06H的位0-5;该分区的结束磁柱号(CYLINDER),占据06H的位6-7和07H的全部8位

08H4分区起始相对扇区号

0CH4分区总的扇区数

3MBR分区⼤⼩限制的问题:

分区表组最后4个字节表⽰分区中的扇区数量,有4*8=32位,最⼤值为 2+2+ … +2 = 2-1 个扇区,每个扇区⼤⼩为512字节,所

013132

以能表⽰的最⼤容量为 :

(21)512=20bytes=2048GB=2TB

32

注意这⾥是⽤1:1024换算的,硬盘制造商使⽤1:1000换算,所以就会得出2.2TB的结果。

2TB是对单⼀分区容量的限制,如果第⼀个分区就占了2TB,那么其第⼆个分区的扇区物理地址就⽆法表⽰了,所以2TB也是对整个硬盘最

⼤容量的限制

MBR的弊端:

操作系统⽆法使⽤2.2TB以上的磁盘容量。

MBR仅有⼀个区块,被破坏后经常⽆法或很难恢复。

MBR内的存放启动引导程序的区块仅446字节,⽆法存储较多的程序代码。

2GPT

1)简介

如今扇区⼤⼩不仅有512字节的,还有4K⼤⼩的。为了兼容所有的磁盘,使⽤逻辑区块地址(Logical Block Address,LBA)来处理扇

区。GPT将硬盘所有区块以LBA(默认512字节)来规划,第⼀个LBA称为LBA0。

与MBR仅使⽤第⼀个512字节来记录不同,GPT使⽤了34个LBA来记录分区信息。相⽐于MBR中只有⼀个区块记录分区信息,GPT除了

前⾯34个LBA记录以外,整个磁盘的最后34个LBA也拿来做备份。

2LBA

LBA0(MBR兼容模块)

出于兼容性考虑存储了⼀份传统MBR,⽤来防⽌不⽀持GPT的硬盘管理⼯具错误识别并破坏硬盘中的数据,这个MBR也叫做保护

MBR。

1616字节分区GUID

起始字节长度内容

328字节起始LBA(⼩端序)

408字节末尾LBA

488字节属性标签(如:60表⽰“只读”)

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

(16+16+8+8+8+72=128)

3GPT分区⼤⼩限制:

GPT 在每组记录中分别提供了 8字节 = 64位 来记载开始/结束的扇区号码。因此,理论上对于单⼀分区槽来说, 它的最⼤容量限制为 2

64

* 512bytes = 2 Kbytes = 2TB = 8 ZB 。但是受操作系统限制,⼀般⼀个分区最⼤限制为 18EB

6333

GPT 分区没有所谓的主、扩展、逻辑分区的概念,每个都可以视为是主分区,每⼀个分区都可以格式化。

GPT 分区默认可以提供多达128 组纪录,⽽在Linux 本⾝的内核设备记录中,针对单⼀磁盘来说,虽然过去最多只能到达15 个分区,不

过由于Linux 内核通过udev 等⽅式的处理,现在Linux 也已经没有这个限制了。