Какое максимальное количество разделов с EFI?

Мне было интересно, каково максимальное количество разделов на GPT-разделенном диске под Linux.

Таблица разделов GPT может содержать до 128 разделов, но узлы устройства для /dev/sda? (как описано здесь, блочное устройство с основным номером 8) разрешают только /dev/sda1 вплоть до /dev/sda15,

Означает ли это, что не может быть более 15 разделов на диске, даже на GPT-разделенном диске?

3 ответа

Давайте читать прекрасный источник.

В 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.

Нет, это означает, что у Linux есть проблема. ☺ Но мы уже знали это.

Кто вам сказал, что таблица разделов EFI содержит до 128 разделов? Этот человек не может читать спецификации. Как я уже говорил, 128 записей по 128 байт каждая - это минимальный размер, требуемый спецификацией EFI, а не размер таблицы разделов EFI и, конечно, не максимальный размер.

(Строго говоря, минимум, впервые упомянутый в версии 1.10 спецификации EFI, составляет всего 16 КБ для всех записей раздела, но не включает блок заголовка. При обычной длине записи 128 байт это минимум 128 записей.)

Что ж, я думаю, что здесь нужно использовать UUID. В этом случае вы обращаетесь не к блочному устройству как /dev/{h,s}dXY, а к UUID устройства. Конечно, в этом случае, предел будет превышать 128.

Другие вопросы по тегам