我想知道 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 - 1
。state
是这个函数的参数,这个函数从 调用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。