MBR分区结构、DPT分区表、EBR扩展引导

article/2025/8/27 12:40:31

本文链接:http://www.blogfshare.com/mbr-dpt-ebr.html

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

image

对应到我电脑第一个扇区:

image

启动代码

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

硬盘分区表

硬盘分区表占据主引导扇区的64个字节(偏移01BEH–偏移01FDH),可以对四个分区的信息进行描述,其中每个分区的信息占据16个字节。具体每个字节的定义可以参见硬盘分区结构信息

image

主引导记录的结构可以知道,它仅仅包含一个64个字节的硬盘分区表。由于每个分区信息需要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。

那么现在来对主引导扇区中的DPT来进行分析:

80 01 01 00 07 FE FF FF 3F 00  00 00 00 34 80 0C

80:表示该分区为活动分区

01 01 00:开始磁头/开始扇区和开始柱面

07 :文件系统标志位  07表示NTFS文件系统

FE FF FF :结束磁头/结束扇区和结束柱面

00 00 00 3F :分区起始的相对扇区号

0C 80 34 00:分区总的扇区数

后面三个表项的分析方法同上。

每一分区的第1至第3字节是该分区起始地址。其中第1字节为起始磁头号(面号);第2字节的低6位为起始扇区号,高2位则为起始柱面号的高2 位;第3字节为起始柱面号的低8位。因此,分区的起始柱面号是用10位二进制数表示的,最大值为2^10 = 1024,因逻辑柱面号从0开始计,故柱面号的显示最大值为1023。同理,用6位二进制数表示的扇区号不会超过2^6 – 1 = 63;用8位二进制数表示的磁头号不会超过2^8 – 1 = 255。每一分区的第5至第7字节表示分区的终止地址,各字节的释义与第1至第3字节相同。这里我们假设一种极端的情况:如果让第5至第7字节的所有二进制位都取1,就获得了柱面号、磁头号和扇区号所能表示的最大值,从而得到最大绝对扇区号为:

  1024 × 256 × 63 = 16,515,072

  这个扇区之前的所有物理扇区所包含的字节数为:

  16,515,072 × 512Bytes ≈ 8.46GB

由此可知硬盘的容量设计为什么会有8.4GB这一档,分区表每一分区的第1至第3字节以及第5至第7字节的数据结构已经不能满足大于 8.46GB的大容量硬盘的需要。考虑到向下兼容的需要,业界并未对从DOS时代就如此定义的硬盘分区表提出更改意见,否则改动所牵涉的面太广,会造成硬件和软件发展上的一个断层,几乎无法被业界和用户所接受。硬盘厂商解决这一问题的方法是定义了新的INT 13服务扩展标准。新的INT 13服务扩展标准不再使用操作系统的寄存器传递硬盘的寻址参数,而使用存储在操作系统内存里的地址包。地址包里保存的是64位LBA地址,如果硬盘支持 LBA寻址,就把低28位直接传递给ATA接口,如果不支持,操作系统就先把LBA地址转换为CHS地址,再传递给ATA接口。通过这种方式,能实现在 ATA总线基础上CHS寻址的最大容量是136.9 GB,而LBA寻址的最大容量是137.4GB。新的硬盘传输规范ATA 133规范又把28位可用的寄存器空间提高到48位,从而支持更大的硬盘。

  分区表每一分区的第8至第11字节表示该分区的起始相对扇区数(即该扇区之前的绝对扇区个数),高位在右,低位在左;第12至第15字节表示该分区实际占用的扇区数,也是高位在右,低位在左;分区表这类数据结构的表达方式与机器中数据的实际存储方式在顺序上是一致的,即低位在前,高位在后。因此,在从16进制向十进制作数值转换时,需将字段中的16进制数以字节为单位翻转调位,用4个字节可以表示最大2^32个扇区,即2TB=2048GB。

系统在分区时,各分区都不允许跨柱面,即均以柱面为单位,这就是通常所说的分区粒度。在未超过8.4GB的分区上,C/H/S的表示方法和扇区数的表示方法所表示的分区大小是一致的。超过8.4GB的/H/S/C一般填充为FEH/FFH/FFH,即C/H/S所能表示的最大值;有时候也会用柱面对 1024的模来填充。不过这几个字节是什么其实都无关紧要了。

从上面可以看到我电脑的DPT只有一个主分区和一个扩展分区。

主分区从63扇区开始,大小为209728512扇区。  约为100GB也就是我的C盘大小。

扩展分区从209728575扇区开始,大小为415408770扇区。 约为198GB也就是我后面两个盘的大小。

扩展分区中的每个逻辑驱动器都存在一个类似于MBR的扩展引导记录(Extended Boot Record,EBR)。

扩展引导记录包括一个扩展分区表和扇区结束标志55AA。一个逻辑驱动器中的引导扇区一般位于相对扇区32或63。如果磁盘上没有扩展分区,那么就不会有扩展引导记录和逻辑驱动器。第一个逻辑驱动器的扩展分区表中的第一项指向它自身的引导扇区;第二项指向下一个逻辑驱动器的EBR,如果不存在进一步的逻辑驱动器,第二项就不会使用,而被记录成一系列零。如果有附加的逻辑驱动器,那么第二个逻辑驱动器的扩展分区表的第一项会指向它本身的引导扇区,第二个逻辑驱动器的扩展分区表的第二项指向下一个逻辑驱动器的EBR。扩展分区表的第三项和第四项永远都不会被使用。

扩展分区表项中的相对扇区数是从扩展分区开始的扇区到该逻辑驱动器中第一个扇区的扇区数;占用的扇区数是指组成该逻辑驱动器的扇区数目。

有时候在磁盘的末尾会有剩余空间,由于分区是以1柱面的容量为分区粒度的,那么如果磁盘总空间不是整数个柱面的话,不够一个柱面的剩下的空间就是剩余空间了,这部分空间并不参与分区,所以一般无法利用。

我们来到扩展分区的EBR。

image

扩展分区第一项:起始相对63扇区,大小为207640062扇区。 约为99G我D盘的大小。

扩展分区第二项(指向下一个逻辑驱动器的EBR)起始相对207640125扇区,大小为207768645扇区。为我最后一个盘的大小。

再来到这个指向的这个逻辑驱动器的EBR。

image

只有一项:起始相对63扇区,大小为207768582扇区。约为99G我E盘的大小。

当然末尾还有一些剩余空间。625142448-625137345       2M多的剩余空间。

image

WinHex和我们分析出来的是一样的。

image

所以也可以自己写个程序来分析。

最后附上几个常见的分区类型。

image

 


http://chatgpt.dhexx.cn/article/6Xkh06NW.shtml

相关文章

C语言读取磁盘分区信息(MBR、DPT、EBR)

文章目录 简介使用的函数1.CreateFile()函数打开设备2.DeviceIoControl()函数返回磁盘设备信息3.SetFilePointer()函数设置读取磁盘信息位置4.ReadFile()函数读取磁盘内容 源代码结果分析MBR部分:第一个EBR的DPT内容为:第2个EBR内容 总结 简介 在win8以后…

使用Epoch-Based Reclamation(EBR,特定域回收的一种方法)修改 lazy-list

如前文所说,lazy-list最大的隐患莫过于逻辑删除,而没有物理删除问题,因此EBR首先就把这个问题给他solve了。 一.EBR修改部分 int parse_delete(intset_l_t *set, val_t val) {node_l_t *pred, *curr;int result, validated, isVal;while(1)…

淘宝电商搜索EBR算法笔记

淘宝电商搜索EBR算法笔记 - 知乎《Embedding-based Product Retrieval in Taobao Search》介绍了淘宝目前最新的EBR算法。仍然是一个双塔的结构,query/user一个塔,item一个塔,各自得到向量表示,然后计算内积。 网络结构如上图所示…

解决西门子ebr设备模块更新报错,EQP_STATEVALUE more than one row

问题排查报告 原文来至 问题跟踪 首先定位到EQP_STATEVALUE表,发现数据出现重复: 执行语句取出所有非重复数据: select t.stateid,t.fk_statelistcst,t.code,t.label,t.functionid,t.pk_id,t.dlu,t.dluunit,t.cpt,t.haseqpimpact from EQP…

机械臂关节模组制动相关(零差云控eBr)

目录 前言一、电磁插销式抱闸1.原理2.特点 二、电磁摩擦片式制动器1.原理2.特点 三、零差云控电磁摩擦片式制动器(eBreaker)1.简介2.使用说明需要注意的事情3.接线 总结参考文献 前言 现阶段机械臂的制动方法主要有两种,一种是电磁插销式抱闸…

西门子EBR与BATCH通讯方法,mes与batch交互

最新更新请访问:mesebr.com 链接 1 前期准备 1.1 网络检查 两台服务器防火墙全部关闭;两台服务器之间可以相互ping同,若batch服务器连接oracle数据库的连接名称写的机器名,则batch服务器ping机器名也要可以ping通; 1…

WinHex数据恢复笔记-数据恢复与硬件维护-MBR格式--MBR,EBR系统结构

MBR,EBR系统结构 MBR限制2TB,最多有4个逻辑分区—如果有扩展(3个主分区和1个扩展分区) FAT32不能在大于32GB的盘上添加 MBR指向第一个EBR 第一个EBR(以链表)指向第二个EBR(以链表)指向第二个EBR(以链表)… MBR MBR数据结构 4…

西门子MES软件ebr脚本使用说明-SIMATIC IT EBR(Opcenter Execution Pharma

最新更新发布在此处 ebr脚本常用函数 ###参数输入输出 输入的type选择tag value;输出的type选择tag NAME; 实例 mData.InsertData ousNAME,0,straaa 输出文本 mData.InsertData ousAGE,1,age 输出数字html直接输出 mRecordText.WriteHTML str_htmlr 可直接输出html内…

每周一文(六)Facebook EBR向量召回模型

契机 从样本和模型两方面来介绍向量级别召回模型的由来。提出很有建设性的工业级别的参考价值。 样本角度 有监督的二分类模型需要构建正负样本,正样本的选择不管是召回和排序来说都是一致的,即用户有显式的点击行为的样本为正样本。而对于召回模型(甚…

主引导记录(MBR)、硬盘分区表(DPT)、扩展引导记录(EBR)

前言 最近在研究使用grub引导自制操作系统时,发现grub链式引导过程中向boot传递的硬盘分区表表项数据有疑问,特此记录下。 一、主引导记录(MBR) MBR是存储在计算机硬盘的第一个物理扇区的512字节的数据块,它包含了引…

MES管理端介绍,ebr二次开发产品—SIMATIC IT EBR(Opcenter Execution Pharma)

原文来至:访问原文 西门子MES软件ebr功能很强大,但给用户若只想查看一些数据是非常不方便,对外接口提供的文档也不具体,所以我二次开发了EBR的管理端。 主要功能 权限管理物料管理工单管理族谱批记录查看报表与看板审计追踪记录 …

NTFS文件系统详解(二)MBR\EBR基本信息

NTFS文件系统详解(二)MBR\EBR基本信息 一、MBR结构分析1. 第一个分区表项2. 第二个分区表项3. 第三个分区表项4. 第四个分区表项 二、EBR结构分析1. 第一个分区表项2. 第二个分区表项2.1 第一个分区表项2.2 第二个分区表项2.3 第三个分区表项 NTFS文件系…

MBR、EBR与DBR详解

demo:https://github.com/Hilaver/NtfsResolution/ 先看一张硬盘图片(一个盘面): MBR 主引导记录(MBR,Main Boot Record)是位于磁盘最前边的一段引导(Loader)代码。它负…

MBR、EBR、DBR是什么

通常情况下可以这样描述这几个概念: MBR:为计算机启动后从可启动介质上首先装入内存并且执行的代码,通常用来解释分区结构。以硬盘为例,通常为LBA的0扇区。 EBR:自MICROSOFT推出扩展分区的概念后,扩展分区就沿用了基本…

NTFS文件系统详解(二)之MBR(EBR)基本信息

经过上一篇文章对硬盘的基本结构的详细介绍后,我们再来看看MBR和EBR的结构 MBR(Main Boot Record 主引导记录区)位于整个硬盘的0磁道0柱面1扇区。不过,在总共512字节的主引导扇区中,MBR只占用了其中的446个字节,另外的64个字节交给了 DPT(Disk Partition Table硬盘分区表…

EBR内容解析

原先博客放弃使用,几篇文章搬运过来 EBR(Extended Boot Record)即扩展分区引导记录.类似于主引导记录MBR.因为MBR的四条分区信息的限制,可以使用EBR方便扩展. 它的结构与MBR类似于,但是没有引导程序和磁盘签名,仅仅保留了分区表和结束标志. 下面以实例分析: 新建一个512MB虚拟…

C++中常见的几种输入字符串的方法

C中常见的几种输入字符串的方法_是赵薰薰呀的博客-CSDN博客_c输入字符串 可以用的函数 substr substr有2种用法: 假设:string s "0123456789"; string sub1 s.substr(5); //只有一个数字5表示从下标为5开始一直到结尾:sub1 &…

MATLAB-字符串

本节我们学习如何在MATLAB中创建一个字符串。 例如: my_string 搬砖工程师domi MATLAB执行上述语句,返回以下结果: my_string 搬砖工程师domi MATLAB 认为所有变量,数组和字符串被视为字符数组。 让我们使用命令检查上面创建…

c语言:动态输入字符串数组

考研题中经常会遇到给定一条英文句子,让我们对其每个单词进行操作,不同于对整型数据操作,字符串在c语言中必须存放到数组中,无形之中又给考题增加了难度 一般情况下,字符串数组都以二维数组或指针数组定义&#xff0c…

用scanf_s输入字符串

用的是vs2019。 为了安全,scanf_s输入字符串时需要加一个数字来限制最多读取的字符数。 错误示例: char* str[100]; scanf_s("%s",str);这样写编译器没有报错,但是运行会出错,debug显示 正确写法: char…