让我们假设一个相当现代的 BIOS (2005-),没有错误/怪癖,扇区大小为 512,LBA48 寻址,并且支持增强型磁盘驱动器。
询问的原因是,通过 INT 13h Extended Read 调用的简单读取,偏移扇区是一个 8 字节值;比任何可用磁盘都大 8 ZiB,并且超出了 LBA48 寻址的范围。但我只找到了较小限制的参考,那么 GRUB 实际上能够支持什么?
boot.img / diskboot.img 使用的块列表由多大大小的字段组成?
答案1
GNU GRUB(也称为grub2
)块列表条目有一个用于 LBA 编号的 64 位 ( uint64_t
) 字段,因此它们可以存储 8 字节值。但在大多数情况下,限制因素是 BIOS INT13h 扩展读取例程将接受的内容:如果底层硬件限制是 LBA48,则限制将为 2^48 块,在 512 字节块大小上计算为 128 PiB,或约 144 PB。
如果我们谈论的是 GRUB Legacy (GRUB 0.9x),它的块列表只能保存 32 位 ( uint32_t
) LBA 值。
在 UEFI 系统上,固件磁盘访问 API 限制为 9.4 ZB,并且只能grubx64.efi
告诉固件从 UUID 标识的 GPT 分区加载特定命名的文件,GRUB 的限制可能根本不适用。当然,如果您使用固件不支持的文件系统类型,则需要依赖 GRUB 的文件系统驱动程序,该驱动程序可能(还不?)支持该大小的文件系统:-)