MBR和GPT分区格式整理

2024-03-15 18:20
文章标签 整理 格式 分区 gpt mbr

本文主要是介绍MBR和GPT分区格式整理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简单地说,硬盘分区是就使用分区编辑器(partition editor)将一个硬盘上划分几个独立的逻辑部分,盘片一旦划分成数个分区,不同类的目录与文件可以存储进不同的分区。越多分区,也就有更多不同的地方,可以将文件的性质区分得更细,按照更为细分的性质,存储在不同的地方以管理文件。

机械硬盘原理

机械硬盘由坚硬金属材料制成的涂以磁性介质的盘片,盘片两面称为盘面或扇面,都可以记录信息,由磁头对盘面进行操作(如果你有坏的硬盘,可以动手拆开看。嗯?为什么用坏的?用好的可能费钱……)一般用磁头号区分。结构特性决定了机械硬盘如果受到剧烈冲击(摔在地上或是勤奋的你想拆开学习),磁头与盘面可能产生的哪怕是轻微撞击都有可能报废。

继续讲原理:假设磁头不动,硬盘旋转,那么磁头就会在磁盘表面画出一个圆形轨迹并将之磁化,数据就保存在这些磁化区中,称之为磁道,将每个磁道分段,一个弧段就是一个扇区。一个硬盘可以包含多个扇面,扇面同轴重叠放置,每个盘面磁道数相同,具有相同周长的磁道所形成的圆柱称之为柱面,柱面数与磁道数相等。如下图

图片1

 

了解了这些,我们就可以对最初的硬盘地址管理方式作一个原理层面的了解:

最初的寻址方式称为CHS,在LBA(Logical Block Address)概念诞生之前,由他负责管理磁盘地址。所谓CHS即柱面(cylinder),磁头(header),扇区(sector),通过这三个变量描述磁盘地址,需要明白的是,这里表示的已不是物理地址而是逻辑地址了。这种方法也称作是LARGE寻址方式。该方法下:

硬盘容量=磁头数×柱面数×扇区数×扇区大小(一般为512byte)。

后来,人们通过为每个扇区分配逻辑地址,以扇区为单位进行寻址,也就有了LBA寻址方式。但是为了保持与CHS模式的兼容,通过逻辑变换算法,可以转换为磁头/柱面/扇区三种参数来表示,和 LARGE寻址模式一样,这里的地址也是逻辑地址了。(固态硬盘的存储原理虽然与机械硬盘不同,采用的是flash存储,但仍然使用LBA进行管理,此处不再详述。)

科普到这里,我们可以试图去理解MBR分区了。现在我们来看看MBR分区的技术原理。

MBR原理

MBR:Master Boot Record,主分区引导记录。最早在1983年在IBM PC DOS 2.0中提出。前面说过,每个扇区/区块都被分配了一个逻辑块地址,即LBA,而引导扇区则是每个分区的第一扇区,而主引导扇区则是整个硬盘的第一扇区(主分区的第一个扇区)。MBR就保存在主引导扇区中。另外,这个扇区里还包含了硬盘分区表DPT(Disk Partition Table),和结束标志字(Magic number)。扇区总计512字节,MBR占446字节(0000H - 01BDH),DPT占据64个字节(01BEH - 01FDH),最后的magic number占2字节(01FEH – 01FFH)。

图片二

现在,我们来看一个MBR记录的实例:

00000000 fa b8 00 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |................|
00000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00 |...|.........!..|
00000020 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75 |....8.u........u|
00000030 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 01 8b |.........|...t..|
00000040 4c 02 cd 13 ea 00 7c 00 00 eb fe 00 00 00 00 00 |L.....|.........|
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001b0 00 00 00 00 00 00 00 00 b3 b0 6d b3 00 00 00 20 |..........m.... |
000001c0 21 00 83 66 25 01 00 08 00 00 00 50 00 00 00 66 |!..f%......P...f|
000001d0 26 01 83 d2 0f 03 00 58 00 00 00 98 00 00 00 d2 |&......X........|
000001e0 10 03 83 f0 27 09 00 f0 00 00 00 80 01 00 00 f0 |....'...........|
000001f0 28 09 05 50 bf 01 00 70 02 00 b0 d4 ef 1b 55 aa |(..P...p......U.|
00000200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000800

对应的fdisk -l信息

Disk /dev/sdb: 223.6 GiB, 240057409536 bytes, 468862128 sectors
Disk model: KINGSTON SA400S3
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xb36db0b3   
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 22527 20480 10M 83 Linux
/dev/sdb2 22528 61439 38912 19M 83 Linux
/dev/sdb3 61440 159743 98304 48M 83 Linux
/dev/sdb4 159744 468862127 468702384 223.5G 5 Extended

MBR分区表占64字节,最多可以分4个主分区,每个分区表信息占16个字节,以第一个分区表为例进行解释。

地址

含义

0x1be引导提示符
0x1bf开始磁头
0x1c0 0x1c1开始扇区6bit   开始柱面10bit
0x1c2分区类型
0x1c3结束磁头
0x1c5 0x1c4结束扇区6bit   结束柱面
0x1c6——0x1c9分区开始扇区
0x1ca——0x1cd此分区占用扇区总数

使用中最关心的是分区开始的扇区,以红字标出。
0x1be:00 20 21 00 83 66 25 01 00 08 00 00 00 50 00 00从0x1be开始是分区信息,单独摘抄出来

开始扇区数:0x800    扇区总数:0x5000      分配空间:10MB

0x1ce:00 66 26 01 83 d2 0f 03 00 58 00 00 00 98 00 00

开始扇区数:0x5800    扇区总数:0x9800      分配空间:19MB

0x1de:00 d2 10 03 83 f0 27 09 00 f0 00 00 00 80 01 00

开始扇区数:0xf000    扇区总数:0x18000      分配空间:48MB

0x1ee:00 f0 28 09 05 50 bf 01 00 70 02 00 b0 d4 ef 1b

开始扇区数:0x27000    扇区总数:0x1befd4b0      分配空间:223.5G

由于MBR分区扇区总数最大4字节,16位,所以做多支持2T的硬盘。

 

GPT原理

GUID分区表(简称GPT,使用GUID分区表的磁盘称为GPT磁盘)是源自EFI标准的一种较新的磁盘分区表结构的标准。与目前普遍使用的主引导记录(MBR)分区方案相比,GPT提供了更加灵活的磁盘分区机制。它具有如下优点:

1、支持2TB以上的大硬盘。

2、每个磁盘的分区个数几乎没有限制(Windows系统最多只允许划分128个分区)。

3、分区大小几乎没有限制。又是一个“几乎”。因为它用64位的整数表示扇区号,即  = 18,446,744,073,709,551,616。

4、分区表自带备份。在磁盘的首尾部分分别保存了一份相同的分区表,其中一份被破坏后,可以通过另一份恢复;

5、循环冗余检验值针对关键数据结构而计算,提高了数据崩溃的检测几率;

6、GPT使用一个16字节的全局唯一标识符(GUID)值来标识分区类型,这使分区类型更不容易冲突;

GPT分区表的结构:

图片3

 

fdisk -l信息:

Disk /dev/sdb: 223.6 GiB, 240057409536 bytes, 468862128 sectors
Disk model: KINGSTON SA400S3
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: F6A7DF32-3C2E-44FB-99AB-F7395A9F5DB2

Device Start End Sectors Size Type
/dev/sdb1 2048 100351 98304 48M Linux filesystem
/dev/sdb2 100352 294911 194560 95M Linux filesystem
/dev/sdb3 294912 1075199 780288 381M Linux filesystem
/dev/sdb4 1075200 468862094 467786895 223.1G Linux filesystem

分区头部信息:

00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001c0 02 00 ee ff ff ff 01 00 00 00 af 44 f2 1b 00 00 |...........D....|
000001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|

00000200 45 46 49 20 50 41 52 54 00 00 01 00 5c 00 00 00 |EFI PART....\...|
00000210 90 e4 e4 f8 00 00 00 00 01 00 00 00 00 00 00 00 |................|
00000220 af 44 f2 1b 00 00 00 00 22 00 00 00 00 00 00 00 |.D......".......|
00000230 8e 44 f2 1b 00 00 00 00 32 df a7 f6 2e 3c fb 44 |.D......2....<.D|
00000240 99 ab f7 39 5a 9f 5d b2 02 00 00 00 00 00 00 00 |...9Z.].........|
00000250 80 00 00 00 80 00 00 00 f3 b4 48 26 00 00 00 00 |..........H&....|
00000260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000400 af 3d c6 0f 83 84 72 47 8e 79 3d 69 d8 47 7d e4 |.=....rG.y=i.G}.|
00000410 ef fd 0d 28 96 cb 45 cb 86 db 83 c6 43 cb 08 a4 |...(..E.....C...|
00000420 00 08 00 00 00 00 00 00 ff 87 01 00 00 00 00 00 |................|
00000430 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000480 af 3d c6 0f 83 84 72 47 8e 79 3d 69 d8 47 7d e4 |.=....rG.y=i.G}.|
00000490 8d 16 11 f0 26 06 47 2c b6 87 77 69 1b 4b 49 a7 |....&.G,..wi.KI.|
000004a0 00 88 01 00 00 00 00 00 ff 7f 04 00 00 00 00 00 |................|
000004b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000500 af 3d c6 0f 83 84 72 47 8e 79 3d 69 d8 47 7d e4 |.=....rG.y=i.G}.|
00000510 9d f6 3e 73 f2 c4 43 92 81 9e 8b a9 21 b1 c4 17 |..>s..C.....!...|
00000520 00 80 04 00 00 00 00 00 ff 67 10 00 00 00 00 00 |.........g......|
00000530 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000580 af 3d c6 0f 83 84 72 47 8e 79 3d 69 d8 47 7d e4 |.=....rG.y=i.G}.|
00000590 73 3f 20 7c 6a f1 41 64 a4 b4 52 b9 2f f6 b0 93 |s? |j.Ad..R./...|
000005a0 00 68 10 00 00 00 00 00 8e 44 f2 1b 00 00 00 00 |.h.......D......|
000005b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
0000c800

每个LBA占一个扇区,512bytes

LBA0:在GPT分区表的最开头,处于兼容性考虑仍然存储了一份传统的MBR(LBA 0),这个MBR叫做保护性MBR(Protective MBR)。

LBA1:分区表头

起始字节

占用长度(bytes)

内容

0x08签名("EFI PART")
0x84修订
0xc4分区表头的大小
0x104分区表头(92个字节)的CRC32校验,在计算时,先把这个字段写作0处理,然后计算出所有分区表项的CRC32校验后再计算这个CRC32
0x144保留,必须是 0
0x188当前LBA(这个分区表头的位置)
0x208备份LBA(另一个分区表头的位置)
0x288第一个可用于分区的扇区
0x308最后一个可用于分区的扇区
0x3816硬盘GUID Disk identifier
0x488分区表起始扇区LBA
0x504

分区表项的数量(windows是128,没有这么多也先占着空间)

0x544

一个分区表项的大小(通常是128)

0x584分区表项的CRC32校验(计算的是所有分区表项的检验和即128*128字节)
0x5c420保留

LBA2——LBA34

00000400 af 3d c6 0f 83 84 72 47 8e 79 3d 69 d8 47 7d e4 |.=....rG.y=i.G}.|
00000410 ef fd 0d 28 96 cb 45 cb 86 db 83 c6 43 cb 08 a4 |...(..E.....C...|
00000420 00 08 00 00 00 00 00 00 ff 87 01 00 00 00 00 00 |................|
00000430 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|

简单解释:分区起始0x800 分区结束0x187ff 分区大小=48MB,以此类推

在GPT分区的磁盘上,最后的34个扇区也会保存LBA信息。

这篇关于MBR和GPT分区格式整理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/812847

相关文章

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

python dict转换成json格式的实现

《pythondict转换成json格式的实现》本文主要介绍了pythondict转换成json格式的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下... 一开始你变成字典格式data = [ { 'a' : 1, 'b' : 2, 'c编程' : 3,

Mysql中深分页的五种常用方法整理

《Mysql中深分页的五种常用方法整理》在数据量非常大的情况下,深分页查询则变得很常见,这篇文章为大家整理了5个常用的方法,文中的示例代码讲解详细,大家可以根据自己的需求进行选择... 目录方案一:延迟关联 (Deferred Join)方案二:有序唯一键分页 (Cursor-based Paginatio

Python中Windows和macOS文件路径格式不一致的解决方法

《Python中Windows和macOS文件路径格式不一致的解决方法》在Python中,Windows和macOS的文件路径字符串格式不一致主要体现在路径分隔符上,这种差异可能导致跨平台代码在处理文... 目录方法 1:使用 os.path 模块方法 2:使用 pathlib 模块(推荐)方法 3:统一使

Java中使用注解校验手机号格式的详细指南

《Java中使用注解校验手机号格式的详细指南》在现代的Web应用开发中,数据校验是一个非常重要的环节,本文将详细介绍如何在Java中使用注解对手机号格式进行校验,感兴趣的小伙伴可以了解下... 目录1. 引言2. 数据校验的重要性3. Java中的数据校验框架4. 使用注解校验手机号格式4.1 @NotBl

Python批量调整Word文档中的字体、段落间距及格式

《Python批量调整Word文档中的字体、段落间距及格式》这篇文章主要为大家详细介绍了如何使用Python的docx库来批量处理Word文档,包括设置首行缩进、字体、字号、行间距、段落对齐方式等,需... 目录关键代码一级标题设置  正文设置完整代码运行结果最近关于批处理格式的问题我查了很多资料,但是都没

Mysql中InnoDB与MyISAM索引差异详解(最新整理)

《Mysql中InnoDB与MyISAM索引差异详解(最新整理)》InnoDB和MyISAM在索引实现和特性上有差异,包括聚集索引、非聚集索引、事务支持、并发控制、覆盖索引、主键约束、外键支持和物理存... 目录1. 索引类型与数据存储方式InnoDBMyISAM2. 事务与并发控制InnoDBMyISAM

StarRocks索引详解(最新整理)

《StarRocks索引详解(最新整理)》StarRocks支持多种索引类型,包括主键索引、前缀索引、Bitmap索引和Bloomfilter索引,这些索引类型适用于不同场景,如唯一性约束、减少索引空... 目录1. 主键索引(Primary Key Index)2. 前缀索引(Prefix Index /