总所周知,硬盘是计算机主要的存储介质。基于磁记录技术,它既可以存储大量的二进制数据,断电后也能保持数据不丢失,因此常被用于存储程序、各类数据文件。
一、硬盘的构成
1.1 机械结构构成
常见的硬盘由主轴马达、音圈马达、磁头、磁头臂、磁盘(很多堆叠起来的圆形磁片)等部件组成,如下图所示:
磁盘是存储数据的介质,而磁头负责读写磁盘上的数据。实际运行时,主轴马达驱动磁盘转动,音圈马达与磁头臂协同使磁头到达磁盘的特定位置上方,进而执行读出、写入操作。
1.2 存储逻辑构成
为了便于管理数据,在逻辑上,硬盘的设计者将磁片划分成一个个小区块,并以区块作为最小的物理存储单元,进行数据的磁头读写。这些小区块被称为 “扇区”(sector),而同一个同心圆的扇区组合起来的圆就是 “磁道”(track)。此外,由于磁盘一般由多个磁片堆叠构成,因此在所有磁片上的同一个磁道,可以组合成 “柱面”(cylinder)。
由于同心圆外圈的圆比较大,占用的面积比内圈多,所以磁片上外圈的圆会具有更多的扇区。若数据写入在外圈,转一圈能够读写的数据量会比内圈多,效率更高。因此默认状态下,磁片数据的读写都是从外圈开始,向内执行。
原本磁盘扇区都是512B大小,但近期以来硬盘的容量越来越大,为了减少数据量的拆解,绝大部分的高容量硬盘已经使用了4KB大小的扇区设计。
二、硬盘的分区
以柱面(cylinder)或扇区(Sector)为单位,通过指定"开始与结束磁道\扇区"的形式,将硬盘划分为一个个相互独立的区段,这种使用方式被称为 “分区”。例如我们在Windows下打开硬盘时,常常会看到系统将其划分成了C、D、E、F盘。分区有以下好处:
- 每个分区的数据是分开的,相互独立,对一个分区的修改、整理,不会影响到其它分区的数据;
- 由于数据的集中性,将数据读写访问限制在分区内,将有助于提高读写的速度与性能。
硬盘存在两种分区格式,分别为 “MBR(Master Boot Record)格式” 和 “GPT(GUID partition table)格式”。
2.1 MBR分区格式
MBR(Master Boot Record,主引导记录)分区格式,是指早期硬盘中使用的,将启动引导程序、分区表等重要信息,存放在磁盘第一个扇区,的存储形式。"第一扇区"的大小一般是512字节(旧的磁盘扇区都是512字节),存储数据内容如下:
名称 | 大小(Byte) | 说明 |
---|---|---|
主引导记录(Master Boot Record,MBR) | 446 | 安装启动引导程序的地方 |
分区表(partition table) | 64 | 记录整块硬盘分区的状态 |
由于分区表所在的区块仅有64字节容量,因此最多只能有四组记录区,每组记录区记录了该区域的起始、结束的柱面号码。MBR分区格式具有以下的特点:
- 所谓的分区,其实只是针对64字节的分区表进行设置;
- 硬盘默认的分区表仅能写入四组分区信息;
- 这四组分区信息,按功能我们可以称为主要(Primary)或扩展(Extended)分区;
- 分区的最小单位通常是柱面(Cylinder);
- 当系统要写入磁盘时,一定要参考磁盘分区表,才能针对某个分区进行数据的处理。
当我们希望将硬盘划分成四个以上分区时,可以通过扩展(Extended)分区来实现。扩展分区的目的是使用额外的扇区来记录分区信息,扩展分区本身并不能被格式化。使用者可以通过扩展分区所指向的那个区块,继续记录分区信息。这些被扩展分区额外划分出来的分区,被称为 “逻辑分区”。
综上,主要分区、扩展分区、逻辑分区的特性定义如下:
- 主要分区与扩展分区一共最多可以有4个(硬盘的限制);
- 扩展分区最多只能有一个(操作系统的限制);
- 逻辑分区是由扩展分区持续划分出来的分区;
- 能够被格式化,并用于数据存储的分区是主要分区和逻辑分区,扩展分区无法格式化;
- 逻辑分区的数量可能会因操作系统的不同而改变,在Linux中SATA硬盘已经可以突破63个以上的分区限制。
使用中,MBR格式分区表记录的每条分区信息仅有16字节,相当有限,随着技术与需求的发展,逐渐暴露出了如下问题:
- 操作系统无法使用2.2TB以上的硬盘容量;
- MBR仅有一个区块,被破坏后,经常无法或很难恢复;
- MBR内启动引导程序的区块仅446字节,无法储存较多的程序代码。
于是,便有了GPT这个分区格式的出现。
2.2 GPT分区格式
为了兼容512、4K字节大小的扇区,GPT格式使用了 “逻辑块(Logical Block)(默认512字节)” 的概念,按逻辑区块地址(Logical Block Address,LBA)划分区段,第一个LBA被称为LBA0(从0开始编号)。
区别于MBR仅用一个512字节区块来记录分区信息,GPT使用了34个LBA区块,并且还会将硬盘最后的34个LBA区块,设作备份区。
34个LBA区块的具体作用如下:
名称 | 说明 |
---|---|
LBA1(GPT表头记录) | 记录了分区表本身的位置、大小和校验码(CRC32)、备份GPT分区的位置 |
LBA2~33(分区信息记录) | 每个LBA可以记录4组分区信息,每组信息128字节,即每个扇区号码可以用64位记录 |
相较于MBR格式,GPT分区格式没有所谓的主、扩展、逻辑分区的概念,每组记录独立存在,每个都可以视为主要分区,都可以被格式化。