硬盘分区基础

硬盘分区基础

  • 前言
  • MBR(主引导记录)
    • 什么是MBR
    • MBR的组成部分
    • MBR分区表与GPT分区表的关系
  • DBR(分区引导记录)
  • EBR(扩展分区引导记录)
  • 开机流程和硬盘主引导记录(多重引导/MBR与DBR之间的联系)
    • 多重引导

参考资料
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc976796(v=technet.10)
https://www.zhihu.com/question/20705848
http://www.cnblogs.com/bellkosmos/p/detail_of_linux_file_system.html


前言

硬盘分区基础_第1张图片
硬盘分区是硬盘结合到文件体系的第一步,本质是「硬盘」这个物理概念转换成「区」这个逻辑概念,为下一步格式化做准备。所以分本身并不是必须的,你完全可以把一整块硬盘作为一个区。但从数据的安全性以及系统性能角度来看,分区还是有很多用处的,所以一般都会对硬盘进行分区。

讲分区就不得不先提每块硬盘上最重要的第一扇区,这个扇区中有硬盘主引导记录(Master boot record, MBR) 及分区表(partition table), 其中 MBR 占有 446 bytes,而分区表占有 64 bytes。硬盘主引导记录放有最基本的引导加载程序,是系统开机启动的关键环节,在后面有更详细的说明。而分区表则跟分区有关,它记录了硬盘分区的相关信息,但因分区表仅有 64bytes , 所以最多只能记彔四块分区(分区本身其实就是对分区表进行设置)。

只能分四个区实在太少了,于是就有了扩展分区的概念,既然第一个扇区所在的分区表只能记录四条数据, 那我可否利用额外的扇区来记录更多的分区信息。

把普通可以访问的分区称为主分区,扩展分区不同于主分区,它本身并没有内容,它是为进一步逻辑分区提供空间的。在某块分区指定为扩展分区后,就可以对这块扩展分区进一步分成多个逻辑分区。
操作系统规定:

  • 四块分区每块都可以是主分区或扩展分区
  • 扩展分区最多只能有一个(也没必要有多个)
  • 扩展分区可以进一步分割为多个逻辑分区
  • 扩展分区只是逻辑概念,本身不能被访问,也就是不能被格式化后作为数据访问的分区,能够作为数据访问的分区只有主分区和逻辑分区
  • 逻辑分区的数量依操作系统而不同,在 Linux 系统中,IDE 硬盘最多有 59 个逻辑分区(5 号到 63 号), SATA 硬盘则有 11 个逻辑分区(5 号到 15 号)

一般给硬盘进行分区时,一个主分区一个扩展分区,然后把扩展分区划分为N个逻辑分区是最好的

  • 是否可以不要主分区呢?不知道,但好像不用管,你创建分区的时候会自动给你配置类型
  • 特殊的,你最好单独分一个swap区(内存置换空间),它独为一类,功能是:当有数据被存放在物理内存里面,但是这些数据又不是常被 CPU 所取用时,那么这些不常被使用的程序将会被丢到硬盘的 swap 置换空间当中, 而将速度较快的物理内存空间释放出来给真正需要的程序使用

MBR(主引导记录)

什么是MBR

  • 主引导记录(Master Boot Record,缩写:MBR),又叫做主引导扇区,是计算机开机后访问硬盘时所必须要读取的首个扇区,是位于磁盘最前边的一段引导(Loader)代码,它在硬盘上的三维地址为(柱面,磁头,扇区)=(0,0,1)。
  • 主引导扇区记录着硬盘本身的相关信息以及硬盘各个分区的大小及位置信息,是数据信息的重要入口。如果它受到破坏,硬盘上的基本数据结构信息将会丢失,需要用繁琐的方式试探性的重建数据结构信息后才可能重新访问原先的数据。
  • 它负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统(DOS)在对硬盘进行初始化时产生的。通常,我们将包含MBR引导代码的扇区称为主引导扇区。 因这一扇区中,引导代码占有绝大部分的空间,故而将习惯将该扇区称为MBR扇区(简称MBR)。
  • 由于MBR扇区承担有不同于磁盘上其他普通存储空间的特殊管理职能,作为管理整个磁盘空间的一个特殊空间,它不属于磁盘上的任何分区,因而分区空间内的格式化命令不能清除主引导记录的任何信息。
  • 主引导扇区内的信息可以通过任何一种基于某种操作系统的分区工具软件写入,但和某种操作系统没有特定的关系,即只要创建了有效的主引导记录就可以引导任意一种操作系统(操作系统是创建在高级格式化的硬盘分区之上,是和一定的文件系统相联系的)。

关于MBR这个术语维基百科和百度百科还给出了更详细的说法

我们将包含MBR引导代码的扇区称为主引导扇区。因这一扇区中,引导代码占有绝大部分的空间,故而将习惯将该扇区称为MBR扇区(简称MBR)。–百度百科

在深入讨论主引导扇区内部结构的时候,有时也将其开头的446字节内容特指为“主引导记录”(MBR),其后是4个16字节的“磁盘分区表”(DPT),以及2字节的结束标志(55AA)。因此,在使用“主引导记录”(MBR)这个术语的时候,需要根据具体情况判断其到底是指整个主引导扇区,还是主引导扇区的前446字节。–维基百科

知乎上的一个问题问题:
问:“boot sector和MBR的区别是什么?可以理解成:每个分区都有一个boot sector,但是一个设备仅有一个MBR吗?”
某个回答下出现以下争议:我是觉得你的答案没有体现出“‘Boot Sector’是设备上的存储区域,‘MBR’是存储区域上存储的数据内容”这个最关键的区别
上述问题中的boot sector,题主的意思应该是问DBR和MBR的区别,但是题主应该还没搞清楚boot sector的概念,上述的问题应该可以修改为:每个分区都有一个DBR,但是一个设备仅有一个MBR吗?

很多地方将DBR称为Boot sector,我更倾向于将 MBR(此处的MBR指的是一整个扇区)和 DBR(下面将介绍什么是DBR) 统称为Boot sector(启动扇区)

MBR的组成部分

MBR扇区由三部分构成:第一部分是446字节的引导代码,也就是上面提到的MBR;第二部分是DPT(Disk Partition Table,硬盘分区表),包含4个表项,每个表项16字节,共占用64字节;第三部分是2个字节的结束标志,0x55AA。
硬盘分区基础_第2张图片

主引导扇区由三个部分组成(共占用512个字节)

  • 主引导程序即主引导记录(MBR)(占446个字节)
    • 主引导记录最开头是第一阶段引导代码(系统自举装入程序)。
    • PC机启动时由BIOS装入内存执行。 如果装了多个操作系统,将根据选择去读出对应分区的boot sector程序装入内存,执行该操作系统的自举程序。
    • 它不依赖任何操作系统,而且启动代码也是可以改变的,从而能够实现多系统引导。
  • 磁盘分区表项(DPT,Disk Partition Table)
    • 它不依赖任何操作系统,而且启动代码也是可以改变的,从而能够实现多系统引导。
    • 硬盘分区表占据主引导扇区的64个字节(偏移01BEH–偏移01FDH),可以对四个分区的信息进行描述,其中每个分区的信息占据16个字节。具体每个字节的定义可以参见硬盘分区结构信息。
  • 结束标志(占2个字节)
    • 结束标志字55 AA(偏移1FEH-偏移1FFH)最后两个字节,是检验主引导记录是否有效的标志。

MBR分区表与GPT分区表的关系

与支持最大卷为2 TB(Terabytes)并且每个磁盘最多有4个主分区(或3个主分区,1个扩展分区和无限制的逻辑驱动器)的MBR磁盘分区的样式相比,GPT磁盘分区样式支持最大为128个分割,一个分割最大18 EB(Exabytes),只受到操作系统限制(由于分区表本身需要占用一定空间,最初规划硬盘分区时,留给分区表的空间决定了最多可以有多少个分区,IA-64版Windows限制最多有128个分区,这也是EFI标准规定的分区表的最小尺寸)。与MBR分区的磁盘不同,至关重要的平台操作数据位于分区,而不是位于非分区或隐藏扇区。另外,GPT分区磁盘有备份分区表来提高分区数据结构的完整性。在UEFI系统上,通常是通过ESP分区中的EFI应用程序文件启动GPT硬盘上的操作系统,而不是活动主分区上的引导程序。

DBR(分区引导记录)

微软给出的解释:
The boot sector, located at sector 1 of each volume, is a critical disk structure for starting your computer. It contains executable code and data required by the code, including information that the file system uses to access the volume. The boot sector is created when you format a volume. At the end of the boot sector is a two-byte structure called a signature word or end of sector marker, which is always set to 0x55AA. On computers running Windows 2000, the boot sector on the active partition loads into memory and starts Ntldr, which loads the operating system.
翻译
位于每个卷的扇区1的引导扇区是用于启动计算机的关键磁盘结构。 它包含代码所需的可执行代码和数据,包括文件系统用于访问卷的信息。 格式化卷时会创建引导扇区。 在引导扇区的末尾是一个双字节结构,称为签名字或扇区结束标记,它总是设置为0x55AA。 在运行Windows 2000的计算机上,活动分区上的引导扇区加载到内存中并启动Ntldr,后者加载操作系统。

  • 分区引导扇区也称DBR(DOS BOOT RECORD),是由FORMAT高级格式化命令写到该扇区的内容,DBR是由硬盘的MBR装载的程序段。DBR装入内存后,即开始执行该引导程序段,其主要功能是完成操作系统的自举并将控制权交给操作系统。每个分区都有引导扇区,但只有被设为活动分区才会被MBR装的DBR入内存运行。
  • 在对硬盘分区之后,每一个分区均有一个DBR与之对应。DBR位于每个分区的第一个扇区,大小为512字节。
  • DBR的结构与分区格式有关,NTFS与FAT32的DBR格式是不同的。

EBR(扩展分区引导记录)

从主引导记录的结构可以知道,它仅仅包含一个64个字节的硬盘分区表。由于每个分区信息需要16个字节,所以对于采用MBR型分区结构的硬盘,最多只能识别4个主要分区(Primary partition)。能够在MBR的DPT里进行说明的分区称为主分区。所以对于一个采用此种分区结构的硬盘来说,想要得到4个以上的主要分区是不可能的。MBR的DPT里就会容纳不下来,于是微软就想出了另一个解决方案,在MBR里,只放不多于三个主分区,剩下的分区,则由与MBR结构很相像的另一种分区结构(EBR,也就是扩展分区引导记录)进行说明。一个EBR不够用时,可以增加另一个EBR,如此像一根链条一样地接下去,直到够用为止。扩展分区也是主要分区的一种,但它与主分区的不同在于理论上可以划分为无数个逻辑分区。

扩展分区中逻辑驱动器的引导记录是链式的。每一个逻辑分区都有一个和MBR结构类似的扩展引导记录(EBR),其分区表的第一项指向该逻辑分区本身的引导扇区,第二项指向下一个逻辑驱动器的EBR,分区表第三、第四项没有用到。

Windows系统默认情况下,一般都是只划分一个主分区给系统,剩余的部分全部划入扩展分区。这里有下面几点需要注意:

  • 在MBR分区表中最多4个主分区或者3个主分区+1个扩展分区,也就是说扩展分区只能有一个,然后可以再细分为多个逻辑分区。
  • 在Linux系统中,硬盘分区命名为sda1-sda4或者hda1-hda4(其中a表示硬盘编号可能是a、b、c等等)。在MBR硬盘中,分区号1-4是主分区(或者扩展分区),逻辑分区号只能从5开始。
  • 在MBR分区表中,一个分区最大的容量为2T,且每个分区的起始柱面必须在这个disk的前2T内。你有一个3T的硬盘,根据要求你至少要把它划分为2个分区,且最后一个分区的起始扇区要位于硬盘的前2T空间内。[3]如果硬盘太大则必须改用GPT。
  • 实际上,EBR中有用的部分仅为其DPT的前两个表项,第一个表项记录了本扩展分区的逻辑偏移地址和扇区个数,第二个表项记录了下一个扩展分区的必要信息,本质上是一个链表的结点。

开机流程和硬盘主引导记录(多重引导/MBR与DBR之间的联系)

一台可正常运行的计算机会在BIOS上设置一块启动硬盘,其实每块硬盘都可以作为启动盘,硬盘本身的设计提供的这种可能,这就要从硬盘上的第一个扇区说起,这个扇区中有硬盘主引导记录(Master boot record, MBR)及分区表(partition table), 其中 MBR 占有 446 bytes,而分区表则占有 64 bytes。

计算机主板上有一段写入到主板的程序BIOS,BIOS是开机之后计算机系统会主动执行的第一个程序。BIOS 会去分析计算机里面有哪些储存设备,我们以硬盘为例,BIOS 会依据使用者的设定去取得能够开机的硬盘, 并且到该硬盘里面去读取第一个扇区的MBR位置。

MBR 这个仅有 446 bytes 的硬盘容量里面会放置最基本的引导加载程序(Boot loader),它的目的是加载操作系统内核文件,由于引导加载程序是操作系统在安装的时候所提供的,所以它会认识硬盘内的文件系统格式,因此就能够读取操作系统内核文件。接下来就是内核文件的工作,也就是大家所知道癿操作系统的任务了。

所以简单说开机流程就是:

  1. BIOS:开机主动运行的程序,会识别第一个可开机的设备
  2. MBR-引导加载程序:第一个可开机设备的第一个扇区内的主引导分区中的引导加载程序,可读取操作系统内核文件
  3. 操作系统内核文件:不同的操作系统中关于开启自己的程序

由上面的说明我们会知道,BIOS和MBR 都是硬件本身会支持的功能,到MBR中的Boot loader 则是操作系统写在 MBR 上面的一段程序了。由于 MBR 仅有 446 bytes,因此这个引导加载程序是非常小而美的,它的主要任务有:

  1. 提供菜单:用户可以选择不同的开机项目,这也是多重引导的重要功能
  2. 载入操作系统内核:直接指向可开机的程序区段来启动操作系统
  3. 转交其他 loader:将引导加载功能转交给其他 loader 负责
    1. 这点很有趣,表示你的计算机系统里面可能具有两个以上的引导加载程序
    2. 有可能吗?我们的硬盘不是只有一个 MBR 而已?是这样,但是引导加载程序除了可以安 装在 MBR 之外, 还可以安装在每个分区的引导扇区(boot sector)内
    3. 分区的引导扇区这个特色造就了『多重引导』的功能
    4. 具体可以看鸟哥的书第三章第四节

多重引导

下列提到的术语boot sector或称为DBR
硬盘分区基础_第3张图片

首先要知道活动分区是什么:系统默认的操作系统启动文件所在的分区,windows下默认为C.

MBR包括三部分内容:

  1. 分区表:指出有几个分区,每个分区的起始扇区号、大小和操作系统类型及其他特性。
  2. 自举装入程序:PC机启动时由BIOS装入内存执行。 如果装了多个操作系统,将根据选择去读出对应分区的boot sector程序装入内存,执行该操作系统的自举程序。
  3. 校验信息:检验是否正确。

boot sector应当包含如下信息:

  1. 本分区操作系统类型
  2. 数据区大小
  3. 根目录区允许最大目录项(在根目录区最多创建多少个文件)
  4. 如果该分区安装了操作系统并被设置为活动分区,那还会包含一段“引导程序”;如果没安装系统,则该分区引导扇区为空或其中的数据是无效的。

MBR和boot sector应该是由上至下的关系:

  1. 启动顺序有先后。PC机启动时,先执行MBR,再根据选择执行某个分区下的boot sector。(选择执行的boot sector所在分区就是活动分区。“用户选择一个操作系统” 实际上也就是选择一个分区作为活动分区。)
  2. boot sector可以为空(没装系统),但MBR必须包含内容。
  3. MBR必须被读取并执行;引导扇区根据选择执行,有的甚至可以不执行(即上文中的”数据是无效的”)。
  4. MBR实际上包含的内容也比boot sector广泛,MBR中相当于包含了硬盘整体层面上的引导扇区(自举装入程序)、根目录区(分区表)。所以也许是在拿“自举装入程序 Boot Loader"和"boot sector"做比较。
  5. 更通俗的讲:MBR是某社团的老大,他知道社团有多少个部门(分区表),某天他接了个活(开电脑了!),比如宣传XX讲座,于是他开始寻找(启动自举装入程序!)一个部门(某个分区)来干这活。当然他选择了宣传部(把宣传部设置为活动扇区!)。这时候,宣传部长(boot sector)粗线并出动了!很遗憾,他的部门只有一个部员(操作系统),而他只会当宣传部长不会宣传,于是他毫不犹豫地把活交给了那个部员!(于是操作系统启动了)。 以上故事的前提是:一个部门(分区)下,只能有1个部员(操作系统),当然部长不算部员。
    硬盘分区基础_第4张图片

你可能感兴趣的:(Linux文件系统学习历程)