MBR详解
我们通常对磁盘分区时,都会涉及到MBR和GPT。MBR和GPT都是磁盘分区的类型,由于以前的硬盘只有几个GB,几十个GB,几百个GB,使用MBR类型分区已经足够。但是近些年来,硬盘容量的发展速度迅速,已经达到2TB以上。这时,使用MBR分区将不能满足要求,至于为什么不能满足,请看下文。
我们可以使用WinHex打开一个磁盘,本磁盘共有4个分区,第1个是主分区,第二个是主分区(里面含有系统),第三个是逻辑分区,第四个是主分区。

磁盘的第1个扇区叫做MBR扇区,一共有512B,主要有3个部分,引导信息、分区表、结束标志。
1. 引导信息
上图中0~0x1BD即为引导程序,占扇区前446字节。计算机在上电完成BIOS自检后,会将该主引导扇区加载到内存中并执行前面446字节的引导程序,引导程序首先会在分区表中查找活动分区,若存在活动分区,则根据活动分区的偏移量找到该活动分区上的引导扇区的地址,并将该引导扇区加载到内存中,同时检查该引导扇区的有效性,然后根据该引导扇区的规则去引导操作系统。在一些非启动磁盘上,MBR引导代码可能都是0,这对磁盘使用没有任何影响。
2.分区表
上图中0x1BE~0x1FD即为分区表,占扇区中间64字节。分区表是磁盘管理最重要的部分,通过分区表信息来定位各个分区,访问用户数据。分区表包含4个分区项,每一个分区项通过位置偏移、分区大小来唯一确定一个主分区或者扩展分区。每个分区项占16字节,包括引导标识、起始和结束位置的CHS参数、分区类型、开始扇区、分区大小等,具体描述如下表所示
| 字节位移 | 占用字节数 | 描述 |
| 0x01BE | 1Byte | 引导指示符,指明该分区是否是活动分区 |
| 0x01BF | 1Byte | 开始磁头 |
| 0x01C0 | 6Bit | 开始扇区,占用6位 |
| 0x01C1 | 10Bit | 开始柱面,占用10位,最大值1023 |
| 0x01C2 | 1Byte | 分区类型,NTFS位0x07 |
| 0x01C3 | 1Byte | 结束磁头 |
| 0x01C4 | 6Bit | 结束扇区,占用6位 |
| 0x01C5 | 10Bit | 介乎柱面,占用10位,最大值1023 |
| 0x01C6 | 4Byte | 相对扇区数,从此扇区到该分区的开始的扇区偏移量,以扇区为单位 |
| 0x01CA | 4Byte | 该分区的总扇区数 |
字节位移0x01BE:引导指示符,只能是0和0x80,0代表是非活动分区,0x80代表是活动分区。活动分区里包含着操作系统的入口扇区。
字节位移0x01BF~0x01C1:指明了该分区位于磁盘的物理位置。具体搜索C/H/S与LBA地址的对应关系。
字节位移0x01C2:文件系统格式

3.结束标志
上图中最后的"55 AA"即为结束标志,或者称魔数,占扇区最后2字节。每次执行系统引导代码时都会检查MBR主引导扇区最后2字节是否是"55 AA",若是,则继续执行后续的程序,否则,则认为这是一个无效的MBR引导扇区,停止引导系统。
按照上面的描述,可以看出磁盘的状态。
第一个分区表信息:0x00,0x01,0x02,0x00,0x07,0xFE,0xFF,0xFF,0x40,0x00,0x00,0x00,0xAB,0xB3,0x0F,0x23
可得出此分区为非活跃分区,文件系统格式为NTFS(0x07),此分区开始扇区为(0x00(当前扇区)+0x00000040) ,总扇区数为(0x230FB3AB) ,总容量=(0x230FB3AB*512)/1024/1024/1024GB=280.49GB
第二个分区表信息:0x80,0xFE,0xFF,0xFF,0x07,0xFE,0xFF,0xFF,0x30,0xB4,0x0F,0x23,0x91,0xA3,0x40,0x06
可得出此分区为活跃分区,文件系统格式为NTFS(0x07),此分区开始扇区为(0x00(当前扇区)+0x230FB430) ,总扇区数为(0x0640A391), 总容量=(0x0640A391*512)/1024/1024/1024GB=50.02GB
第三个分区表信息:0x00,0xFE,0xFF,0xFF,0x0F,0xFE,0xFF,0xFF,0xC1,0x57,0x50,0x29,0x3F,0x00,0x80,0x3E
可得出此分区为非活跃分区,文件系统格式为扩展分区(0x0F),此分区开始扇区为(0x00(当前扇区)+0x295057C1),总扇区数为(0x3E80003F),总容量=(0x3E80003F*512)/1024/1024/1024GB=500.00GB
第四个分区表信息:0x00,0xFE,0xFF,0xFF,0x07,0xFE,0xFF,0xFF,0x00,0x58,0xD0,0x67,0x00,0x00,0xA0,0x0C
可得出此分区为非活跃分区,文件系统格式为NTFS(0x07),此分区开始扇区为(0x00(当前扇区)+0x67D05800),总扇区数为(0x0CA00000) ,总容量=(0x0CA00000*512)/1024/1024/1024GB=101.00GB
对于第三个分区是扩展分区,再进一步研究。我们同WinHEX跳转到此分区的开始扇区0x295057C1处。可看到如下界面。

在此扇区的偏移0x1BE处又有向MBR类似的分区表信息,规则与MBR规则一样,只是此处分区表的分区类型不同,我们叫做逻辑分区。
第一个分区表信息:0x00,0xFE,0xFF,0xFF,0x07,0xFE,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x80,0x3E
可得出此分区为非活跃分区,文件系统格式为NTFS(0x07),此分区开始扇区为(0x295057C1(当前扇区)+0x0000003F),总扇区数为(0x3E800000) ,总容量=(0x3E800000*512)/1024/1024/1024GB=500.00GB
疑问:按照上面每个分区的范围,MBR后面为什么保留了0x40个扇区?扩展分区扇区到逻辑分区扇区也保留了0x40个扇区?
MBR详解的更多相关文章
- 【转载】 硬盘主引导记录(MBR)及其结构详解
硬盘的0柱面.0磁头.1扇区称为主引导扇区,FDISK程序写到该扇区的内容称为主引导记录(MBR).该记录占用512个字节,它用于硬盘启动时将系统控制权交给用户指定的,并在分区表中登记了的某个操作系统 ...
- Windows磁盘MBR结构详解
在之前的文章 Windows存储管理之磁盘结构详解 中介绍了Windows的磁盘结构和MBR.本文将对Windows Basic Disk中的MBR的结构进行介绍,帮助读者更好的了解Windows系统 ...
- Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)
启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...
- Linux启动过程详解
Linux启动过程详解 附上两张图,加深记忆 图1: 图2: 第一张图比较简洁明了,下面对第一张图的步骤进行详解: 加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的 ...
- Linux 下的dd命令使用详解(摘录)
一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: 1. ...
- linux dd命令实用详解
linux dd命令刻录启动U盘详解 dd命令做usb启动盘十分方便,只须:sudo dd if=xxx.iso of=/dev/sdb bs=1M 用以上命令前必须卸载u盘,sdb是你的u盘,bs= ...
- dd命令使用详解
dd命令使用详解 http://www.cnblogs.com/qq78292959/archive/2012/02/23/2364760.html 1.命令简介 dd 的主要选项: 指定数字的地方若 ...
- linux dd命令参数及用法详解---用指定大小的块拷贝一个文件(也可整盘备份)
linux dd命令参数及用法详解---用指定大小的块拷贝一个文件 日期:2010-06-14 点击:3830 来源: 未知 分享至: linux dd命令使用详解 dd 的主要 ...
- Linux的启动流程以及GRUB详解
一.Linux引导和启动流程 概述,计算机电源接通后通过BISO之后,没有问题,就会去硬盘上找到MBR(Main Boot Record 主引导记录区)位于整个硬盘的0磁道0柱面1扇区, ...
随机推荐
- PAT 乙级 1061. 判断题(15)
判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分. 输入格式: 输入在第一行给出两个不超过100的正整数N和M,分别是学生人数和判断题数量.第二行给出M个不超过5的正 ...
- 【Python】利用正则解析xml练习题
{ "date": "18-03-29 06:04:47", "data": { "deviceType": 1, &q ...
- elasticsearch index tuning
一.扩容 tag_server当前使用ElasticSearch版本为5.6,此版本单个index的分片是固定的,一旦创建后不能更改. 1.扩容方法1,不适 ES6.1支持split index功能, ...
- 使用matlab和ISE 创建并仿真ROM IP核
前言 本人想使用简单的中值滤波进行verilog相关算法的硬件实现,由于HDL设计软件不能直接处理图像,大部分过程都是可以将图像按照一定的顺序保存到TXT文档中,经过Modelsim仿真后,处理的数据 ...
- Mysql/Mariadb配置日志
1. 创建日志存放目录: mkdir /var/log/mysql && chown mysql:mysql /var/log/mysql 2.修改Mysql配置日志: vi /etc ...
- 陕西师范第七届I题----排队
链接:https://www.nowcoder.com/acm/contest/121/I来源:牛客网 题目描述 ACM竞赛队内要开运动会啦!!!! 竞赛队内的一群阳光乐观积极的队员们迅速的在操场上站 ...
- vue 移动端的一些ui
https://www.jianshu.com/p/b79b3b721cd5 Vant. YDUI. Vonic. buefy (bluma的ui) Vux
- JPI中常使用的类介绍:
Math类: java.lang包下的 final,不可被继承, 其中的方法和属性都是静态的 其构造方法私有化了,其他类不可以使用构造方法. 向上取整:Math.ceil(double d); 向下取 ...
- c# 自定义log4net过滤器
有时候为了实现自己想要的多个日志文件记录不同的内容,可能需要自定义log4net过滤器,比如我这里需要记录三个文件,这三个文件的内容又不能重复,多次尝试未果. 为了不更改任何现有日志代码的情况下,于是 ...
- itcast-spring
黑马2014 spring后期 ssh整合后期 讲解不清楚 源码讲解太多 spring重新开始 itcast2016版本 介绍 Spring搭建 约束引入注意事项 导入至eclipse:wi ...