引导扇区(GPT 或 MBR)、固件(BIOS 或 UEFI)组合的安装和引导场景?

引导扇区(GPT 或 MBR)、固件(BIOS 或 UEFI)组合的安装和引导场景?

我认为这篇文章中的所有困惑都来自于新旧技术的共存以及术语的滥用,例如在https://en.wikipedia.org/wiki/System_partition_and_boot_partition。我不确定计算机技术或术语的创建者是否已经在努力避免制造令人困惑的事情,并让事情清晰、连贯地记录下来。我无法独自弄清楚它们。

https://en.wikipedia.org/wiki/BIOS_boot_partition似乎提到了引导扇区(GPT 或 MBR)、固件(BIOS 或 UEFI)、引导加载程序(GRUB 或...?)的不同组合的不同场景。读到这里我感到失落:

GPT 分区的存储设备上需要 BIOS 引导分区来保存 GRUB 的第二阶段。在传统的 MBR 分区设备上,紧随第一个扇区的磁盘扇区通常不被使用,因为分区方案没有将它们指定用于任何特殊目的,并且分区工具出于对齐目的而避免使用它们。在基于 GPT 的设备上,扇区保存实际的分区表,因此需要使用额外的分区。在 MBR 分区磁盘上,通常会实现引导加载程序,以便存储在 MBR 中的代码部分(不能容纳超过 512 字节)作为第一阶段运行,主要用于加载更复杂的第二阶段,即例如,能够从文件系统读取和加载操作系统内核。

还有一篇关于EFI分区的文章https://en.wikipedia.org/wiki/EFI_system_partition。由于UEFI取代了BIOS,而BIOS存储在ROM中而不是任何分区中,所以我以为UEFI也存储在ROM中,但是当看到“EFI分区”时陷入了困惑。 “EFI分区”是专门用来存储UEFI的分区,还是一些引导加载程序?

我还发现https://askubuntu.com/a/579259/1471这似乎解释得更好,但我仍然迷失在“以传统模式启动 Linux”和“启动另一个传统操作系统”等措辞中。

你可以尝试使用平白的语言描述一下有哪些场景?

哪些内容正在被弃用,哪些内容正在被越来越多地采用,因此值得我花时间了解?

这是我听到的

  1. 一些操作系统书籍,例如《现代操作系统》,说引导加载程序的一部分存储在引导磁盘的 MBR 扇区中,其余部分存储在引导分区的引导扇区中。似乎没有专门用于固件或引导加载程序的分区。据我所知,启动分区是安装操作系统的地方,而不是专门用于存储(部分)引导加载程序的分区。引导磁盘的 MBR 扇区也不是专用于存储(部分)引导加载程序的分区。

  2. 我有一台旧笔记本电脑,带有 GPT 启动盘和 BIOS GRUB 分区。我不知道该分区是专门存储 GRUB 的完整程序,还是仅存储 GRUB 的一部分,而 GRUB 的其余部分存储在安装操作系统的分区的引导扇区中,或者......?

    $ sudo parted -l
    [sudo] password for t: 
    Model: ATA ST1000LM014-1EJ1 (scsi)
    Disk /dev/sda: 1000GB
    Sector size (logical/physical): 512B/4096B
    Partition Table: gpt
    Disk Flags: 
    
    Number  Start   End     Size    File system     Name  Flags
     1      1049kB  2097kB  1049kB                        bios_grub
     2      2097kB  16.0GB  16.0GB  linux-swap(v1)
     4      116GB   716GB   600GB   ext4
     3      716GB   1000GB  284GB   ext4
    
  3. 我找到了一台较旧但较新的笔记本电脑,带有 GPT 启动磁盘和 UEFI 分区。我有与2类似的问题,并且我不知道UEFI分区是否存储UEFI或某些引导加载程序(部分或全部)。

    $ sudo parted -l
    [sudo] password for t: 
    Model: ATA TOSHIBA MQ01ABF0 (scsi)
    Disk /dev/sda: 500GB
    Sector size (logical/physical): 512B/512B
    Partition Table: gpt
    Disk Flags: 
    
    Number  Start   End    Size   File system  Name                  Flags
     1      1049kB  538MB  537MB  fat32        EFI System Partition  boot, esp
     2      538MB   500GB  500GB  ext4
    

    谢谢。

答案1

我认为,如果您尝试从计算机刚刚完成开机自检并被发出从特定磁盘启动操作系统的位置开始遍历整个链,这会有所帮助。使用 MBR,您面临许多历史限制,必须迈出非常小的一步,只能做非常简单的事情。借助 UEFI,您拥有可以帮助您抽象硬件和任务的平台驱动程序。

MBR链:

  • 分区表中的引导加载程序代码(向量)。
  • 主引导记录,引导加载程序代码位于分区表末尾和第一个分区之间。
  • 操作系统或专用引导分区上的卷引导记录。
  • 带有菜单的完整引导加载程序,例如操作系统上的 Grub 或专用引导分区(用于保存操作系统内核以及驱动程序以读取引导加载程序不支持的文件系统)。

带有 GPT 链的 MBR:

  • BIOS 引导分区上的引导加载程序代码。
  • 操作系统或专用引导分区上的卷引导记录。
  • 带有菜单的完整引导加载程序,例如操作系统上的 Grub 或专用引导分区(用于保存操作系统内核以及驱动程序以读取引导加载程序不支持的文件系统)。

由于您仍在以旧方式启动,因此必须依赖旧机制,例如在分区的特殊第一个扇区中的操作系统分区上查找操作系统的下一个启动阶段。

我看到的不寻常的事情之一是 chrx 开发人员如何在具有特殊 ChromeOS-GPT 布局的 Chromebook 上启动第 3 方 Linux,据我所知,我还没有看到 BIOS 启动分区。 Grub 抱怨说用阻止列表启动是不安全的,但许多用户用这种方式启动他们的 Chromebook。

UEFI链:

  • /boot/efi/EFI/ubuntu引导加载程序位于操作系统分区上 EFI 系统分区上的默认目录或操作系统特定目录(例如 )中。
  • 带有菜单的完整引导加载程序,例如操作系统上的 Grub 或专用引导分区(用于保存操作系统内核以及驱动程序以读取引导加载程序不支持的文件系统)。

我已经同步了根分区,只需将 Grub 映像放置在 EFI 分区上的正确位置(并且 ESP 分区也被标记为这样)。这通常不适用于更复杂的 MBR 引导链,在这种情况下,您不仅必须确保文件位于正确的位置,而且还必须确保分区表中的数据模式位于分区表后面,确保您的操作系统分区不超出其中的范围。在此阶段可以通过引导加载程序代码对其进行寻址,并且它是最多 4 个主分区之一,而不是扩展分区(不过,Grub 也可以在其中一些情况下设法引导)。

我希望我没有造成更多混乱。抱歉,我现在不能把它说得更简单,我也不认为我自己已经掌握了整个主题,并且我没有参与编写这方面的任何代码。

相关内容