EFI 的最大分区数是多少?

EFI 的最大分区数是多少?

我想知道 Linux 下 GPT 分区驱动器上的最大分区数是多少。

GPT 分区表最多可以包含 128 个分区,但设备节点/dev/sda?(如所述)这里、主编号为 8 的块设备)最多只/dev/sda1允许/dev/sda15

这是否意味着驱动器上的分区不能超过 15 个,即使是在 GPT 分区的驱动器上?

答案1

让我们来读一下精品资料吧。

在中block/partitions/efi.c,设置gpt分区的地方是efi_partition()。这里决定最大分区数:

for (i = 0; i < le32_to_cpu(gpt->num_partition_entries) && i < state->limit-1; i++) {

num_partition_entries来自磁盘上的 gpt 头,所以最大数量是state->limit - 1state是这个函数的参数,这个函数从 调用check_part(),从check_partition()同一个文件中,然后出现

state->limit = disk_max_parts(hd);

所以极限是disk_max_parts()

static inline int disk_max_parts(struct gendisk *disk)
{
        if (disk->flags & GENHD_FL_EXT_DEVT)
                return DISK_MAX_PARTS;
        return disk->minors;
}

因此,如果磁盘设备有GENHD_FL_EXT_DEVT /* allow extended devt */(循环设备、通用 ATA/ATAPI 磁盘、SCSI 磁盘、MD RAID),则限制为DISK_MAX_PARTS(256),否则minors

综上所述,通常Linux内核支持的最大数量是255。

答案2

嗯,我认为这就是使用 UUID 发挥作用的地方。在这种情况下,您不会将块设备寻址为 /dev/{h,s}dXY,而是通过设备的 UUID。当然,在这种情况下,限制将远远超过 128。

答案3

不,这意味着Linux有问题。☺ 但我们已经知道了。

谁告诉你 EFI 分区表包含取决于128个分区?那个人看不懂规格。 我之前说过,每 128 个字节的条目是最低限度EFI 规范所要求的大小,而不是EFI 分区表的大小,当然不是最大限度尺寸。

(严格来说,EFI 规范 1.10 版中首次提到的最小值是所有分区条目总共 16KiB,但不包括标头块。按照传统的 128 字节条目长度,至少有 128 个条目。)

相关内容