以下内容源于网络资源的学习与整理,如有侵权请告知删除。
参考内容
(1)S5PV210 Uboot开发与移植01:Uboot概述_麦兜的学习笔记的博客-CSDN博客
(2)Linux系统下的硬盘分区、格式化与挂载_天糊土的博客-CSDN博客
(3)硬盘分区、寻址和系统启动过程 - 走看看
(4)硬盘基础知识_Forskamse的博客-CSDN博客
(5)MBR分区表详解_zt_xcyk的博客-CSDN博客_mbr分区
(6)硬盘主引导记录(MBR)及其结构详解 - 百度文库
(7)硬盘主引导扇区详解
(8)用winhex查看mbr分区 - 摩斯电码 - 博客园
(9)在window和linux下如何对sd卡或者u盘分区、删除分区等操作
前言
(1)关于磁盘分区的基本知识见参考内容(2),这里主要讲分区表。
(2)一块全新的硬盘,必须进行初始分区。这里的初始分区是指只对磁盘进行分区,还没有对分区进行格式化(没有指定这块硬盘的某个分区采用哪种文件系统)。广义上的分区操作,包括初始分区与格式化。
(3)初始分区分为MBR分区、GPT分区这两种方法,对应着MBR分区表和GPT分区表。这里主要讲MBR分区表。
一、主引导扇区的组成
一般而言,磁道0中的第1个扇区(扇区编号是从1开始的?见参考内容(3))是主引导扇区,在PC上BIOS会读取该扇区,并将控制权转交给这个扇区上的MBR(很多教材中以MBR指代主引导扇区,需要根据上下文区分)。
主引导扇区由三个部分组成:主引导记录(MBR,Master Boot Record)、硬盘分区表(DPT,Disk Partition Table)、引导记录标志(或者说结束标志)(BRID,Boot Record ID)。
主引导扇区大小是512字节,其中MBR占据446个字节,DPT占据64字节,BRID占据两个字节。
部分 | 位置(hex) | 大小(bytes) | 描述 |
MBR部分 | 000~161 | 354bytes | MBR代码区域 |
162~1BD | 92bytes | MBR数据区域 | |
DPT部分 | 1BE~1CD | 16bytes | 分区表1 |
1CE~1DD | 16bytes | 分区表2 | |
1DE~1ED | 16bytes | 分区表3 | |
1EE~1FD | 16bytes | 分区表4 | |
BRID部分 | 1FE~1FF | 2bytes | 结束标志,必须是55AA |
二、获取主引导扇区数据
1、软件下载
可以利用winhex软件获取硬盘的数据,下载链接。
2、软件使用
比如查看我的U盘的主引导扇区的数据,步骤如下。
(1)以管理员方式打开winhex软件,在菜单栏中选择工具,然后选择打开磁盘。
(2)窗口内容如下图,从中可以获知整个硬盘的数据。
或者,如果要查看某部分的内容,选中该部分然后双击即可,比如查看主引导扇区内容,双击“起始扇区”即可。
或者,选中某个部分,然后在ANSI ASCII区域下拉菜单中选择“分区表(模板)”,可以获取该部分一些信息。
三、硬盘分区表的简介
1、16字节含义
硬盘分区表由4个分区的信息组成,每个分区用16字节描述,共4*16=64字节。
每个分区的16字节表示的含义如下:
字节编号 | 描述 |
第1字节 | 表示分区状态,80H表示活动分区,00H表示非活动分区 |
第2、3、4字节 | 表示本分区的起始磁头号、扇区号、柱面号,其中: 磁头号——第2字节; 扇区号——第3字节的低6位; 柱面号——为第3字节高2位+第4字节8位。 |
第5字节 | 表示文件系统类型,其中: 00H——该分区没有指定; 06H——FAT16基本分区; 0BH——FAT32基本分区; 05H——扩展分区; 07H——NTFS分区; 0FH——(LBA模式)扩展分区; 83H——Linux分区。 |
第6、7、8字节 | 表示本分区的结束磁头号、扇区号、柱面号,其中: 磁头号——第6字节; 扇区号——第7字节的低6位; 柱面号——第7字节的高2位+第8字节8位。 |
第9、10、11、12字节 | 本分区的逻辑起始扇区号 ,或者说本分区之前已用的扇区数,或者说本分区起始逻辑扇区号与逻辑0扇区号之差 |
第13、14、15、16字节 | 本分区总的扇区数。由此可以看出,总的扇区数用4个字节表示,所以最多有2的32次方个扇区,每个扇区512字节,则每个分区最大是2TB。 |
2、例子说明
(1)U盘只有一个分区时
利用winhex软件查询我的U盘,显示如下:
可知该U盘只有一个分区,分区信息是“00 20 21 00 0C FE FF FF 00 08 00 00 00 30 CA 01”,表示的含义如下:
00,表示这个分区是非活动分区,系统不会从这个分区启动。
20 21 00,其中(20)16=(0010 0000)2=(32)10,(21)16=(0010 0001)2=(33)10,(10 0001)2=(33)10,(00 0000 0000)2=(0)10,表示这个分区的起始扇区是(磁头32,柱面0,扇区33)。
0C,表示fat32文件系统。
FE FF FF,其中(FE)16=(1111 1110)2=(254)10 、(FF)16=(1111 1111)2、(11 1111)2=(63)10,(11 1111 1111)2=(1023)10,表示这个分区的结束扇区是(磁头254,柱面1023,扇区63)。
00 08 00 00,反向是00 00 08 00,转为十进制是2048,表示该分区前面已经有2048个扇区。
00 30 CA 01,反向是01 CA 30 00,转为十进制是30027776,表示该分区共有30027776个扇区,即(磁头32,柱面0,扇区33)至(磁头254,柱面1023,扇区63)共有30027776个扇区。
1个扇区512字节,所以该分区大小为30027776*512/1024/1024/1024=15G。
(2)U盘有几个分区时
假如将我的U盘分成以下4个分区(分区方法见参考内容9):
我们利用winhex来看一下该U盘的主引导扇区的数据。
第一个分区表的信息是“80 20 21 00 07 35 70 05 00 08 00 00 00 00 40 00”,表示含义如下:
80,表示这个分区是活动分区,系统将从这个分区启动。
20 21 00,(20)16=(32)10,(21)16=(0010 0001)2,(10 0001)2=(33)10,(00 0000 0000)2=(0)10,表示这个分区的起始扇区是(磁头号32,扇区33,柱面0)。
07,表示这个分区的文件系统类型是NTFS分区。
35 70 05 ,(35)16=(53)10,(70)16=(0111 0000)2,(11 0000)2=(48)10,(01 0000 0101)2=(261)10,表示这个分区的结束扇区是(磁头号53,扇区48,柱面261)。
00 08 00 00,反过来是00 00 08 00,转化为十进制是2048,表示本分区起始的扇区号是2048。
00 00 40 00,反过来是00 40 00 00,转为十进制是4194304,表示本分区总共有4194304个扇区。一个扇区是512字节,所以本分区大小是4194304*512/1024/1024/1024=2GB,与上面相符。
同理分析第二分区表的信息“00 35 71 05 07 60 D1 0F 00 08 40 00 00 00 80 00”可得:
下面分析第三个分区表信息“00 60 D2 0F 0F FE FF FF 00 08 C0 00 00 30 0A 01”
00,表示这个分区是非活动分区。
60 D2 0F,(60)16=(96)10,(D2)16=(1101 0010)2, (01 0010)2=(18)10,(11 0000 1111)2=(783)10,这表示本分区的起始扇区是(磁头号96,扇区号18,柱面号783)。
0F,表示这个分区是扩展分区。
FE FF FF,(FE)16=(254)10,(FF)16=(1111 1111)2,(11 1111)2=(63)10,(11 1111 1111)2=(1023)10,这表示这个扩展分区的结束扇区是(磁头号254,扇区号63,柱面号1023)。
00 08 C0 00,反过来是00 C0 08 00,转为十进制是12584960,表示这个扩展分区的起始扇区号是12584960。
00 30 0A 01,反过来是01 0A 3000,转为十进制是17444864,表示这个扩展分区共有17444864个扇区,则这个扩展分区的大小是17444864*512/1024/1024/1024=8G。
扩展分区又可以划分为许多分区,比如我的U盘就分为了G区与F区。
扩展分区表中的信息,尤其是“起始扇区号”,犹如一个指针,指向(由逻辑分区所组成的磁盘的第一个扇区)“主引导扇区”,这个“主引导扇区”又包含着64字节的分区表,每16个字节表示一个逻辑分区的信息。其中某个逻辑分区又可以用作扩展分区,指向另一个“主引导扇区”,这样就形成了分区链,可以划分许多分区。
上面写到,扩展分区的起始的扇区号是12584960,偏移量是12584960*512=(180100000)16=(6443499520)10,我们在winhex中转到这个位置,如下。
分析其中一个分区表信息“00 20 21 00 07 60 D1 0F 00 08 00 00 00 00 C0 00”,如下:
00,表示这个分区是非活动分区。
20 21 00,(20)16=(32)10,(21)16=(0010 0001)2,(10 0001)2=(33)10,(00 0000 0000)2=(0)10,这表示这个分区的起始扇区是(磁头号32,扇区号33,柱面号0)。
07,表示这个分区的文件系统类型是NTFS。
60 D1 0F,(60)16=(96)10,(D1)16=(1101 0001)2,(01 0001)2=(17)10,(11 0000 1111)2=(783)10,这表示这个分区的结束扇区是(磁头好96,扇区号17,柱面号783)。
00 08 00 00,反过来是00 00 08 00,转为十进制是2048,这表示这个分区的起始逻辑扇区号是2048。
00 00 C0 00,反过来是00 C0 00 00,转为十进制是12582912,这表示这个分区总共有12582912个扇区,则这个分区的大小是12582912*512/1024/1024/1024=6G。可见,与U盘的G区的大小是一样的。