如何判断我的特定系统是否需要引导分区?

如何判断我的特定系统是否需要引导分区?

我知道为什么我们历史上有单独的启动分区的一般故事:

/boot 分区的真正用途是什么?

在一台新电脑上,我可能 不打扰一个。然而,我正在一个 20 年的系统上安装 Linux,该系统具有非 UEFI BIOS(甚至无法从 USB 启动)。这不会是多启动机器,也不会是任何复杂的东西:没有 LVM、没有磁盘加密、没有 RAID 等。

我怎样才能知道我的具体的电脑,用我的具体的硬盘,需要启动分区吗?

笔记:

  • 如果重要的话 - 我打算安装的发行版是反X Linux19.3 i386。它调用 gparted 让您编辑分区。
  • 引导加载程序自然是我的发行版安装的引导加载程序,AFAICT 是 grub2。

答案1

如果系统大约是 1994 年或更早的版本,则其 BIOS 可能无法处理簇/磁头/扇区几何尺寸大于 1024/16/63 的磁盘,其限制为 504 MiB (528.4 MB)。其原因是两组限制的不方便交互:

  • 经典的未扩展 BIOS INT 13h 功能接受的最大磁盘几何尺寸为 1024/255/63
  • IDE (PATA) 硬件可接受的最大几何尺寸为 65536/16/63
  • 到目前为止,简单的实现只是选择每个值中的最小限制,导致限制为 1024/16/63。

1994 年 7 月,开发了一个新的 BIOS 功能“增强型磁盘驱动器服务”(简称 EDD)来解决这个限制。它在 BIOS 表示和 IDE 硬件接口之间的几何簇和头部分之间移动了位(称为“几何转换”),作为此限制的解决方法。

某些 BIOS 版本在磁盘几何形状 4096/16/16 或其“转换”形式 1024/64/63 处也存在错误。

在磁盘几何结构为 16383/16/63(或翻译形式为 1024/255/63)时,达到了经典 C/H/S 磁盘寻址的最大限制:处理此类磁盘寻址的 BIOS 功能的数据输入格式只是没有足够的位来处理比这更大的磁盘。当磁盘大小为 7.87 GiB (8.45 GB) 或恰好 16 450 560 个磁盘块时达到此限制。

IDE (PATA) 规范包含一个可以解决此问题的功能,但它最初被指定为可选功能,并且并非所有 BIOS 都实现了它。它被称为逻辑块寻址,简称LBA。随着磁盘大小的增长,1996 年左右发布的大多数磁盘都支持 LBA。

但随后又发现了另一个 BIOS 错误:某些 BIOS 的 LBA 实现有缺陷,如果需要超过 26 位来表示磁盘块编号,则会失败。这影响了 1999 年 8 月或更早发布的某些 BIOS 版本,并导致磁盘大小限制为 32 GiB (33.8 GB)。

1994 年发布的 LBA 规范只为磁盘块编号分配了 28 位,这导致了另一个磁盘大小限制,即 128 GiB 磁盘大小。 2003 年发布的 ATA-6 规范指定了 48 位版本的 LBA 磁盘访问功能,这就是我们目前在现代 SATA 磁盘中使用的功能。它应该可以工作,直到磁盘大小增长到 128 PiB。


通常可以通过在 BIOS 中故意指定不正确的磁盘几何形状、告诉它磁盘小于违规限制并创建/boot完全适合假几何形状的分区来解决这些限制。

有时(在引入 LBA 支持之后)/boot分区在适当的大小限制内就足够了。

引导加载程序将使用 BIOS 例程从该分区加载 Linux 内核(以及可选的 initrd 文件),一旦内核启动,其驱动程序将接管磁盘访问,完全绕过 BIOS,并使其限制在操作系统运行时变得无关紧要。正在跑步。此时,内核通常会自动检测真实的磁盘几何形状。

那么这是什么意思?

  • 如果您的系统的 BIOS 发布日期为 2004 年或更早,您可能需要创建一个/boot完全适合磁盘前 128 GiB 的分区,否则 BIOS 可能无法启动操作系统。 (这通常只是双引导和其他多操作系统设置的问题。)
  • 如果您的系统的 BIOS 发行日期在 2000 年之前,您可能需要/boot在磁盘的前 32 GiB 内创建一个单独的分区,只是为了避免 LBA 实施错误。
  • 如果系统是 1996 年或更早的系统,并且在 BIOS 设置中的任何位置都没有提及“LBA”,则您可能必须指定一个假磁盘几何结构,并确保您的/boot分区既位于假几何结构内,又位于磁盘的前 7.87 GiB 内。
  • 任何比这更古老的东西:“它属于博物馆。” :-) 但如果您必须这样做,请参阅上面的相关限制。

如果系统的 BIOS 发布日期仅在特定规范更新日期之后,则它可能有也可能没有更新的规范:在每个规范更新发布后,新的实现都需要一段时间才能普及。

答案2

tl;dr:您不需要启动分区。

即使对于 20 世纪 90 年代的旧计算机,您也不需要启动分区。

...“但是这怎么可能,”您可能会问,“考虑到我们多年来一直被告知,由于 BIOS 限制,我们需要一个?”

原因是现代 Linux 发行版(例如 antiX 19.3)将安装 grub2 引导加载程序; grub2 安装可以包含驱动程序,引导加载程序可以使用这些驱动程序无限制地访问您的分区;它不需要 BIOS 设施来访问 HDD。

但是,有一个警告:这些驱动程序需要实际安装,并且不一定会自动安装。

...但是你必须为 grub2 驱动程序留出空间

首先,grub2需要空间来存储这些驱动程序。幸运的是,如果您的第一个分区不是紧接在 MBR 之后,在磁盘的开始处,grub2 安装会将驱动程序存储在这个非分区空间中(它只需要少量空间,也许只需要 20KiB),并且您很好,可以走了。

因此,您需要确保创建的第一个分区具有 1MiB 对齐方式(也许所有分区都具有这种对齐方式)。

在您的 antiX 安装程序的特定情况下,gparted实用程序用于定义/创建分区。 gparted 默认为 1 MiB 对齐,并在创建分区时向您显示此选择:

在此输入图像描述

所以不要改变这个设置。

...并确保安装了适当的驱动程序

Linux 发行版安装程序,特别是 antiX' 安装程序,默认使用 BIOS/UEFI 设施而不是其自己的驱动程序的 grub2。您需要确保 grub2 已随grub-install --disk-module=native.另一个问题涵盖了这样做:

如何确保 grub2 在 Linux 安装过程中拥有所需的驱动程序?


感谢@cas、@isaac 和@telcoM 的富有洞察力的答案并帮助我综合这一答案。

答案3

无论您的系统是否需要/boot 目录完全由您选择安装的发行版定义。

该目录 ( /boot) 是否位于单独的分区中也是可选的(不是必需的),但在某些情况下非常有用。

您选择的发行版 ( AntiX) 是 Debian 衍生版本。 Debian 可能使用/boot分区,但它是不是要求。 Debian 还能够使用多种引导加载程序(lilo、grub 等)。

引导加载程序是受 BIOS 能力影响的部分,可以在启动时加载扇区。但 GRUB2 完全能够绕过任何此类限制,只要它可以在 MBR 之后使用大约 80 个扇区 (́~20k)。通常可以,特别是对于 1M 对齐的分区。

简而言之:创建一个/boot分区作为第一个大约 200 MB(足够的空间)的分区,使其可引导(DOS 要求),并将 grub 安装到 MBR。您还可以将 grub 安装到该分区,但实际上并不需要这么复杂。

你需要不是对于任何几个 DOS 磁盘限制,Grub2 完全能够解决任何配置(可以访问 MBR 和以下扇区)。

请阅读grub 文档中有详细信息

安装 GRUB 有两种方法: 可以嵌入到 MBR 和第一个分区之间的区域(有各种名称,例如“引导磁道”、“MBR 间隙”或“嵌入区域”,它是通常至少 31 KiB)

还有core.imggrub 文档中的描述

这是GRUB的核心映像。

grub-mkimage 程序根据内核映像和任意模块列表动态构建。

根据文件系统(例如),将使用读取 ext4、zfs 或其他的模块。其他条件将触发更多模块的加载。

通常,它包含足够的模块来访问 /boot/grub,并在运行时从文件系统加载其他所有内容(包括菜单处理、加载目标操作系统的能力等)。

简而言之,GRUB 的内部工作原理。

模块化设计允许核心映像保持较小,因为必须安装它的磁盘区域通常小至 32KB。

GRUB 运行所必须的条件之一。


如果你愿意尝试:

  1. 留下一大块空间,大于任何 DOS 限制,作为磁盘的第一个分区(或作为可用空间)。无需格式化,本次测试中不会使用它。
  2. /在 50GB 的磁盘中最前面创建一个分区(用于)来安装测试操作系统。为了让 GRUB 变得更加困难,不要为/boot.
  3. 请在 grub 理解的文件系统上格式化此分区,也许是ext4.
  4. 根据需要创建其他分区(在可用空间之后)。
  5. 确保将 GRUB 安装到主磁盘(sda,而不是 sda1 或 sdaX)。
  6. 结束安装,重启。有效吗?

如果它有效,GRUB 就表明它可以管理您拥有的旧 BIOS。

相关内容