分区表 MBR| 学习笔记

简介: 快速学习分区表 MBR

开发者学堂课程【Linux 磁盘与文件系统管理:分区表 MBR 】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/589/detail/8326


分区表 MBR


内容介绍:

一、MBR 磁盘分区

二、GPT 磁盘分区

三、实验:MBR 主分区表的备份与还原

 

一、MBR 硬盘分区

磁盘分区包括 MBR 与 MPT 两种,MBR 分区,又叫主引导记录分区,其组织空间结构包括:

 图片1分区表.png

 

硬盘0扇区 MBR:MBR 分区信息存放位置,该分区结构图的第一模块整体表示该硬盘,体现了该硬盘总的存储空间大小。该模块中将该磁盘分为了若干个分区,包括主分区(分区1、分区2、分区3)以及扩展分区,主分区前方还有一个0号扇区 MBR,它储存着磁盘的分区信息。

1. 0扇区:

位于硬盘分区的最前面,是整个磁盘的第一个扇区,也是第一个柱面、磁道,显示整个磁盘划分若干分区的分区表信息。硬盘0扇区的空间大小为512字节,在该0扇区中再分为3部分,借此实现磁盘的分区:

(1)主引导程序(偏移地址0000H--0088H):占用前446字节,负责从活动分区中装载,并运行系统引导程序,与分区表信息无关,本节课不做讲解。

(2)出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH,全为0字节。

(3)主分区表 DPT(Disk Partition Table):偏移地址 01BEH--01FDH,占用64字节,存放分区信息,显示每个分区的起始位置。又将这64字节的空间分为4个部分,每个部分对应一个分区,每个分区占用16字节,储存对应的分区信息。因此,每个硬盘的主分区与扩展分区的总数不超过4个。

(图中以分区1为例,展示主分区表 DPT 中前16字节的空间表示分区1存储信息的方式)

将16个字节分为16个部分,每个部分占1个字节,而每个字节为8位,因此这16字节的总空间并不小。

第1个字节显示该分区是否为活动分区。该部分会显示为两位十六进制数,而每个十六进制数占用4位,因此共占8位,即总空间为1个字节。若该处的十六进制数显示为“80”,则表明分区1为活动分区,若显示为“00”,则表明分区1为非活动分区。

检查该分区是否为活动分区的方式:以当前硬盘为例,第一个分区 sda1 分区起引导功能,应属于活动分区,其是否为活动性分区的标识应显示为“80”。用二进制的方式打开硬盘,在系统中输入hexdump -C /dev/sda -n 512查询(sda 为要检查的分区名称),“-n 512”表示查看硬盘“/dev/sda”的前512字节,输出结果如下:

 image.png

 

输出结果中第2列表示地址范围(如第1列第2行中的10是一个16进制数,实际表示16),每行中包括16个十六进制数,显示16个字节的存储空间,因此分区表信息应在第447-510个字节。

寻找该字节范围的方式:

[root@centos6~]#bc

446/16

27

//输入命令 bc,计算第446字节所在的行数446/16,输出结果为27,但该结果并未整除

^c

[root@centos6~]#echo 27*16 | bcv

[root@centos6~]#echo 27*16 | bc

432

//输入命令 echo 27*16 | bc 计算这27行共占用字节数,输出结果为432,则第27行的第14个16进制数对应第446个字节

[root@centos6~]#bc

obase=16\

^c

[root@centos6~]#bc

obase=16

27

1B

//计算27对应的十六进制数,输出结果为1B,则说明1B 代表的是第27行,则第447字节位于1B 行的第15位

前446字节与分区表无关,则分区表信息位于第000001b 行末2位始,第000001f0末3位止(剩余2字节为结束标志字,与分区表信息无关)。这64字节的最高位(第000001b行末2位)显示为“80”,则说明该分区为活动区,其他分区为非活动区。

第2个字节表示分区1起始磁头数,它与第3、4字节(分区1起始扇区数:第3字节低6位,分区1起始柱面数:第3字节高2位+第4字节)表示分区1的起始位置。

(1个磁道中扇区数占6位,1个柱面中磁道数占10位,磁头数占8位)

第5个字节表示分区类型,即该分区是否正在使用,若显示为“0”,则表示未使用;若不显示为“0”,则表示正在使用。

第6个字节表示结束磁头数,它与第7、8字节(结束扇区数:第7字节低6位,结束柱面数:第7字节高2位+第8字节),表示分区1的结束位置。

第9-12个字节表示分区起始LBA地址,第13-16个字节表示分区结束 LBA 地址。即LBA 地址一共占用8个字节,即一共32位,理论上可以提供2^32*512个扇区,即该分区最大空间容量为2^32*512=2T(若仅表示该分区的起始和结束位置,整个硬盘的总空间仅为8G,存储空间过小,无法存储空间的描述,因此可通过调用 LBA 的方式以扇区数为单位来描述空间)。

其余分区空间容量相同,MBR能管理的硬盘空间也最大为2T。

主分区表 DPT 的第2个16字节储存分区2的信息,第3个16字节储存分区3的信息,第4个16字节储存扩展分区的信息。

注:硬盘0扇区仅能说明扩展分区的起始位置,但不能说明扩展分区的详细分区情况。

④结束标志字:偏移地址01FE--01FF,占用2个字节,表示整个硬盘的结束位置,若遭到破坏,则表明该硬盘未分区,是裸硬盘。

以前面实验过程中新创建的硬盘 sdb 为例:

[root@centos7~]#hexdump -C -n 512 /dev/sdb -v

输出结果如下:

 image.png

 image.png


新硬盘的结束标志显示为“00”,查看此硬盘的分区:

[root@centos7~]#sblk 显示结果为“0 disk”,即空硬盘。

用命令“fdisk /dev/sdb -l”显示结果中仅有容量,而没有分区信息(sdb 为该磁盘名)。


2. 3个主分区

包括分区1、2、3,其分区信息储存在0扇区中。


3. 扩展分区

扩展分区无法直接存储数据,分为若干个小的逻辑分区。

(1)扩展分区0扇区 EBR(扩展的 boot 记录)

占用扩展分区最前面的512个字节,又分为3部分,即446字节(因其在扩展分区,无法引导,故未使用)+扩展分区表64字节+结束标志2字节。其中扩展分区表的64字节又分为4个16字节的部分,但存储内容与主分区表存储信息不同,其第1部分的16个字节指向逻辑分区1,描述逻辑分区1的起始位置和结束位置,第2部分的16字节指向下一个扩展分区表 EBR(两个逻辑分区间的扇区,也占用512字节,与扩展分区0扇区EBR结构相同,描述下一个逻辑分区的起始位置和结束位置。若还有下一个逻辑分区,再指向下一个逻辑分区的 EBR)。

(2)逻辑分区1

(3)第二个 EBR

(4)逻辑分区2

(5)第3个 EBR

……(共有N个逻辑分区)

MBR分区方式仅作了解即可,重点在于理解一个硬盘中最多仅有4个分区(3个主分区+1个逻辑分区)

 

二、GPT 磁盘分区

1.特点:

(1)GPT(Globals Unique Identifiers partition table)支持128个分区,若使用64位,支持8Z(每个块/扇区512字节)、64Z(每个块/扇区4096字节),相较于MBR,管理空间更大,是未来管理磁盘空间的主要方式。此外,其管理方式与MBR不同,旧的软件不支持 GPT,若 GPT 的第一个扇区不存在类似于 MBR 的分区结构,就软件可能将硬盘误读为空硬盘,误操作破坏数据,为了防止数据被旧的软件覆盖,GPT 分区结构的涉及兼容了 MBR 分区结构。

(2)使用128位 UUID(Universally Unique Identifier)表示磁盘分区,GPT 分区表自动备份在头和尾两份,并有 CRC 校验位,因此 GPT 相对于 MBR 安全性更高。(见 GPT 分区结构部分的 LBA 1--LBA 33及 LBA N-32--LBA N)

(3)GPT分区管理较新,要使其能引导系统启动必须配合计算机硬件主板中的UEFI(统一扩展固件接口)管理机制支持GPT,使系统启动。计算机主板中管理硬件启动的方式包括 BIOS 与 UEFI 两种,UEFI功能更强,更安全,支持 GPT 分区,故只有采用 UEFI 启动的计算机才支持利用GPT分区的方式引导操作系统启动,而旧的BIOS 不支持 GPT,无法启动系统,仅也可以作为数据空间存储数据。此外,UEFI是一种新的硬件管理标准,许多新型的计算机主板中内置的启动方式为 UEFI。BIOS 管理机制下,使 f2 或 delete 键,出现的蓝色背景中不支持鼠标操作,而 UEFI  则支持鼠标操作,更加方便快捷。

一般来说,引导操作系统的运行流程包括两种,即 BIOS+MBR与UEFI+GPT,前者流程为:开机    BIOS 初始化     BIOS 自检            

引导操作系统     进入系统,后者流程为:开机     UEFI 初始

引导操作系统进入系统。若使用 BIOS 搭配 GPT,则 BIOS

启动硬件后,将 GPT 的硬盘当作数据盘,进行读取与访问,而不能引导操作系统启动。


2.结构分区:

(1)为了兼容旧的 MBR 磁盘管理方式,保护后续的数据,GPT 磁盘分区管理的结构设计中加入了 LBA 0 扇区,即 Protective MBR 是 GPT 最前面的512字节,对于 GPT 来说,无实际意义,是为了兼容旧版本应用程序的 MBR 管理方式。

(2)EFI 部分:Primary GUID Partition Header(GPT头/EFI 信息区):占用1个扇区,即 LBA 1,分期表的表头。

 

 

 image.png

 

三、实验:MBR 主分区表的备份与还原

若分区表信息被破坏,则分区信息丢失,数据遭受破坏。因此,某些场景下可考虑将该部分数据备份。

1.备份

分区表信息是二进制信息,该部分不属于分区,也表现为文件形式,因此无法直接拷贝,而可以使用命令将其克隆成一个二进制文件。

输入命令 [root@centos7~]#dd if=/dev/sda of=dpt bs=1 count=64 skip=446 即可备份 MBR 主分区表。

其中if=file表示从某文件中读取,这里的 if=/dev/sda 表示从 /dev/sda 文件中读取;of=file表示写入某文件,这里的of=dpt表示输出文件到 dpt 中;bs=size 表示block size,即块的大小,这里的“bs=1表示1个扇区”;count=n表示只拷贝 n 个记录,这里的 count=64表示拷贝64个记录;skip=blocks表示从开头忽略blocks个大小的 ibs(一次读取的字节数)块,这里的 skip=446表示从开头忽略446个读取的字节;seek=blocks 表示从开头忽略 blocks 个 obs(一次写入的字节数)块,这里是从某文件中读取,因此不使用“seek=blocks”。

生成后再输入 hexdump -C dpt 即可查询该文件。

 image.png

还要注意一定要备份到另一台机,否则分区表一旦被病毒等破坏,仍旧无法还原。可输入 scp dpt 192.168.34.6:/date 及其 password,如 scp dpt 192.168.34.6:/data(挂载在 data 文件下),其中192.168.34.6表示备份存储机的IP 地址。


2.还原

若本机的 MBR 分区表遭到软件恶意攻击等途径破坏,即可通过另一台机的存储数据还原,或者将另一台同样使用 MBR 管理方式的计算机的分区表导出再还原。

(1)利用备份还原:

破坏该分区表的命令:dd if=/dev/zero of=/dev/sda bs=1 count=64 seek=446(注意谨慎操作),表示从开头跳过 /dev/sda 的前446个字节,将接下来的64字节写入 /dev/sda 为 zero。

[root@centos7~]#hexdump -C/dev/sda -n -512 -v

//查询 /dev/sda 二进制文件,显示结果如下(仅显示分区表信息)

image.png 


当磁盘 MBR 分区被破坏后,在 Boot Menu 中选择 CD-RDM Drive(光盘驱动)修复,选择 Troubleshooting(排错)中的救援模式(Rescue a CentOS system),选择1(Continue)。在救援模式下,光盘驱动的小系统下,进入 share,输入fdisk 命令,发现此时 sda 硬盘无分区信息。从另一台机中恢复备份数据:键入 if config ens33 192.168.34.7/24(新建的IP地址),在键入 ping 192.168.34.6(数据备份机的IP地址),再将备份的文件拷贝到 the list of the known hosts(当前目录)中,键入 scp 192.168.34.6:/data/dpt,并输入口令 dpt。接下来进行恢复数据的读取,键入 dd if=dpt of=/dev/sda bs=1 count=64 seek=446 表示跳过/dev/sda 的前446字节,写入64字节,即可恢复,也可键入 sync 命令将缓存的数据写入磁盘,方可立即重启,否则可能数据会在缓存/内存中,无法立即重启,然后输入 exit(退出)。

(2)从相同磁盘管理模式的计算机还原

image.png


若没有数据备份,可以从其他磁盘管理模式相同的电脑中导出分区表 dpt,键入 dd if=dpt of=/dev/sdb bs=1 count=64 seek=446恢复到 sdb 硬盘中。输入[root@centos7~]#hexdump -C/dev/sda -n -512 -v,输出结果(仅显示分区表信息及结束标志字部分)表明仅恢复了分区表部分,结束标志字仍旧错误,因此仍无法读取该磁盘的分区。

 image.png


可使用编辑二进制文件的方式直接编辑,即键入 vim -b sda,再在扩展命令下键入: %!xxd(仅适用于部分支持直接编辑文本的第三方二进制工具);也可直接键入dd if=/dev/sda of=mbr bs=1 count=66 skip=446 跳过 /dev/sda 的前446个字节备份后66个字节到 mbr 中,将主分区表和结束标志字一同还原。最后键入dd if=mbr of=/dev/sdb bs=1 count=66 seek=446 跳过 /dev/sdb 的前446个字节将 mbr 中的66个字节写入 /dev/sdb 中,即可完成恢复。输入 [root@centos7~]#fdisk 即可获取分区表信息,并于 sda 硬盘完全相同。

注:①sdb5 是扩展分区,MBR备份的信息不包括扩展分区的信息,因此 sdb5 与sda 数据不完全相同。

②此过程实现了分区表的克隆,到还要注意恢复数据到的新硬盘容量不能小于原硬盘的容量,否则仍旧无法运行。

相关文章
|
4月前
用winhex查看mbr分区
用winhex查看mbr分区
|
8月前
|
Linux
fdisk 查看分区
fdisk 查看分区。
52 9
|
存储 NoSQL Java
数据系统分区设计 - 分区与二级索引
目前的分区方案都依赖KV数据模型。KV模型简单,都是通过K访问记录,自然可根据K确定分区,并将读写请求路由到负责该K的分区。
111 0
|
Unix Linux 开发者
MBR 和 GPT 分区| 学习笔记
快速学习 MBR 和 GPT 分区
MBR 和 GPT 分区| 学习笔记
|
OLAP 数据库 索引
分区表
分区表
174 0
|
Windows
磁盘分区类型和分区表的区别
磁盘分区类型和分区表的区别
335 0
磁盘分区类型和分区表的区别
|
Shell Linux
磁盘逻辑结构浅谈-MBR和分区
本文档主要的目的是要揭下磁盘存储逻辑结构的神秘面纱,与此同时,我们也介绍一些常见工具和数据结构。 我们讨论里涉及的操作,如果你有Linux虚拟机可用,则尽可以大胆尝试。对于透彻理解我们讨论的主题,亲自动手尝试是必须的。
2334 0
|
关系型数据库 PostgreSQL 索引
|
Linux 数据安全/隐私保护 运维