美文网首页@IT·互联网计算机微刊程序员
MBR、开机流程与主引导分区

MBR、开机流程与主引导分区

作者: sugerpocket | 来源:发表于2017-09-07 00:03 被阅读0次

    预备知识

    • CMOS: 主板上记录了硬件参数的储存器 —— Wikipedia

    • BIOS: 写入到主板 ROM 中的程序,开机时执行的第一个程序 —— Wikipedia

    • MBR: 可引导设备的第一个扇区(一般情况下是硬盘中的第一扇区)中的主引导分区 —— Wikipedia

    • Boot loader: 读取操作系统内核文件来执行的程序 —— Wikipedia

    开始

    学过计算机的肯定都知道操作系统是一个软件,我们平时用的软件都是基于操作系统提供的接口运行的。那么操作系统又是怎么运行的呢?

    Step 1: BIOS

    在预备知识中我们就知道了,开机运行的第一个程序就是 BIOS,那么开机引导操作系统的切入点也肯定是它了。

    BIOS 识别 CMOS 读取硬件信息,从中找出可开机设备,一般自然是硬盘了。

    当然,可开机设备不一定是硬盘,或者说你有两个硬盘,这里就不做讨论了。

    Step 2: MBR & Boot loader

    BIOS 找到第一个扇区之后就查找 MBR 的位置,这是最基本的引导程序(Boot loader),这个程序一旦启动,BIOS 的任务才算圆满。

    MBR 中的引导程序运行,这个时候用户可以对开机选项进行操作,例如转交引导加载的任务给其他引导程序(之后还会提到)。

    Step 3: Operating System

    什么都做完了,当然该操作系统登场,负责提供其基本功能。

    补充

    如果你是老手,那么之前我说的这些肯定都知道了或者可以明确地指出我的错误,如果你是新手,那么你可能对上面的大段文字感到困惑。没关系,现在我们开始补充一些必要的知识。

    磁盘分区表

    Step 2 中提到了第一个扇区。实际上,这个扇区不止包含 MBR,它还包含了一个分区表,用来对硬盘进行分割,文件系统的最小单位是柱面,所以它是以记录柱面号来分割硬盘的。

    例如第一分区是 1~100 柱面,那么分区记录项第一个的内容就是 1 和 100,其他以此类推。
    我们所谓的"分区"实际上就是对这个分区表的记录进行修改。

    由于分区表只有 64 bytes,所以最多只能有 4 个分区,这四个分区被称为主(Primary)分区。
    那么你肯定要有疑问:分区可不一定只有 4 个啊。
    是的,这种情况下就有一个相对于主引导分区的概念——扩展(Extended)分区。

    如果我们拿主分区的其中一个存放另外一个分区表储存更多的分区信息,那我们就可以拥有更多分区。不是么。有时间理解一下下图吧。

    普遍的硬盘分区表

    这里需要注意的地方是,如果有 4 个主分区,我们就再也没有办法存放另外的分区信息,所以一般情况下会留下一个分区存放扩展分区信息,主分区因此最多只有 3 个。

    扩展分区只能有一个(操作系统限制),扩展分区持续切割,形成新的分区,这就是逻辑分区(logical partition)。我们平时能作为数据访问的分区是主分区和逻辑分区,扩展分区不能格式化。

    多重引导

    这里需要说明一下,每个分区都拥有自己的启动扇区,可以用来存放引导程序,并且该引导程序可以将管理权交给另一引导程序(其他分区的引导扇区)或者自己引导所在的分区,是的,可开机的内核文件不是在引导扇区内,而是在各分区内。

    意思就是,你可以引导不止一种操作系统,根据你在 boot menu 的选择,可以引导任何在 MBR 指向中的系统。

    • linux 安装的时候可以选择安装在分区的启动扇区,或者 MBR,linux 的 loader 可以手动转换引导程序。
    • windows 会覆盖掉 MBR 和自己所在的分区。你没有办法保留之前 MBR 中对 linux 引导程序的指向。

    上述两个原因表明了为何需要先安装 windows 操作系统,再安装 linux,否则将不会在开机的时候看到 linux 引导选项。

    GUID 分区方案

    相对于 MBR 分区方案,GUID有以下优点 (源自百度百科):

    1. 支持2TB以上的大硬盘。
    2. 每个磁盘的分区个数几乎没有限制。为什么说“几乎”呢?是因为Windows系统最多只允许划分128个分区。不过也完全够用了。
    3. 分区大小几乎没有限制。又是一个“几乎”。因为它用64位的整数表示扇区号,即0 ~
      =18,446,744,073,709,551,616。夸张一点说,一个64位整数能代表的分区大小已经是个“天文数字”了,若干年内你都无法见到这样大小的硬盘,更不用说分区了。
    4. 分区表自带备份。在磁盘的首尾部分分别保存了一份相同的分区表。其中一份被破坏后,可以通过另一份恢复。
    5. 每个分区可以有一个名称(不同于卷标)。

    GUID 扩展了分区表头,并且兼容了 MBR(第一扇区还是留有 MBR 的空间,为了兼容不支持 GUID 的硬盘),分区信息存放于分区表中,由 GUID HEADER 中的信息标识引导程序 efi 所在的分区。

    开机过程(以下是我个人的理解,欢迎指正):

    • BIOS 过程同 MBR 分区方案一致。
    • 之后在 GUID HEADER 中查找 .efi 引导程序。
    • 主引导程序扫描所有分区的引导扇区并运行其中的分区引导程序。
    • 分区引导程序读取分区内容并引导操作系统。

    写在最后

    MBR 的引导过程中的知识来源于 《鸟哥的 linux 私房菜》一书,对于 linux 操作系统感兴趣的同学我觉得很值得一读,GUID 相关知识还不够全面,如果各位看客发现了错误,欢迎指正,也欢迎各位与我交流,共同成长。

    相关文章

      网友评论

        本文标题:MBR、开机流程与主引导分区

        本文链接:https://www.haomeiwen.com/subject/bhzvjxtx.html