答案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)
这是GRUB的核心映像。
grub-mkimage 程序根据内核映像和任意模块列表动态构建。
根据文件系统(例如),将使用读取 ext4、zfs 或其他的模块。其他条件将触发更多模块的加载。
通常,它包含足够的模块来访问 /boot/grub,并在运行时从文件系统加载其他所有内容(包括菜单处理、加载目标操作系统的能力等)。
简而言之,GRUB 的内部工作原理。
模块化设计允许核心映像保持较小,因为必须安装它的磁盘区域通常小至 32KB。
GRUB 运行所必须的条件之一。
如果你愿意尝试:
- 留下一大块空间,大于任何 DOS 限制,作为磁盘的第一个分区(或作为可用空间)。无需格式化,本次测试中不会使用它。
/
在 50GB 的磁盘中最前面创建一个分区(用于)来安装测试操作系统。为了让 GRUB 变得更加困难,不要为/boot
.- 请在 grub 理解的文件系统上格式化此分区,也许是
ext4
. - 根据需要创建其他分区(在可用空间之后)。
- 确保将 GRUB 安装到主磁盘(sda,而不是 sda1 或 sdaX)。
- 结束安装,重启。有效吗?
如果它有效,GRUB 就表明它可以管理您拥有的旧 BIOS。