MBR详解

摘要:
我们通常对磁盘分区时,都会涉及到MBR和GPT。这时,使用MBR分区将不能满足要求,至于为什么不能满足,请看下文。磁盘的第1个扇区叫做MBR扇区,一共有512B,主要有3个部分,引导信息、分区表、结束标志。在一些非启动磁盘上,MBR引导代码可能都是0,这对磁盘使用没有任何影响。每次执行系统引导代码时都会检查MBR主引导扇区最后2字节是否是"55AA",若是,则继续执行后续的程序,否则,则认为这是一个无效的MBR引导扇区,停止引导系统。

我们通常对磁盘分区时,都会涉及到MBR和GPT。MBR和GPT都是磁盘分区的类型,由于以前的硬盘只有几个GB,几十个GB,几百个GB,使用MBR类型分区已经足够。但是近些年来,硬盘容量的发展速度迅速,已经达到2TB以上。这时,使用MBR分区将不能满足要求,至于为什么不能满足,请看下文。

我们可以使用WinHex打开一个磁盘,本磁盘共有4个分区,第1个是主分区,第二个是主分区(里面含有系统),第三个是逻辑分区,第四个是主分区。

MBR详解第1张

磁盘的第1个扇区叫做MBR扇区,一共有512B,主要有3个部分,引导信息、分区表、结束标志。

1. 引导信息

上图中0~0x1BD即为引导程序,占扇区前446字节。计算机在上电完成BIOS自检后,会将该主引导扇区加载到内存中并执行前面446字节的引导程序,引导程序首先会在分区表中查找活动分区,若存在活动分区,则根据活动分区的偏移量找到该活动分区上的引导扇区的地址,并将该引导扇区加载到内存中,同时检查该引导扇区的有效性,然后根据该引导扇区的规则去引导操作系统。在一些非启动磁盘上,MBR引导代码可能都是0,这对磁盘使用没有任何影响。

2.分区表

上图中0x1BE~0x1FD即为分区表,占扇区中间64字节。分区表是磁盘管理最重要的部分,通过分区表信息来定位各个分区,访问用户数据。分区表包含4个分区项,每一个分区项通过位置偏移、分区大小来唯一确定一个主分区或者扩展分区。每个分区项占16字节,包括引导标识、起始和结束位置的CHS参数、分区类型、开始扇区、分区大小等,具体描述如下表所示

字节位移占用字节数描述
0x01BE1Byte引导指示符,指明该分区是否是活动分区
0x01BF1Byte开始磁头
0x01C06Bit开始扇区,占用6位
0x01C110Bit开始柱面,占用10位,最大值1023
0x01C21Byte分区类型,NTFS位0x07
0x01C31Byte结束磁头
0x01C46Bit结束扇区,占用6位
0x01C510Bit介乎柱面,占用10位,最大值1023
0x01C64Byte相对扇区数,从此扇区到该分区的开始的扇区偏移量,以扇区为单位
0x01CA4Byte该分区的总扇区数

字节位移0x01BE:引导指示符,只能是0和0x80,0代表是非活动分区,0x80代表是活动分区。活动分区里包含着操作系统的入口扇区。

字节位移0x01BF~0x01C1:指明了该分区位于磁盘的物理位置。具体搜索C/H/S与LBA地址的对应关系。

字节位移0x01C2:文件系统格式

MBR详解第2张

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处。可看到如下界面。

MBR详解第3张

在此扇区的偏移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详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇AMD64 专业名词缩写体验评价--微软输入法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Ubuntu + Win7 双系统 重装win7后进入不了Ubuntu

机子上先有win7,然后装Ubuntu,装完Ubuntu后,开机进入Ub开机界面,里面有ubuntu,win7 loader(启动项),选择win7启动后就出现读盘错误. 天,我怎么能修复好这双系统启动呢? 答案: ~哦~这个问题呀,简单,开机进你的ubuntu 在shell下: sudo add-apt-repository ppa:yannub...

zabbix 启用分区表后需要关闭Housekeeper

<pre name="code" class="html">Zabbix Housekeeper changes: 使用分区表需要关闭zabbix的history/trends的housekeeper。 Zabbix 2.0.x: 关闭housekeeper需要变更zabbix_server.conf配置文件:DisableHousekeepi...

【转载】硬盘MBR详细介绍

原文地址:http://blog.chinaunix.net/uid-15007890-id-106892.html 硬盘MBR详细介绍      硬盘是现在计算机上最常用的存储器之一。我们都知道,计算机之所以神奇,是因为它具有高速分析处理数据的能力。而这些数据都以文件的形式存储在硬盘里。不过,计算机可不像人那么聪明。在读取相应的文件时,你必须要给出相应...

计算机是怎样启动的?

从打开电源到開始操作。计算机的启动是一个很复杂的过程。 我一直搞不清楚,这个过程究竟是怎么回事。仅仅看见屏幕高速滚动各种提示...... 这几天,我查了一些资料。试图搞懂它。以下就是我整理的笔记。 零、boot的含义 先问一个问题。"启动"用英语怎么说? 回答是boot。但是,boot原来的意思是靴子,"启动"与靴子有什么关系呢? 原来,这里的boo...

【ODPS】阿里云ODPS中带分区的表操作

1.创建分区表: 分区表有自己的分区列,而分区表则没有。 public static void createTableWithPartition(Odps odps, String createTableName) throws Exception { Tables tables = odps.tables();// /获取表示ODPS全部Ta...

(ORACLE)查看分区表的相关信息

ORACLE数据库如何查看分区表的相关信息呢?不知道你有没有总结过这方面的知识。下面我们先创建两个表TEST、 GPRS_CELLTOPVOL_WK来做实验,脚本如下: CREATE TABLE GPRS_CELLTOPVOL_WK (       DATE_CD                 NUMBER ( 8 ) NOT NULL    ...