目录

MBR简介

MBR简介

一、磁盘结构

1、磁盘的物理结构

磁盘结构可分为外部结构和内部结构,外部结构主要包括金属固定面板、控制电路板和接口三部分:

https://cdn.jsdelivr.net/gh/AlexsanderShaw/BlogImages@main/img/CVE-2020-16899/v4ler1an_2020-11-23_20-04-59.png

其中控制电路板部分包括了主轴调速电路、磁头驱动与伺服定位电路、读写电路、控制与接口电路等,几个主要的芯片:主控芯片BIOS芯片缓存芯片电机驱动芯片;接口部分则一般有几个不同的硬盘接口,主要包括电源插座接口、数据接口和主从跳线接口(设置主、从硬盘,即磁盘驱动器的访问顺序)。 磁盘的内部结构如下:

https://cdn.jsdelivr.net/gh/AlexsanderShaw/BlogImages@main/img/CVE-2020-16899/磁盘内部.png

内部结构则主要有以下几个核心部件:

1. 磁头组件

包括读写磁头、传动手臂、传动轴三部分,最重要的是磁头。传动轴带动传动比,使磁头到达指定位置。磁头是用线圈缠绕在磁芯上制成的,工作原理是利用特殊材料的电阻值会随着磁场变化的原理来读写盘片上的数据。硬盘在工作时,磁头通过感应旋转的盘片上磁场的变化来读取数据;通过改变盘片上的磁场来写入数据。为避免磁头和盘片的磨损,在工作状态时,磁头悬浮在高速转动的盘片上方,间隙只有0.1~0.3um,而不是盘片直接接触,在电源关闭之后,磁头会自动回到在盘片上着陆区,此处盘片并不存储数据,是盘片的起始位置。

2. 磁头驱动组件

磁头的移动是靠磁头驱动组件实现的,硬盘寻道时间的长短与磁头驱动组件关系非常密切。

3. 盘片与主轴组件

盘片是硬盘存储数据的载体,主要是在铝合金或玻璃基底上涂覆很薄的磁性材料、保护材料和润滑材料等多种不同作用的材料层加工而成,其中磁性材料的物理性能和磁层结构直接影响了数据的存储密度和所存储数据的稳定性。玻璃盘片比金属盘片在运行时具有更好的稳定性。

4. 前置控制电路

前置放大电路控制磁头感应的信号、主轴电机调速、磁头驱动和伺服定位等,由于磁头读取的信号微弱,将放大电路密封在腔体内可减少外来信号的干扰,提高操作指令的准确性。

2、逻辑结构

磁盘在使用前需要先进行格式化,该过程主要是在逻辑上为每个盘片划分磁道、扇区、柱面等这几个虚拟概念。下图为磁盘的逻辑结构:

https://cdn.jsdelivr.net/gh/AlexsanderShaw/BlogImages@main/img/CVE-2020-16899/磁盘逻辑结构.png

  1. 磁道 当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,该轨迹就称为磁道。磁道是一个个同心圆,通常盘面的一面有成千上万个磁道,磁盘上的信息是沿着轨道进行存放,相邻的磁道间保持一定距离,避免磁化单元相近时会互相影响,也为磁头进行数据读写时降低难度。

    https://cdn.jsdelivr.net/gh/AlexsanderShaw/BlogImages@main/img/CVE-2020-16899/磁道.png

  2. 扇区 每个盘片的每一面都会划分很多同心圆的磁道,而且还会将每个同心圆进一步分割为多个相等的圆弧,这些圆弧就是扇区(也称扇面)。数据则以扇区为单位进行存储,扇区也是磁盘I/O操作的最小单位(即使只需要某个扇区的几个字节,计算机也必须一次性将整个扇区的全部512字节读入内存,然后再进行数据筛选。)。扇区通常包含标题、数据、ECC(Error Correcting Code)纠错信息,其中标题包含同步和位置信息,ECC功用是对数据段提供错误侦测和纠正。

    https://cdn.jsdelivr.net/gh/AlexsanderShaw/BlogImages@main/img/CVE-2020-16899/扇区.png

  3. 柱面 硬盘通常由一个或多个盘片构成,而且每个面都被划分为数目相等的磁道,并从外缘开始编号(即最边缘的磁道为0磁道,往里依次累加)。如此磁盘中具有相同编号的磁道会形成一个圆柱,此圆柱称为磁盘的柱面。磁盘的柱面数与一个盘面上的磁道数是相等的。由于每个盘面都有一个磁头,因此,盘面数等于总的磁头数。

    https://cdn.jsdelivr.net/gh/AlexsanderShaw/BlogImages@main/img/CVE-2020-16899/柱面.png

对磁盘进行分区的主要目的是为了不同类的目录与文件可以存储进不同的分区,越多分区,也就有更多不同的地方,可以将文件的性质区分得更细,按照更为细分的性质,存储在不同的地方以管理文件。总结下分区的优点:

  • 优化I/O性能
  • 实现磁盘空间配额限制
  • 提高修复速度
  • 隔离系统和程序
  • 安装多个OS
  • 采用不用的文件系统

磁盘结构的3D参数:CHS,C-Cylinder,柱面;H-Head,磁头;S-Sector,扇区。

最后是磁盘的容量 = 柱面数 * 磁头数 * 扇区数 * 512Bytes ,相关的编号方式是:磁道从外到内编号,最外层是0号磁道;扇区的编号为固定标记某块为1号,然后顺时针编号;磁头则是决定读写面号的结构,从0开始顺序编号。

在老式磁盘中,虽然磁道周长不同,但是每个磁道上的扇区数是相同的,越往圆心扇区弧段越短,但其存储密度越高。这种方式显而易见,很浪费空间,所以现代磁盘修改为等密度结构,这也就是说,外围磁道上的扇区数要大于内圈磁道的扇区数,寻址方式上也改为以扇区为单位的线性寻址。

二、MBR

磁盘有2种分区方式:MBR和GPT。MBR,全称为Master Boot Record,主引导记录,是指磁盘第1块扇区上的一种数据结构。它在磁盘上的三维地址(柱面,磁头,扇区) = (0,0,1)。这里需要注意,在讨论引导扇区内部结构的时候,有时指的其开头的446字节内容,其后4个16字节的数据是磁盘分区表(DPT),以及2字节的结束标志“55AA”。

1. MBR结构

MBR记录了磁盘本身的相关信息以及磁盘各个分区的大小及位置信息。MBR内的信息可以通过任何一种基于某种操作系统的分区工具软件写入,和OS没有特定关系,即只要创建了有效的MBR就可以引导某一种OS(因为OS是创建在高级格式化的磁盘分区上的,是和一定的文件系统相关联的)。

一个标准的MBR结构如下:

https://cdn.jsdelivr.net/gh/AlexsanderShaw/BlogImages@main/img/CVE-2020-16899/MBR结构.png

首先使用dd if=/dev/sda of=mbr.bin bs=1 count=512命令将mbr中的数据导出成mbr.bin后,然后使用hexdump查看bin文件中的数据:

https://cdn.jsdelivr.net/gh/AlexsanderShaw/BlogImages@main/img/CVE-2020-16899/mbr_bin.png

后续将对该文件中的各个部分的数据做详细解读。

2. MBR与磁盘分区

MBR的分区方式为4个主分区或3个主分区+1个扩展(N个逻辑分区)。MBR磁盘分区的结构示意图如下:

https://cdn.jsdelivr.net/gh/AlexsanderShaw/BlogImages@main/img/CVE-2020-16899/磁盘分区示意图.png

因为MBR仅仅包含一个64字节大小的DPT,而每个分区需要16字节,所对于采用MBR型分区的磁盘最多只能识别4个主要分区(Primary partition)。如果想获得4个以上的主要分区,就需要使用扩展分区,扩展分区也是主分区的一种,不同点是扩展分区可以在理论上划分成无数个逻辑分区。

扩展分区,它仅仅是一个指向下一个分区的指针,逻辑驱动器的引导记录是链式的。每一个逻辑分区都有一个和MBR结构类似的扩展引导记录(EBR),其分区表的第一项指向该逻辑分区本身的引导扇区,第二项指向下一个逻辑驱动器的EBR,分区表第三、第四项没有用到。

Windows系统默认情况下,一般都是只划分一个主分区给系统,剩余的部分全部划入扩展分区。这里有下面几点需要注意:

  • 在MBR分区表中最多4个主分区或者3个主分区+1个扩展分区,也就是说扩展分区只能有一个,然后可以再细分为多个逻辑分区。
  • 在Linux系统中,磁盘分区命名为sda1-sda4或者hda1-hda4(其中a表示磁盘编号可能是a、b、c等等)。在MBR磁盘中,分区号1-4是主分区(或者扩展分区),逻辑分区号只能从5开始。
  • 在MBR分区表中,一个分区最大的容量为2T,且每个分区的起始柱面必须在这个disk的前2T内。你有一个3T的磁盘,根据要求你至少要把它划分为2个分区,且最后一个分区的起始扇区要位于磁盘的前2T空间内。如果磁盘太大则必须改用GPT。

3. MBR组成

1. 启动代码

MBR最开头是第一阶段引导代码,其中的磁盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后将控制权交给磁盘上的引导程序(如grub)。它不依赖任何操作系统,而且启动代码可以改变,从而实现多系统引导。代码区最大长度为446字节。

2. 磁盘分区表

大小为64字节,偏移01be-01fd,对四个分区的信息进行描述,其中每个分区的信息占16个字节。一个详细的磁盘分区结构各字节含义表如下:

https://cdn.jsdelivr.net/gh/AlexsanderShaw/BlogImages@main/img/CVE-2020-16899/磁盘分区结构信息.png

例如,某一分区在磁盘分区表的信息如下:

80 01 01 00 0B FE BF FC 3F 00 00 00 7E 86 BB 00

首字节80为分区的激活标志,表示为活动分区,可被系统引导;01 01 00表示分区开始的磁头号为1,扇区好为1,柱面号为0;0b表示分区的系统类型为FAT32,其他比较常用的有04(FAT16)、07(NTFS);fe bf fc表示分区结束的磁头号为254,分区结束的扇区号为63,分区结束的柱面号为764;3f 00 00 00表示首扇区的相对扇区号为63(小端);7e 86 bb 00表示总扇区数为12289662(小端)。

(这里需要注意,对于大于8.4G的现代磁盘,CHS的方式已经无法表示,BIOS使用LBA模式,对于超出的部分,CHS值通常设定为0xfeffff,并加以忽略,直接使用偏移0x08-0x0c的4字节相对值,再进行内部转换。)

3. 结束标志字

55 AA,偏移1feh-1ffh,最后2个字节,是检验MBR是否有效的标志。

4. 主引导扇区的读取流程

  • 系统开机或者重启。
    1. BIOS上电自检(Power On Self Test – POST)。BIOS执行内存地址为FFFF:0000H处的跳转指令,跳转到固化在ROM中的自检程序处,对系统硬件(包括内存)进行检查。
    2. 读取主引导记录(MBR)。当BIOS检查到硬件正常并与CMOS中的设置相符后,按照CMOS中对启动设备的设置顺序检测可用的启动设备。BIOS将相应启动设备的第一个扇区(也就是MBR扇区)读入内存地址为0000:7C00H处。
    3. 检查0000:7DFEH-0000:7DFFH(MBR的结束标志位)是否等于55AAH,若不等于则转去尝试其他启动设备,如果没有启动设备满足要求则显示"NO ROM BASIC"然后死机。
    4. 当检测到有启动设备满足要求后,BIOS将控制权交给相应启动设备。启动设备的MBR将自己复制到0000:0600H处,然后继续执行。
    5. 根据MBR中的引导代码启动引导程序。
  • 事实上,BIOS不仅检查0000:7DFEH-0000:7DFFH(MBR的结束标志位)是否等于55AAH,往往还对磁盘是否有写保护、主引导扇区中是否存在活动分区等进行检查。如果发现磁盘有写保护,则显示磁盘写保护出错信息;如果发现磁盘中不存在活动分区,则显示类似如下的信息“Remove disk or other media Press any key to restart”。