Local alternativo para a tabela de entradas da partição GPT

0

O cabeçalho da GPT (normalmente no LBA 1) tem um campo PartitionEntryLBA (consulte 5.3.2 Cabeçalho da GPT na especificação). Há uma linguagem em várias referências (como a entrada da GPT da wikipedia) descrevendo esse campo que diz que deve apontar para o LBA 2.

A especificação diz "A Matriz de entrada de partição principal do GPT deve estar localizada após o cabeçalho principal do GPT e terminar antes do primeiro LBA utilizável".

Nesse contexto, parece haver algum espaço de manobra associado a "depois". Isso não significa necessariamente imediatamente após - a primeira entrada de partição pode ser um número de LBAs após o cabeçalho e ainda atender a essa orientação na especificação.

Estou usando um processador incorporado que procura uma tabela vetorial de 4k no segundo setor de um cartão de armazenamento (por exemplo, SD). Então eu não posso colocar as entradas da partição GPT lá. Então, eu gostaria de escrever entradas de partição GPT após essa tabela (deslocamento de 5k bytes assumindo setores de 512 bytes). Eu acho que isso é razoável, mas não olhei para nenhuma ferramenta padrão de particionamento GPT (por exemplo, parted on linux) para ver se / como isso pode ser suportado. Nem se os carregadores de inicialização padrão (por exemplo, u-boot) conseguirão encontrar uma tabela de entrada de partição em tal localidade.

Por isso, estou interessado em ouvir sobre experiências práticas com locais de tabelas de entrada de partições GPT atípicas (ou seja, não no LBA 2 para a cópia primária da tabela) com várias ferramentas de particionamento e carregadores de inicialização. Preferência em relação ao bsd / linux, mas estou interessado em ouvir sobre outros ambientes também (até mesmo anedotas sobre determinados sistemas operacionais comerciais).

Isso é um pouco de um inquérito aberto. Com um pouco mais de detalhes, há casos de falha conhecidos com locais de tabela de entrada de partição GPT atípicos e ferramentas de particionamento e / ou carregadores de inicialização existentes?

Você pode acessar as especificações da UEFI aqui: link . Eu estava olhando para o mais recente (revisão 2.4, errata C).

Eu ainda não sou membro da UEFI ( link ), então não tenho acesso ao fórum lá ( link ).

p.s. Parece haver um requisito ainda mais strong (?) De que o cabeçalho principal do GPT esteja no LBA 1, embora haja um campo StartingLBA no PMBR (no LBA 0). A especificação faz especificamente soletrar que o campo StartingLBA deve ser LBA 1. Mas por que se preocupar em ter o campo se ele deve estar no LBA 1? Por que não permitir que o cabeçalho da GPT esteja no LBA 10 se uma situação exigir isso? Isso não é necessário no meu caso de uso atual e as perguntas são um tanto retóricas neste fórum (provavelmente melhor posicionado nos fóruns oficiais da UEFI).

    
por Juan 21.11.2015 / 18:23

1 resposta

0

Eu poderia jurar que tinha visto algo assim em algumas imagens ISO híbridas (o tipo usado para distribuições Linux para que elas pudessem ser gravadas em um CD-R ou gravadas em uma unidade flash USB sem pós-processamento); No entanto, acabei de verificar alguns e eles não parecem estar fazendo isso. Talvez eu não esteja me lembrando corretamente, ou talvez eu não tenha verificado os corretos. Eu também não vejo nada sobre isso na página isohybrid man - mas não tenho certeza se isso é o mais comumente usado para criar essas imagens. Ainda assim, você pode querer seguir essa liderança mais do que eu fiz ....

FWIW, sou o autor do fdisk da GPT. Já faz um bom tempo desde que eu tive que tocar no código relevante, mas uma revisão rápida sugere que o fdisk GPT deve ler um disco no qual a tabela de partição primária não comece no LBA 2; no entanto, o fdisk da GPT não suporta a alteração desta localização, e não posso prometer que salvaria a tabela na localização original, mesmo que conseguisse ler com sucesso esse disco. Você pode ser capaz de cortá-lo para começar a mesa em outro lugar para fins de experimentação. Na verdade, acabei de experimentar, mas há vários lugares no código que usam valores "1" ou "2" codificados para preencher os valores do LBA, e não os encontrei todos na minha inicial tentativa, então acabei escrevendo o cabeçalho no meio da tabela de partições, o que obviamente não era bonito. Se você quiser tentar, veja o arquivo gpt.cc . Comece procurando onde partitionEntriesLBA e firstUsableLBA estão definidos - mas algumas das constantes relevantes também estão em chamadas de função.

Quanto à localização do cabeçalho principal da GPT, duvido que você possa mudar isso. A MBR protetora não é realmente parte das estruturas de dados da GPT em si; sua finalidade é identificar o disco como um disco GPT e impedir que as ferramentas não compatíveis com o GPT estraguem o disco, para não identificar onde as estruturas de dados da GPT começam. O campo StartingLBA existe porque é parte da estrutura de dados do MBR, não porque o GPT usa para qualquer coisa. Eu suponho que é possível que algumas ferramentas possam usar o ponto inicial da partição protetora MBR como um ponteiro para o cabeçalho principal, mas duvido que a maioria faria isso. Certamente o fdisk GPT não; ele codifica o LBA 1 como a localização do cabeçalho principal.

Se você tiver mais dúvidas sobre isso, talvez queira postar na lista de discussão edk2-devel . a> Muitos desenvolvedores da EFI ficam por lá, e é possível que alguns deles saibam sobre os precedentes do que você está tentando fazer ou saibam maneiras alternativas de atingir sua meta.

    
por 22.11.2015 / 00:10