MBR与GPT的区别(来自zyx)

Posted 从零开始的智障生活

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MBR与GPT的区别(来自zyx)相关的知识,希望对你有一定的参考价值。

前言

 

想要了解MBR和GPT就说明已经知道了其目的是要将磁盘分区,那什么是磁盘分区?为什么要磁盘分区?怎么进行磁盘分区?而MBR和GPT又是什么?两者又有什么区别?其实这都是围绕着一个目的使用磁盘,而工厂生产的硬盘必须要经过三个步骤,才能让电脑使用它们存储数据:

这里以一个巨大的住房/dev/sda的使用为例:

  1. 低级格式化:通常由生产厂家完成,目的是划定磁盘可供使用的扇区和磁道并标记有问题的扇区。
    想要建立住房,首先要有一个毛坯房/dev/sda,将毛坯房按地面平方划分,如果最小单位是1平方米,那么一个扇区就是1平方米。而有良心的开发商会告诉你哪一块地方容易漏水漏电塌墙。
  2. 磁盘分区:但是硬盘不能直接使用,必须对硬盘进行分割,分割成一块一块的硬盘区域,这就是硬盘分区。
    第一天,毛坯房不能直接住人,我们现在要对其进行装修,按卧室/dev/sda1、厨房间/dev/sda2、洗手间/dev/sda3、客厅/dev/sda4、备用区(剩余未划分部分用来以后其他装修,立起一道一道水泥或木板墙,将其做成一个个没有门小的隔间
    第二天,想要看看昨天划分的情形,一进房门,由于我装修除了立墙什么都没做呢,自己记性又不好,忘了哪里被划分为卧室、哪里被划分成洗手间、我要是真开始装修错了怎么办哪?总不能每次一忘就把墙全拆了,重新立吧。所以我们在自己的房门里面房门边上的小桌子上放了一个小本子,这个小本子记录了我前一天的装修的隔间规划。这个小本子就是分区表,而这个分区表,可以用不同的小本子,比如MBR或GPT,100平的房间的我们用一个4K页小本子如MBR就行了,而一个1公顷大别墅我们可以用一个大黑板,如GPT,根据不同的需求选择不同的分区表
    第三天,我想要再增加一个运动区,用来打Dota2,那怎么办?注意剩余的备用区,我们可以将其划分一部分出来。
    分出一个区就相当于装修完一个隔间。
  3. 高级格式化:给分区挂载文件系统。
    注意,我们给毛坯房分隔间的时候,隔间是没有门的,要想使用的话至少需要一个门吧,所以挂载文件系统就相当于给一个房间一个门。实际上就是这个硬盘这个东西,放在这里,虽然我们把它划分了,即装修了,但是怎么把数据存储进去(这样说感觉像是我装修完房间,就把四周给堵上了=_=),就要开一扇门。
    挂载:一个进入隔间的门,即建立一个可以被用户打开的目录。通过一个目录(门)进去,Linux可以是/home/zyx_master进入/dev/sda3(卫生间)(即我将我的一个用户的数据直接用一个分区存放,换种说法就是把/dev/sda3挂载到/home/zyx_master下)。
    但是可以发现,/home/zyx_master这个目录是放在/home下的,而/home肯定是属于另一分区的。说明,目录仅仅只是一个逻辑路径,与其物理空间的存储规则不是相同关系的。
    设dev/sda2挂载在/home下,/dev/sda3挂载在/home/zyx_master下,相当于,在厨房间里面开了一道通往洗手间的门,但厨房间是厨房间,洗手间是洗手间,二者是相互独立的,你不能在洗手间里吃饭,也不能在厨房间上厕所。
  4. 使用硬盘:在硬盘中存取数据。
    在/home/zyx_master里面建立子目录以及存放数据就相当于日常在/dev/sda3这个分区中进行操作。

低级格式化不谈。

MBR(MS-DOS)概述

MBR与GPT都是磁盘分区表(partition table)的一种格式。

当前常用的一些分区格式用的都是MBR。Linux系统是为了兼容Windows的磁盘,因此使用支持Windows的MBR(Master boot Record,主引导记录)的方式来处理启动引导程序与分区表。而启动引导程序与分区表则通通放在磁盘的第一个扇区,这个扇区在旧版中用的是512字节的大小,但是当前用的一般都是1M大小,一个扇区512字节(一个扇区的大小一般是512字节和4k字节,但现在普遍是512字节)。

第一个扇区的大小是512字节大小,其内容如图所示。

主引导记录(Master Boot Record,MBR):可以安装启动引导程序的地方,有446字节,0x1BD=445,而操作系统中,都是从0开始计数的,所以要445+1=446字节。一般在操作系统安装时写入,但它并不属于操作系统。MBR就是一段引导程序,用于检测磁盘的分区合法性和加载操作系统,它的重要作用就是识别活动分区,并引导操作系统。

地址

描述

长度(字节数)

0

代码区

440(最大446

440

选用磁盘标志

4

444

一般为空值

2

446

标准MBR分区表规划(四个16byte的主分区表入口)

64

510

MBR有效标志:0x55AA(就是上面图中灰色的部分)

2(MBR最后两个字节)

(上面主引导记录的表了解就行,可能今生今世都不用遇到)

分区表(Partition Table):记录整块分区的状态,有64字节。每个分区16个字节,其内容如下表所示,因此MBR最多只能有四个分区。

偏移

描述

1字节

引导标志。意思是此磁盘的分区状态0x00表示磁盘分区未激活,0x80表示磁盘分区已激活。

2字节

磁盘分区的起始磁头号。

34字节

分区起始扇区和柱面号。低字节的6为扇区号,柱面号为高字节8+低字节高2xxxxxxxx xxxxxxxx。

5字节

磁盘分区类型。0x00=该分区未用(即没有指定)、0x06=FAT16基本分区、0x0B=FAT32基本分区、

0x05=扩展分区、0x07=NTFS分区、0x0F=(LAB模式)扩展分区、0x83=Linux等。

6字节

磁盘分区的结束磁头号。

78字节

分区结束扇区和柱面号。低字节的低6位为扇区号,柱面号为高字节8+低字节高2xxxxxxxx xxxxxxxx。

9101112字节

本磁盘已经被分区的部分已经用了的扇区数。

13141516字节

本磁盘已经被分区的大小(总扇区数)

注意:在DOS/Windows系统下,基本分区必须以柱面为单位划分(Sectors*Heads个扇区),如对于CHS764/255/63的硬盘,分区的尺寸大小为: 255 * 63 * 512 / 1048576 = 7.844MB。但是Linux下是以扇区为单位划分的。

以上就是这MBR的512个字节的内容。分区表的内容只是针对那64个字节的分区表进行设置而已。

MBR分区表内容

  1. 所谓的分区只是针对哪个64字节的分区表进行设置,而分区表的每一段16字节,而这16字节的第13、14、15、16字节表示总扇区数,即最大是{2}^{32}个扇区数,而每个扇区大小是512个字节,每个分区最大{2}^{32}\\times 512B=2,199,023,255,552B\\approx 2.2TB
  2. 硬盘默认的分区表仅能写入四组分区信息,这四个分区可以是主要(Primary)或扩展(Extended)分区。

在Linux中,对于MBR可以用命令fdisk建立分区。

答疑模块

  1. 问:第一个扇区所在的分区表总共64位只能记录四组数据,如果想要划分更多分区怎么办?
    答:可以利用额外的扇区来记录更多的分区信息。这就是扩展分区。
  2. 问:什么是扩展分区?

    答:以/dev/sdb这个新硬盘为例。
    磁盘按照MBR分区表格式,最多有四个分区,有主分区和扩展分区,而扩展分区最多只有一个,主分区就是一个个独立的分区假设有三个主分区/dev/sdb1、/dev/sdb2、/dev/sdb3,而用户想要继续分区:
    1. 情形1:我只想再要一个分区,并且以后不会再考虑分区,那么我可以将第四个分区空间作为主分区,建立第四个主分区/dev/sdb4。
    2. 情形2:我想要再一个分区以后可能还会有其他分区,或我想再建几个分区,将第四个分区空间作为扩展(Extended)分区,建立扩展分区/dev/sdb4。
      但这个扩展分区的设备名/dev/sdb4,更类似于另一磁盘,我们可以在扩展分区上建立逻辑分区,理论上可以建立无数个逻辑分区,而所有逻辑(Logistic)分区的命名是从/dev/sdb5开始
  3. 问:为什么要分区?
    • 安全性
      如果Windows的C盘想要重新安装一次系统,可以先将C盘重要数据放到其他分区,如D盘,那么安装C盘重新安装系统并不会影响D盘。
    • 系统性能
      系统读取数据时,如果未分区的话,要在整个磁盘中查找数据,如果分区之后,只会在一个分区中读取。
  4. 问:扩展分区划分的逻辑分区在Linux系统中的设备文件名是什么?

    答:P1:/dev/sda1、P2:/dev/sda2、L1:/dev/sda5、L2:/dev/sda6、L3:/dev/sda7、L4:/dev/sda8、L5:/dev/sda9。前四个号码都是留给主分区和扩展分区的,所以逻辑分区的设备名称号码就由5号开始。
  5. 问:可否将同级分区,即逻辑分区与逻辑分区合并或主分区与主分区合并?
    答:可以,如下图中的逻辑分区二/dev/sdb6和逻辑分区三/dev/sdb7。只要将两个分区删除,然后再重新建立一个新的分区/dev/sdb6,就能够在不影响其他分区的情况下将两个分区的容量整合成一个。
  6. 问:可否将非同级分区合并,就是把主分区与逻辑分区合并?
    答:不可以。如将第二主分区/dev/sdb2与逻辑分区二/dev/sdb5合并,必须要将第三扩展分区/dev/sdb3整个删除,然后根据起始扇区与结束扇区,重新建立分区。

MBR 主要分区、扩展分区与逻辑分区的特性我们对其作出定义:

  1. 主要分区与扩展分区最多可以有4个(硬盘分区表64字节的限制)
  2. 扩展分区最多只能有一个(操作系统的限制)
  3. 逻辑分区是由扩展分区划分出来的分区
  4. 能够被格式化后作为数据存储的分区是主要分区与逻辑分区,而扩展分区无法被格式化。

MBR分区表的局限性:

  1. 操作系统无法使用2.2TB以上的磁盘容量
  2. MBR仅有一个区块,即所有信息全都放在第一个扇区上,若被破坏后,经常无法或很难恢复
  3. MBR内存放启动引导程序的区块仅446字节,无法存储更多的程序代码。

GPT概述

因为过去一个扇区大小就死512字节而已,不过目前已经有4K的扇区设计出现。为了兼容所有的磁盘,因此在扇区的定义上面,大多会使用所谓的逻辑区块地址(Logical Block Address,LBA)来处理。GPT将磁盘所有区块以此LBA(默认为512字节)来规划,而第一个LBA称为LBA0(从0开始编号)。

与MBR仅使用第一个512字节区块记录不同,GPT使用了34个LBA区块来记录分区信息。同时与过去MBR仅有一个区块,被干掉就死光光的情况不同,GPT除了前面34个LBA之外,整个磁盘的最后34个LBA(LBA -34——LBA -1)也拿来作为另一个备份

 

启动流程中的Bios与UEFI启动检测程序

没有软件的硬件是没有用的,没有软件的计算机除了可以“电人”没有任何用。而为了合理分配计算机硬件资源,就有了操作系统这个系统软件的产生。

问:操作系统也是软件,那么我们的计算机是如何认识这个操作系统软件并执行它的呢?

答:这就要涉及到计算机的启动程序。目前的主机系统在加载硬件驱动方面的程序,主要有早期的BIOS与新的UEFI两种机制。

BIOS搭配MBR/GPT的启动流程

BIOS是一个写入到主板上的一个固件(固件就是写入到硬盘上的一个软件程序)。这个BIOS就是在启动的时候,计算机系统会主动执行的第一个程序。接下来BIOS会去分析计算机里面有哪些存储设备,BIOS会依据用户的设置去取得能够启动的硬盘,并且到该硬盘里去读取第一个扇区的MBR位置。MBR这个仅有446字节的硬盘容量里会放置基本的启动引导程序,此时BIOS就结束任务,而接下来的工作就交接给MBR内的启动引导程序

这个启动引导程序的目的是加载内核文件,由于启动引导程序是操作系统在安装的时候所提供的,所以它会认识硬盘内的文件系统格式,因此就能够读取内核文件,接下来就是内核文件的工作,启动引导程序MBR和BIOS的工作就结束了,而接下来的工作就交接给操作系统

整个启动流程到操作系统之前的过程应该是这样的:

  1. BIOS:计算机启动会主动执行的固件,会认识第一个可启动的设备;
  2. MBR:第一个可启动设备的第一个扇区内的主引导记录块,内含启动引导程序
  3. 启动引导程序(boot loader):一个可读取内核文件来执行的软件;
  4. 内核文件:开始启动操作系统。

由上面知道,BIOS与MBR都是硬件本身会支持的功能,至于Boot loader则是操作系统安装在MBR上的一个软件。由于MBR仅有446个字节,因此这个启动引导程序是非常小而高效。

这个MBR启动引导程序的主要任务有下面这些:

  1. 提供选项:用户可以选择不同的启动选项,这也是多重引导的重要功能;
  2. 加载内核文件:直接执行可使用的程序区段来启动操作系统;
  3. 转交其他启动引导程序:将启动管理功能转交给其他启动引导程序负责。

前两点容易理解,但第三点有说法。说明计算机里面可能具有两个以上的启动引导程序。但根据上面内容可知,每一个启动引导程序放在MBR,都可以加载一个内核文件,来启动一个操作系统。

  1. 问:那么说明硬盘不止一个MBR吗?
    答:对。硬盘是不止一个MBR,但是启动引导程序除了可以安装在MBR之外,还可以安装在每个分区的启动扇区(boot sector)。
  2. 问:那么说明每个分区还有各自的启动扇区?
    答:对。每个分区有各自的启动扇区这个特性才能造成“多重引导”的功能。
  3. 问:假设你的个人计算机中只有一个硬盘,里面分成四个区,其中1、2分区分别安装了Windows和Linux,你要如何在开机的时候选择用Windows还是Linux启动?
    答:正如上面所说的MBR的启动引导程序的主要任务中的第一项,MBR的启动引导程序提供两个选项:
    1. 选项一可以直接加载Windows的内核文件来开机;
    2. 选项二将开机管理工作交给第二个分区的启动扇区(boot sector);
      而第二个分区的启动扇区的MBR的启动引导程序启动后,里面仅有一个启动选项,因此就能够使用Linux的内核文件来启动。
  4. 问:为什么要安装多重引导,最好先安装Windows再安装Linux?
    答:
    Linux在安装的时候,你可以选择将启动引导程序安装在MBR或各别分区的启动扇区,而且Linux的启动引导程序可以手动设置选项(就是下图中的M1,M2),所以你可以在Linux的启动引导程序里面加入Windows启动的选项;
    Windows在安装的时候,Windows的安装程序会主动地用自己的MBR以及自己所在分区的启动扇区覆盖掉原本的MBR以及自己所在分区的启动扇区,你没有选择的机会,而且它没有让我们选择选项的功能。
    如果先安装Linux再安装Windows的话,那MBR的启动引导程序就只有Windows的选项。而不会有Linux的选项(因为原本在MBR内的Linux的启动引导程序会被Windows的MBR覆盖掉)。
  5. 问:如果先装Linux再装Windows,MBR只有Windows的选项,那么要重新安装一次Linux吗?
    答:不用,只要用尽各种方法来处理MBR的内容即可。

 

以上是关于MBR与GPT的区别(来自zyx)的主要内容,如果未能解决你的问题,请参考以下文章

硬盘MBR和GPT区别

磁盘磁盘MBR与GPT的区别

UEFI与MBR区别

MBR与GPT分区的区别及磁盘分区相关命令

硬盘分区的MBR和GPT表有啥区别

MBR和GPT区别