磁盘及分区

物理硬盘结构

机械硬盘

主要的结构是多个盘面和磁头。

  • 磁道:一个磁盘被分为多个磁道(同心圆圈)。
  • 扇区:每个磁道被分为多个扇区,每个扇区存储的数据量相同,靠里的扇区面积小,所以存储数据密度大,靠外的扇区密度小,所以存储数据密度小。
  • 柱面:多个盘面相同位置的磁道组成一个柱面(上图中所有黄圈为一个柱面)
  • 簇:操作系统中的概念,在文件系统中,为了便于管理,将几个扇区组成一个簇进行管理。簇是存储文件的基本单位(即使文件很小,它也会占用一个簇)

固态硬盘

基于控制芯片和存储颗粒构造,不用机械硬盘的磁头寻址等操作,因此读写速度更快。

磁盘初始化

有三个步骤:低级格式化,分区,高级格式化

  • 低级格式化:在出场时完成。将磁道划分为多个扇区
  • 分区:将不同磁道划分为一个区(如下图常见的划分C盘,D盘),分区时,现在主要有两种模式:MBR与GPT
  • 高级格式化:创建文件系统(NTFS,FAT32等)

分区

下面介绍磁盘初始化中的第二步:分区

MBR结构

在每个物理硬盘的第一个扇区(0柱面 0磁头 1扇区)存放着主引导记录MBR,它主要由三部分组成:引导代码、保留区,分区表和结束标志

偏移(偏移都为16进制) 大小(字节) 意义
000-1B7 440 引导代码,负责整个系统启动
1B8-1BD 6 保留区,写有磁盘标签
1BE-1FD 64 分区表,每16个字节表示一个分区,共四个分区
1FE-1FF 2 结束标志,值为55AA

分区表中每一个16字节意义如下:

偏移(以第一个16字节为例,相对于MBR的偏移) 大小(字节) 意义
1BE 1 分区状态,00表示非活动分区,80表示活动分区
1BF 1 分区起始磁道号
1C0-1C1 2 低六位表示分区起始扇区号,高10位为分区起始柱面号(小端)
1C2 1 分区类型描述,分区的文件系统,如果值为05或0F则为扩展分区
1C3 1 结束磁道号
1C4-1C5 2 低六位表示结束扇区号,高10位表示结束柱面号
1C6-1C9 4 分区起始相对扇区数,从磁盘开始到该分区有几个扇区
1CA-1CD 4 分区总扇区数

以本磁盘4为例,有5个分区J,K,L,M,N,用DiskGenius进行演示:

下面为磁盘4第一个扇区,即0扇区的数据的截图,其中红框为引导代码,绿色标记处为保留区,蓝色处为结束标记,黄色和未标记处为64字节的分区表,黄色标记处为分区表中第一个分区表项(也就是磁盘中的新加卷J):值为00 02 03 00 0C 61 1B 06 80 00 00 00 00 90 01 00,依次说明

00:该分区为非活动分区
02:起始磁道号为2
03 00:小端存储,为0003,二进制为0000 0000 0000 0011,低5位为00011,起始扇区号为3,高10位为0,起始柱面号为0
0C:查表知分区的文件系统为windows 95 FAT32
61:结束磁道号为97
1B 06:与上同理,这里为结束的扇区和柱面号
80 00 00 00:为128,即在整个磁盘的第128个扇区开始为这个分区的数据
00 90 01 00:为102400,即该分区有102400个扇区

可以与软件中的显示对照查看是否正确:

但是有没有发现,分区表项中的起始柱面,磁头,扇区号(起始扇区号为3)和1C6-1CD的分区起始相对扇区数的128不对应。
其实通过起始和结束的柱面、磁头和扇区号,这种寻址方式是CHS寻址,最大只能支持8GB,不能满足需求,所以提出Logical Block Address(LBA)寻址方式,LBA就是为所有的扇区从0开始编号,访问的时候直接给出对应的扇区号就行,每一个分区表项中8~11个字节表示了起始的扇区数,12~15个字节表示分区的总扇区数,因为是32位,所以最大就能支持2TB容量的磁盘

扩展分区

上述分区表显示只能有四个分区,如果超过了4个分区,就需要将分区变为扩展分区,该分区对应一个EBR
只有分区表项的第五个字节,即分区类型描述,如果值为05或0F则为扩展分区。扩展分区表项的起始扇区地址会指向EBR(扩展引导记录)。EBR与MBR结构类似,只不过前面的引导代码为空,在它的分区表区域,描述的是扩展分区的信息,其中的每个分区表项中的扇区起始数为相对于EBR扇区数的相对数
以下为本次所用例子磁盘4的图示:

还是以这个为例说明,看他分区表区域中最后16个字节00 ED 26 08 05 FE 3F 0B 80 30 02 00 00 E0 00 00

第五个字节为05,表示他是扩展分区
第8-11为它的起始扇区数,值为143488,到该扇区,这就是EBR,看他的分区表中第一个16自己,即第一个分区表项,其相对起始扇区数为128,所以这个扩展分区的真正起始扇区数为143488+128=143616,可以通过软件给出的数据对照验证

因此可以通过这种方式,每一个分区可以通过链接的方式不断进行划分,突破4个分区的限制

GPT结构

GPT磁盘分区结构解决了MBR只能分4个主分区的的缺点
GPT组成:保护MBR,GPT头,分区表,分区区域,分区表备份,GPT头备份
以该磁盘1为例进行说明,该磁盘有两个分区

  • 保护MBR:为了兼容,在第0扇区加入一个没有引导代码,只有保留区,分区表和结束标志的MBR区
  • GPT头,位于第一扇区
偏移 意义
00-07 签名,值为“EFI PART”的ASCII码
08-0B 版本号
0C-0f GPT头字节总数
10-13 GPT头CRC校验和
18-1f GPT头所在扇区号
20-27 GPT头备份所在扇区号
28-2f GPT分区区域起始扇区号
30-37 GPT分区结束扇区号
38-47 磁盘GUID
48-4f GPT分区表起始扇区号
50-53 分区表项数
54-57 每个分区表项的字节数
58-5f 分区表CRC校验和

以下为GPT头的数据
GPT头字节总数为红色划线处0C-0f,值为92,也就是图中所有有标记的共有92个字节,96-4(14-17的四个字节没有意义)
GPT头所在扇区号为绿色划线处18-1f,值为1
GPT头备份所在扇区号为绿色框处20-27 ,值为500118191
GPT分区区域起始扇区号为蓝色划线处28-2f,值为34
GPT分区表起始扇区号为蓝色框处48-4f,值为2
分区表项数为第一个灰色划线处50-53,值为128
每个分区表项的字节数为第二个灰色划线处58-5f,值为128

  • 分区表,2-33号扇区,共32个扇区,每个分区表项占128字节
偏移 意义
00-0f 分区类型GUID
10-1f 分区GUID
20-27 分区起始地址
28-2f 分区结束地址
30-37 分区属性
38-7f 分区名

以下为分区表的数据,红框为第一个分区表项数据
分区地址在偏移420-427处,值为2048,这就是第一个分区区域的起始扇区数

  • 分区区域:数据使用的分区
  • GPT头备份:GPT头的一个备份

在扇区500118191(在GPT头中得知)的数据

  • 分区表备份:对分区表的完整备份

所以总体来看,该磁盘的分区结构为

开机的过程

所以可以想象每次计算机打开时大概发生了什么:
当主机接通电源,会起到主板上的只读存储中保存的BIOS程序,该程序首先会检查计算机的环境状态,并读取硬盘内容
这时有两种引导方式,一种是传统BIOS+MBR
首先读取第一个扇区存放着主引导记录MBR,接着将MBR中的引导代码加载到内存中进行执行,从活动分区中(系统盘)读入操作系统执行
另一种是新型UEFI BIOS+GPT(其实也能+MBR),会通过GPT中的信息,得到叫ESP或EFI分区(该分区文件系统是FAT)中的内容,然后读入系统进行执行
更详细的介绍:

https://www.renrendoc.com/paper/182400768.html
https://www.pianshen.com/article/2868363465/
https://daily.zhihu.com/story/8803295
https://zhuanlan.zhihu.com/p/358128807
https://www.zhihu.com/question/40831686

其它参考:
http://www.360doc.com/content/18/0526/10/51888465_757122958.shtml

关于磁盘初始化第三个阶段——文件系统见:文件系统1:FAT等文章

posted @ 2022-04-18 21:21  启林O_o  阅读(324)  评论(0编辑  收藏  举报