MBR与GPT详解

   日期:2024-12-25    作者:uieet 移动:http://oml01z.riyuangf.com/mobile/quote/16094.html

        早期的 Linux 系统为了相容于 Windows 的磁盘,因此使用的是支持 Windows 的 MBR(Master Boot Record, 主要开机纪录区)的方式来处理开机管理程序与分区表!而开机管理程序纪录区与分区表则通通放在磁盘的第一个扇区, 这个扇区通常是 512Bytes 的大小 ,所以说,第一个扇区 512Bytes 会有这三个数据

1、主要开机记录区(Master Boot Record, MBR

        可以安装开机管理程序的地方,有446 Bytes。 

2、分区表(partition table

        记录整颗硬盘分区的状态,有64 Bytes,由于分区表所在区块仅有64 Bytes容量,因此最多仅能有四组记录区,每组记录区记录了该区段的启始与结束的柱面号码。

3、分区结束标志位

       结束标志,偏移地址01FE--01FF的2个字节,即最后多出来的510~511字节按惯例为0xAA55。若磁盘此处的值不为0xAA55,则判断该磁盘的MBR被损坏,系统不能启动。

MBR分区图

         若将硬盘以长条形来看,然后将柱面以直条图来看,那么那64 Bytes的记录区段如下面的图所示(其中蓝色那块为分区表

        但是其实MBR分区类型的磁盘也可以分很多个分区,通过叫做扩展(Extended)分区来实现,MBR的分区表记录的是主(Primary)分区和扩展(Extended)分区,主分区就是我们上边所说的记录分区的开始和结束柱面。通过扩展分区达到使用其他扇区来记录分区的形式,每个分区会由一块空间来存放分区表,这里的其他扇区又被称作逻辑扇区。如图所示: 

分区表内容表解

        可以看到两个以4字节表示分区之前以及本分区的扇区数,也就是可以表示的最大扇区数为:2^32*512,而每个标准扇区的容量为512字节,于是能表示的最大容量为

  • LBA0(MBR兼容模块
    出于兼容性考虑存储了一份传统MBR,用来防止不支持GPT的硬盘管理工具错误识别并破坏硬盘中的数据,这个MBR也叫做保护MBR。
    分为两个部分,第一个是前面446字节,用来存储第一阶段的启动引导程序。而在原本的分区表的记录区内,这个兼容模式仅放入了一个特殊字符来表示此磁盘为GPT格式之意。
    在使用 MBR/GPT 混合分区表的硬盘中,这部分存储了GPT分区表的一部分分区(通常是前四个分区,可以使不支持从GPT启动的操作系统从这个MBR启动,启动后只能操作MBR分区表中的分区。

  • LBA1(GPT表头记录
    记录了分区表本身的位置和大小,也记录了备份用的GPT分区(最后34个LBA区块)放置的位置。同时放置了分区表的校验码(CRC32,操作系统可以根据这个校验码来判断GPT是否正确。若有错误可以通过这个记录区来获取备份的GPT(磁盘最后面的备份区块)来恢复正常。

  • LBA[2-33](实际记录分区信息处
    从LBA2区块开始,每个LBA都可以记录4组分区记录,所以在默认情况下,总共有4*32=128组分区记录。每组记录用到128字节的空间。

 图2-2分析

1. Protective MBR(保护MBR:GPT分区表的第0柱面(LBA 0)处保留一个512字节的MBR分区记录,用来保护GPT分区表免受旧版BIOS的破坏。

2. GPT Header(GPT头:GPT分区表的头部,占据了磁盘的第一个物理块512字节。它包含了GPT分区表的基本信息,包括分区表的位置、大小、版本号、磁盘类型、GUID等。

3. Partition Entries(分区表项:磁盘上每个分区的描述信息,每个分区的信息占据了128字节。它包含了分区的GUID、起始位置、结束位置、分区属性等信息。

4. Partition Array CRC32(分区表项数组校验和:用于检测分区表项数组数据是否正确的校验和。

GPT分区表架构支持最多128个分区,每个分区的大小可以达到EB级别,其中包括了主分区、扩展分区、逻辑分区等类型。GPT分区表架构还提供了更好的数据安全性和可靠性,它通过备份GPT头和分区表项数组来避免数据丢失的风险。

GPT分区大小限制

        GPT 在每组记录中分别提供了 8字节 = 64位 来记载开始/结束的扇区号码。因此,理论上对于单一分区槽来说, 它的最大容量限制为 264 * 512bytes = 263 Kbytes = 233TB = 8 ZB 。但是受操作系统限制,一般一个分区最大限制为 18EB。GPT 分区没有所谓的主、扩展、逻辑分区的概念,每个都可以视为是主分区,每一个分区都可以格式化。

BIOS+MBR

        当使用BIOS开机,如果是MBR分区中,grub2充当了开机管理程序,即存放在第一个扇区中。因为MBR只有446字节,存放不下grub2的整个程序及相关文件,所以grub2分成两部分,boot.img和core.img,boot.img存放其MBR中,core.img是被存放在MBR与第一个分区(注意这里是分区而不是扇区)之间的,boot.img去启动core.img,core.img由于没有了大小的限制,会包含一些基本文件系统驱动(EXT,FAT,NTFS,这样grub2可以定位到/boot的文件系统,读取内容等。而grub2需要的一些文件,包括运行时内核模块,配置文件都是在/boot/grub2文件夹下,内核文件就在/boot/文件夹下,这样grub2就会去加载内核,进一步操作系统就可以启动。

接这张图来理解

  • 首先第一个分区从2048扇区开始,0号扇区存放MBR,1~2047扇区如上边所说是留给core.img的。

  • 分区号1-4是留给主分区和扩展分区的,分区号5,6,7...是留给逻辑分区的,所以sdb1,sdb2,sdb5中间会有一个跳跃。

这也是MBR下系统的磁盘的结构

 BIOS+GPT

        因为GPT中是兼容了MBR的(LBA0就是MBR,所以BIOS同样可以开机GPT分区的操作系统。与BIOS->MBR类似,同样需要boot.img去启动core.img,boot.img同样放在第一个扇区,不一样的是core.img并不是放在第一个分区和mbr之间,而是有一个单独的分区BIOS BOOT(1M的内存空间),下图是我操作系统GPT分区

        /dev/sda1就是BIOS boot分区,2048sectors*512bytes=1MB, 同样官方也给了一张图来说明启动的这个过程

 UEFI+GPT

        最后我们来讲UEFI启动GPT分区,我们也已经展示了GPT分区表的图,那么如果使用UEFI是如何启动呢,这里肯定不是使用boot.img和core.img来启动。这里提供一张不兼容MBR启动的分区表的图

        由于没有了bios boot分区,所以就不再支持BIOS启动GPT分区了。这个分区表中比较特殊的一个分区是EFI system这个类型的分区,也被称作EFI System Partition(ESP),这个分区是VFAT格式的文件系统,UEFI还可以读取这个文件系统,且我们的引导文件也在这个目录里,从下图可以看到,这里就有boot loader(grub2)和一些启动时必须软件,centos目录下包含grubx64.efi这个程序, 最终UEFI执行grubx64.efi这个程序。这样就和之前步骤一样了,grub2会去加载内核,启动操作系统。

四、修改引导默认组合

首先我们可以使用下面这条命令来查看我们的引导类型

 
 

接着使用 fdisk -l 来查看我们的磁盘分区类型 

这里提示 WARNING 是因为 fdisk 命令早期不支持gpt分区的,而现在新版的 fdisk 工具(如下图)可以识别到gpt分区。

BIOS+MBR——>BIOS+GPT

        在安装时使用BIOS引导,如果磁盘容量小于 2TB 的话,系统默认会使用 MBR 模式来安装,如果磁盘容量大于2TB的话,那么系统就会使用GPT模式来安装,在分区的时候会看到一个 BIOS BOOT 分区,那如果磁盘小于2TB又想要强制使用 GPT 分区表的话,你就得要这样作

1. 使用方向键,将下图的光标移动到“ Install CentOS 7 ”的项目中

2. 按下键盘的 [Tab] 按钮,让光标跑到画面最下方等待输入额外的核心参数

3. 在出现的画面中,输入如下画面的数据 (注意,各个项目要有空格,最后一个是光标本身而非底线

 UEFI+GPT——>UEFI+MBR

        安装时使用UEFI引导,系统会默认使用GPT模式来安装,在官方并没有找到可以强制修改的参数,所以我们进去使用 gdisk 工具修改,它可以使我们实现无损修改,不会格式化我们的磁盘,摧毁掉我们的数据,如果使用 fdisk 或者 parted 的话,它会在修改同时对硬盘进行格式化。

在UEFI+GPT环境下

1.安装gdisk:如果您的系统没有安装gdisk,请使用以下命令安装

 

2. 打开磁盘:使用以下命令打开您要转换的磁盘

 

请将/dev/sdX替换为您要转换的磁盘名称。

3. 转换分区表格式:在gdisk命令行中,输入“r”以进入恢复和转换菜单,然后输入“g”以将分区表转换为mbr格式。输入“w”以保存更改并退出gdisk。

实验

接着使用 gdisk 工具进行转换为mbr。

下图可以看到转换完重启后,磁盘类型为msdos,即mbr分区,创建的文件依旧还在。如果想要转换回gpt,我们只需gdisk /dev/sda进去交互模式,直接输入“w”即可转换回gpt

注意:gdisk 工具用于在BIOS引导的系统进行磁盘类型转换时,会进行格式化分区,重启后会进入grub rescue模式,上面实验是UEFI引导的系统。

实际情况还是遵循BIOS+MBR与UEFI+GPT的默认组合,如果硬盘容量大于2TB,还是使用GPT分区好。


参考文献

《鸟哥Linux的私房菜》


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号