Por que e quando um formato rápido para o FAT32 grava estruturas diferentes no setor 0 em uma unidade flash USB?

1

Introdução: Para um projeto de pesquisa, estou tentando gravar um gerenciador de inicialização em uma unidade flash USB. Depois de algumas experiências, consegui fazer isso. Eu gostaria de saber como posso reproduzir isso.

O que fiz: Recentemente comprei uma nova unidade flash USB e abri o disco físico em HxD (um editor hexadecimal para Windows). Ele já estava formatado como FAT32, mas o setor 0 tinha uma estrutura completamente diferente da descrita nesta página

Nesta página da web, fica claro que há duas strings presentes: MSDOS5.0 e FAT32 . Ambos não estavam presentes no setor 0.

Após experimentar e tentar formatar rapidamente a unidade no Windows para FAT32 como padrão, o setor 0 permaneceu com estruturas diferentes da descrita acima. Quando tentei formatá-lo rapidamente depois de usar o mkisofs para Windows e gravar o ISO na unidade USB Flash usando o PowerISO, a estrutura do setor 0 finalmente mudou para a descrita acima.

Minha pergunta: Por que isso mudou? E como posso reproduzir isso para novas unidades flash USB?

Edit: Eu preciso que o setor esteja na mesma estrutura descrita na página do meu projeto.

    
por Michiel Pater 20.03.2015 / 09:39

1 resposta

1

I am trying to write a bootloader to a USB device.

"dispositivo USB" é ambíguo. Existem dispositivos de áudio e vídeo USB, bem como vários dispositivos de armazenamento. Por "drive USB" você supostamente quer dizer uma unidade Flash USB, em vez de um HDD USB (que sempre tem um MBR no primeiro setor, em vez de um setor de inicialização do sistema de arquivos).

It was already formatted as FAT32, but sector 0 had a completely different structure than described on this webpage

O pendrive parece ter um MBR (Master Boot Record) com uma tabela de partição (no setor 0), e o sistema de arquivos FAT estava localizado em uma partição primária.
Como essa página menciona, são os dumps de setor dos setores de inicialização, que são instalados no primeiro setor de um sistema de arquivos que normalmente residiria em uma partição (ou no primeiro setor de um disquete).

And how can I reproduce this for new USB drives?

Eu posso instalar o setor de inicialização do sistema de arquivos no setor 0 de uma unidade flash USB

  1. zerando qualquer MBR no setor zero. Em um problema do sistema Linux
    sudo dd if=/dev/zero of=/dev/sdX count=64
    Este talvez o passo crucial, especialmente se já houver um MBR. Eu não sei como fazer este passo no Windows.

  2. Use o Windows para formatar a unidade Flash USB (o Windows insistirá em formatá-la antes de poder usá-la). Eu usei o Win7 para "formatar rapidamente" o disco para obter os resultados abaixo.

O setor 0 resultante na unidade Flash USB se parece com o que você deseja (ou seja, não é um MBR e não há tabela de partições).

Adendo

IamnotsureifIunderstandthedifferencebetweenanMBRandaFilesystembootsectorcorrectly

OMasterBootRecord,MBR,éinstaladonoprimeirosetordeumdispositivodearmazenamentoemmassacompartiçãodePC.Napartefinaldosetor,háumatabeladepartiçõesquedivideodispositivoemdispositivoslógicosmenores.Umapartiçãoserámarcadacomo"ativa" e o código de inicialização no MBR carregará e executará o primeiro setor dessa partição "ativa".

O primeiro setor de uma partição inicializável (ou o primeiro setor de um disquete) contém um gerenciador de inicialização. O sistema de arquivos instalado nessa partição terá o código apropriado nesse primeiro setor para continuar o processo de inicialização quando um sistema operacional for instalado. Quando não há nenhum SO instalado ou próximo programa de inicialização para carregar (por exemplo, BOOTMGR), o carregador de boot envia um texto que indica que não é uma partição / dispositivo inicializável (por exemplo, "Remover discos ou outra mídia". Erro de disco. Pressione qualquer tecla para reiniciar. ")

IOW você deseja que a unidade flash USB se assemelhe a um disquete de alta capacidade em vez de um disco rígido (particionado). Cuidado com os limites do sistema de arquivos, por exemplo O sistema de arquivos mais portátil, o FAT32, é limitado a 32 GB.

FYI Estou ciente desta peculiaridade com drives Flash USB e SDcards, porque a omissão do MBR & A tabela de partição torna essa mídia de armazenamento ilegível em alguns dispositivos incorporados ao Linux (que esperam partições). Tutoriais sobre a inicialização de mídia VFAT inicializável para Linux embarcado geralmente especificam o particionamento & formmatting no Linux para evitar esta peculiaridade do Windows.

    
por 20.03.2015 / 23:52