磁盘及分区
物理硬盘结构
机械硬盘
主要的结构是多个盘面和磁头。
- 磁道:一个磁盘被分为多个磁道(同心圆圈)。
- 扇区:每个磁道被分为多个扇区,每个扇区存储的数据量相同,靠里的扇区面积小,所以存储数据密度大,靠外的扇区密度小,所以存储数据密度小。
- 柱面:多个盘面相同位置的磁道组成一个柱面(上图中所有黄圈为一个柱面)
- 簇:操作系统中的概念,在文件系统中,为了便于管理,将几个扇区组成一个簇进行管理。簇是存储文件的基本单位(即使文件很小,它也会占用一个簇)
固态硬盘
基于控制芯片和存储颗粒构造,不用机械硬盘的磁头寻址等操作,因此读写速度更快。
磁盘初始化
有三个步骤:低级格式化,分区,高级格式化
- 低级格式化:在出场时完成。将磁道划分为多个扇区
- 分区:将不同磁道划分为一个区(如下图常见的划分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等文章