Precisa de um local para armazenar alguns bytes de meta informações na mídia de armazenamento

2

Estou trabalhando em um projeto incorporado. Preciso de um local para armazenar algumas informações meta independentes do sistema de arquivos em um dispositivo de armazenamento. O dispositivo tem uma tabela de partições MSDOS. O dispositivo também pode ter espaço não alocado (dependendo do seu tamanho), mas será TRIMmed (e também pode ser surpreendido por novas partições no futuro).

Eu preciso de um local no dispositivo que não seja não alocado e que tenha um baixo risco de ser tocado (fora do apagamento completo do dispositivo). O dispositivo só tem a garantia de ter um MBR no ponto em que os metadados precisam primeiro ser gravados; significando que não há EBRs / VBRs presentes que eu possa usar.

Existem 446 bytes no início do dispositivo disponíveis para o código de bootstrap do MBR. Atualmente, minha única ideia é armazenar dados no final deste bloco. No entanto, o dispositivo é inicializável e não tenho como saber se eu estaria extravasando o código de bootstrap ou não.

O tamanho do setor é de 512 bytes e o MBR é o primeiro setor, estou bonito certo (corrija-me se estiver errado) que significa que o segundo setor está disponível para uso por partição dados, então eu não posso usar isso também.

Alguém tem alguma ideia? Eu preciso de 4 bytes de espaço.

    
por Jason C 01.11.2013 / 20:09

3 respostas

1

O Windows NT usa uma assinatura de disco de 32 bits para identificar discos particionados por MBR individuais e armazena-os como seis bytes começando com 440 [01B8h] (quatro bytes contendo a assinatura e dois bytes zero) . Isso deixa 440 bytes para o código de bootstrap.

A assinatura do disco foi introduzida pela primeira vez com o Windows NT 4 (e tornou-se necessária em discos MBR a partir do Windows Vista). Desde então, ele também é usado de maneira semelhante ao "UUID de disco" da GPT por sistemas não-Windows (o Linux e o GRUB o suportam).

Por causa disso, muitos bootloaders limitam seu código de bootstrap no MBR para 440 bytes, para evitar sobrescrever a assinatura do disco. (Acabei de verificar que o GRUB e o Syslinux fazem.)

Existe uma boa chance de que o gerenciador de inicialização usado pelo seu dispositivo também deixe a assinatura do disco intocada. Verifique se os dois bytes que começam em 444 [01BCh] são 00 00 - se estiverem, os outros quatro provavelmente permanecerão inalterados, a menos que toda a tabela de partição seja dissipada ou a menos que um novo código de inicialização maior que 440 bytes esteja instalado.

    
por 01.11.2013 / 20:26
3

o MBR contém a tabela de partições, bem como o código de inicialização

Bootcode: 446bytes Parições primárias: 64bytes Sig: 2bytes

O armazenamento será usado para inicializar? pode valer a pena considerar "corromper" o código de inicialização dentro do MBR para armazenar os metadados O bootcode só é realmente usado no boottime

    
por 01.11.2013 / 20:17
1

A única maneira realmente segura de armazenar seus dados está em uma partição própria. Dadas as suas necessidades, a partição pode ser pequena (um setor). Armazenar os dados fora de uma partição corre o risco de serem saturados ou de seus dados sobrescrevendo algo importante. Dado que é apenas quatro bytes, assumindo o número de série da tabela de partição, como sugere o grawity, é provavelmente a mais segura das opções de partição, mas eu não recomendaria isso, especialmente sem mais contexto, porque o número de série é usado por algumas ferramentas, então, assumir isso pode causar problemas se você confiar em algo que use o número de série.

    
por 02.11.2013 / 03:32