Заголовок GPT (обычно в LBA 1) имеет поле PartitionEntryLBA (см. 5.3.2 Заголовок GPT в спецификации). В различных ссылках (таких как запись GPT в Википедии) есть язык, описывающий это поле, которое говорит, что оно должно указывать на LBA 2.

В спецификации говорится: «Первичный массив ввода разделов GPT должен располагаться после основного заголовка GPT и заканчиваться перед первым используемым LBA».

В этом контексте, кажется, есть некоторая комната для маневра, связанная с "после". Это не обязательно означает, что сразу после - первая запись раздела может быть некоторым количеством LBA после заголовка и все же соответствовать этому руководству в спецификации.

Я использую встроенный процессор, который ищет таблицу векторов 4k во втором секторе карты памяти (например, SD). Поэтому я не могу поместить туда записи раздела GPT. Поэтому я хотел бы написать записи раздела GPT после этой таблицы (смещение 5 Кбайт при условии 512 байт секторов). Я думаю, что это разумно, но я не смотрел ни на какие стандартные инструменты разметки GPT (например, parted на linux), чтобы посмотреть, будет ли / как это поддерживаться. Также не смогут ли стандартные загрузчики (например, u-boot) найти таблицу записей разделов в таком месте.

Поэтому мне интересно услышать о практическом опыте с нетипичными местоположениями таблицы записей разделов GPT (т. Е. Не на LBA 2 для основной копии таблицы) с различными инструментами разбиения и загрузчиками. Предпочтение bsd/linux, но мне интересно услышать и о других средах (даже анекдоты о некоторых коммерческих операционных системах).

Это что-то вроде открытого расследования. Если говорить более конкретно, есть ли какие-либо известные случаи сбоев с нетипичными местоположениями таблицы записей разделов GPT и существующими инструментами разбиения и / или загрузчиками?

Вы можете ознакомиться со спецификациями UEFI здесь: http://www.uefi.org/specifications. Я смотрел последнюю версию (ревизия 2.4, опечатки C).

У меня пока нет членства в UEFI (http://www.uefi.org/join), поэтому у меня нет доступа к форуму там (http://www.uefi.org/FWOSForum).

п.с. Кажется, есть еще более сильное требование (?) что заголовок первичного ГПТА быть в LBA 1 , даже если есть поле StartingLBA в PMBR (при LBA 0). В спецификации это специально пишется, что поле StartingLBA должно быть LBA 1. Но зачем беспокоиться о поле, если оно должно быть на LBA 1? Почему бы не позволить заголовку GPT находиться на LBA 10, если ситуация требует этого? Это не является необходимым в моем текущем случае использования, и вопросы на этом форуме несколько риторически (вероятно, лучше задавать на официальных форумах UEFI).

1 ответ1

0

Я мог бы поклясться, что видел нечто подобное в некоторых гибридных ISO-образах (этот тип используется для дистрибутивов Linux, чтобы их можно было записать на CD-R или записать на флэш-накопитель USB без последующей обработки); однако, я только что проверил несколько, и они, кажется, не делают этого. Возможно, я не помню правильно, или, может быть, я просто не проверил правильные. Я также не вижу ничего об этом на man-странице isohybrid - но я не уверен, что именно это чаще всего используется для создания этих изображений. Тем не менее, вы можете последовать этому примеру, чем я ...

FWIW, я автор GPT fdisk. Прошло довольно много времени с тех пор, как мне пришлось прикоснуться к соответствующему коду, но быстрый обзор показывает, что GPT fdisk должен читать диск, на котором таблица первичных разделов не начинается с LBA 2; однако GPT fdisk не поддерживает изменение этого местоположения, и я не могу обещать, что оно сохранит таблицу обратно в исходное местоположение, даже если она сможет успешно читать такой диск. Вы можете взломать его, чтобы начать эту таблицу в другом месте для экспериментов. На самом деле, я только что попробовал, но в коде есть несколько мест, в которых для заполнения значений LBA используются жестко запрограммированные значения "1" или "2", и я не нашел их все в своем исходном коде. попытка, поэтому я закончил тем, что записал заголовок в середину таблицы разделов, что, конечно, было не красиво. Если вы хотите попробовать, посмотрите на файл gpt.cc Начните с поиска, где установлены partitionEntriesLBA и firstUsableLBA - но некоторые из соответствующих констант также присутствуют в вызовах функций.

Что касается расположения основного заголовка GPT, я сомневаюсь, что вы могли бы изменить это. Защитная MBR на самом деле не является частью структуры данных GPT; его цель состоит в том, чтобы идентифицировать диск как диск GPT и не дать инструментам, не знакомым с GPT, не испортить диск, а не определить, где начинаются структуры данных GPT. Поле StartingLBA существует, потому что оно является частью структуры данных MBR, а не потому, что GPT использует его для чего-либо. Я полагаю, что некоторые инструменты могут использовать начальную точку защитного раздела MBR в качестве указателя на основной заголовок, но я сомневаюсь, что большинство сделает это. Конечно, GPT fdisk не делает; он жестко кодирует LBA 1 в качестве местоположения основного заголовка.

Если у вас есть дополнительные вопросы по этому поводу, вы можете разместить их в списке рассылки edk2-devel. Там много разработчиков EFI, и некоторые из них знают о прецедентах того, что вы пытаетесь сделать, или об альтернативных способах достижения вашей цели.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .