Какое максимальное количество разделов с 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.