磁盘分区知识笔记

硬盘参数及重要概念

  • CHS(Cylinder/Head/Sector)定址模式:区块必须以硬盘上某个磁柱、磁头、扇区的硬件位置所合成的地址来指定。
    • C-Cylinder(柱面):柱面数表示硬盘每面盘片上有几条磁道,最大为1024(用10个二进制位储)
    • H-Head(磁头):磁头数表示硬盘总共有几个磁头,也就是几面盘片,最大为256(用8个二进制位存储)
    • S-Sector(扇区):扇区数表示每条磁道上有几个扇区,最大为63(用6个二进制位存储)
  • Track(磁道):当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道
  • LBA(Logical Block Address, 逻辑区块地址)定址模式,一般用在像硬盘这样的辅助记忆设备。
    CHS地址可用以下公式转成LBA:
      #lba=(#c*H+#h)*S+#s-1
    

磁盘分区格式

MBR分区格式

MBR:主引导记录(Master Boot Record),又叫做主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)=(0,0,1)。在深入讨论主引导扇区内部结构的时候,有时也将其开头的446字节内容特指为“主引导记录”(MBR),其后是4个16字节的“磁盘分区表”(DPT),以及2字节的结束标志(55AA)。因此,在使用“主引导记录”(MBR)这个术语的时候,需要根据具体情况判断其到底是指整个主引导扇区,还是主引导扇区的前446字节。(来自维基百科)
特点:

  • MBR支持32位和64位系统
  • MBR支持分区数量有限
  • MBR只支持不超过2T的硬盘,超过2T的硬盘将只能用2T空间(扇区为512字节的硬盘)

MBR分区表格式

硬盘MBR由5个部分组成:

  1. 偏移地址0000H–0088H:主引导程序,它负责从活动分区中装载,并运行系统引导程序。
  2. 偏移地址0089H–00E1H:出错信息数据区
  3. 00E2H–01BDH一般全为0。
  4. 偏移地址01BEH–01FDH:分区表(DPT,Disk Partition Table):含4个分区表项,每个分区表项长16个字节,共64字节(下面会详细介绍)
  5. 偏移地址01FEH–01FFH:结束标志字,2个字节值为结束标志“55 AA”。

分区类型:主分区、扩展分区、逻辑分区

主分区:一个硬盘的主分区也就是包含操作系统启动所必需的文件和数据的硬盘分区,要在硬盘上安装操作系统,则该硬盘必须得有一个主分区。
扩展分区也就是除主分区外的分区,但它 不能直接使用,必须再划分为若干个逻辑分区才能使用。
逻辑分区也就是我们平常在操作系统中所看到的D、E、F等盘。

使用MBR分区表的硬盘

        MBR格式磁盘
    /     /     \     \
   /     |      |      |
主分区1 主分区2 主分区3 主分区4

或者

        MBR格式磁盘
    /     /     \     \
   /     |      |      |
主分区1 主分区2 主分区3 扩展分区
                      / |  \
                     /  |   \
                    /   |    \
             逻辑分区1 逻辑分区2 逻辑分区3...

MBR分区表项

只有一个分区的磁盘MBR分布表如下图所示,

第一行红色框起来的部分为第一个分区的表项,可以分为以下6个部分:

(1) State(1 byte):分区状态,00=未激活,80=激活(表示该分区是系统盘,有boot loader引导程序);

(2) StartCHS(3 byte):分区起始磁头号(H), 起始扇区(S)和柱面号(C)。

(3) Type(1 byte):分区文件系统类型,如0x0B=FAT32,0x83=EXT2/3/4等,00表示此项未用;

(4) EndCHS(3 byte):分区结束磁头号;分区结束扇区和柱面号,定义同前;

(5) Relative(4 byte):在线性寻址方式下的分区相对扇区地址(对于基本分区即为绝对地址);

(6) Sectors(4 byte):分区总大小(总扇区数)。

最后MBR结束时框起来的第(7)部分为:

(7) 0x55AA(2 byte):MBR结束标志

注意上图中的每一段均以小端模式呈现。

主引导扇区读取过程:

系统开机或者重启:

  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,往往还对磁盘是否有写保护、主引导扇区中是否存在活动分区等进行检查。

GPT

GPT: GUID(Globals Unique Identifiers)Partition Table,全局唯一标识分区表,是一个较新的分区机制,解决了MBR很多缺点。使用128位UUID 表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位。
与的MBR磁盘分区的样式相比,GPT磁盘分区样式支持最大为128个分区,一个分区最大18 EB(Exabytes),只受到操作系统限制(由于分区表本身需要占用一定空间,最初规划硬盘分区时,留给分区表的空间决定了最多可以有多少个分区)。与MBR分区的磁盘不同,至关重要的平台操作数据位于分区,而不是位于非分区或隐藏扇区。另外,GPT分区磁盘有备份分区表来提高分区数据结构的完整性。在UEFI系统上,通常是通过ESP分区中的EFI应用程序文件引导GPT硬盘上的操作系统,而不是MBR代码。
特点:

  • 向后兼容MBR
  • 必须在支持UEFI的硬件上才能使用(Intel提出,用于取代BIOS)
  • 必须使用64位系统
  • Mac、Linux系统都能支持GPT分区格式
  • Windows 7/8 64bit、Windows Server 2008 64bit支持GPT
  • 为了减少分区表损坏的风险,GPT在硬盘最后保存了一份分区表的副本。

分区表头格式

分区表头定义了硬盘的可用空间以及组成分区表的项的大小和数量。在使用64位Windows Server 2003的机器上,最多可以创建128个分区,即分区表中保留了128个项,其中每个都是128字节。(EFI标准要求分区表最小要有16,384字节,即128个分区项的大小)

分区表头还记录了这块硬盘的GUID,记录了分区表头本身的位置和大小(位置总是在LBA 1)以及备份分区表头和分区表的位置和大小(在硬盘的最后)。它还储存着它本身和分区表的CRC32校验。固件、引导程序和操作系统在启动时可以根据这个校验值来判断分区表是否出错,如果出错了,可以使用软件从硬盘最后的备份GPT中恢复整个分区表,如果备份GPT也校验错误,硬盘将不可使用。所以GPT硬盘的分区表不可以直接使用16进制编辑器修改。

分区表项格式

GPT分区表使用简单而直接的方式表示分区。一个分区表项的前16字节是 分区类型GUID。例如,EFI系统分区的GUID类型是{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}。接下来的16字节是 该分区唯一的GUID(这个GUID指的是该分区本身,而之前的GUID指的是该分区的类型)。再接下来是分区起始和末尾的64位LBA编号,以及分区的名字和属性。