Master Boot Record
O master boot record (MBR), ou registro mestre de inicialização, é um tipo de setor de inicialização localizado no primeiro bloco de dispositivos de armazenamento em massa de computadores particionados, como discos fixos ou unidades removíveis, destinado ao uso em sistemas compatíveis com IBM PC e posteriores. O conceito de MBR foi introduzido publicamente em 1983 com o PC DOS 2.0.
Imagem: wlef70 · BY-NC-SA · Openverse
O suporte a mídias particionadas e, consequentemente, ao registro mestre de inicialização (MBR), foi introduzido com o IBM PC DOS 2.0 em março de 1983 para suportar o disco rígido de 10 MB do então novo IBM Personal Computer XT, ainda utilizando o sistema de arquivos FAT12. A versão original do MBR foi escrita por David Litton da IBM em junho de 1982. A tabela de partições suportava até quatro partições primárias. Isso não mudou quando o FAT16 foi introduzido como um novo sistema de arquivos com o DOS 3.0. O suporte a uma partição estendida, um tipo especial de partição primária usada como contêiner para abrigar outras partições, foi adicionado com o DOS 3.2, e as unidades lógicas aninhadas dentro de uma partição estendida surgiram com o DOS 3.30. Como o MS-DOS, o PC DOS, o OS/2 e o Windows nunca foram habilitados para inicializar a partir delas, o formato do MBR e o código de inicialização permaneceram quase inalterados em termos de funcionalidade (exceto por algumas implementações de terceiros) ao longo das eras do DOS e OS/2 até 1996.
Imagem: ScotXW · BY-SA · Openverse
O IBM PC DOS 2.0 introduziu o utilitário FDISK para configurar e manter partições MBR. Quando um dispositivo de armazenamento foi particionado de acordo com esse esquema, seu MBR contém uma tabela de partições que descreve as localizações, tamanhos e outros atributos de regiões lineares chamadas partições. As próprias partições também podem conter dados para descrever esquemas de particionamento mais complexos, como registros de inicialização estendidos (EBRs), rótulos de disco BSD (disklabels) ou partições de metadados do Logical Disk Manager. O MBR não está localizado dentro de uma partição; ele fica no primeiro setor do dispositivo (deslocamento físico 0), precedendo a primeira partição. (O setor de inicialização presente em um dispositivo não particionado ou dentro de uma partição individual é chamado, em vez disso, de registro de inicialização do volume.) Nos casos em que o computador está executando uma sobreposição de BIOS DDO (Dynamic Drive Overlay) ou um gerenciador de inicialização, a tabela de partições pode ser movida para alguma outra localização física no dispositivo; por exemplo, o Ontrack Disk Manager frequentemente colocava uma cópia do conteúdo original do MBR no segundo setor e depois se ocultava de qualquer sistema operacional ou aplicativo inicializado subsequentemente, de modo que a cópia do MBR era tratada como se ainda residisse no primeiro setor.
Layout do setor
Por convenção, existem exatamente quatro entradas na tabela de partições primárias no esquema de tabela de partições MBR, embora alguns sistemas operacionais e ferramentas de sistema tenham estendido isso para cinco (Partições Ativas Avançadas (AAP) com o PTS-DOS 6.60 e DR-DOS 7.07), oito (AST e NEC MS-DOS 3.x bem como o Storage Dimensions SpeedStor) ou até dezesseis entradas (com o Ontrack Disk Manager).
Entradas da tabela de partições
Como um artefato da tecnologia de discos rígidos da era do PC XT, a tabela de partições subdivide uma mídia de armazenamento usando unidades de cilindros, cabeças e setores (endereçamento CHS). Esses valores já não correspondem aos seus homônimos nas unidades de disco modernas, além de serem irrelevantes em outros dispositivos, como os discos de estado sólido (SSDs), que não possuem fisicamente cilindros ou cabeças. No esquema CHS, os índices de setores (quase) sempre começaram com o setor 1 em vez do setor 0 por convenção, e devido a um erro em todas as versões do MS-DOS/PC DOS até a 7.10 inclusive, o número de cabeças é geralmente limitado a 255[h] em vez de 256. Quando um endereço CHS é grande demais para caber nesses campos, a tupla (1023, 254, 63) é tipicamente usada hoje em dia, embora em sistemas mais antigos (e com ferramentas de disco antigas) o valor do cilindro frequentemente sofria estouro (wrap around) em módulo na barreira CHS perto de 8 GB, causando ambiguidade e riscos de corrupção de dados. (Se a situação envolver um MBR "de proteção" em um disco com uma GPT, a especificação da Interface de Firmware Extensível da Intel exige o uso da tupla (1023, 255, 63)). O valor do cilindro de 10 bits é registrado em dois bytes para facilitar as chamadas às rotinas de acesso a disco do BIOS INT 13h originais/legadas, onde 16 bits eram divididos em partes de setor e cilindro, e não em limites de bytes.
Imagem: Archives New Zealand · BY · Openverse
Em computadores compatíveis com IBM PC, o firmware de inicialização (contido na ROM BIOS) carrega e executa o registro de inicialização mestre. O PC/XT (modelo 5160) utilizava um microprocessador Intel 8088. Para manter a compatibilidade, todos os sistemas com arquitetura de BIOS x86 iniciam com o microprocessador em um modo de operação chamado modo real. O BIOS lê o MBR do dispositivo de armazenamento para a memória física e, em seguida, direciona o microprocessador para o início do código de inicialização. O BIOS colocará o processador em modo real e começará a executar o programa do MBR, portanto, espera-se que o início do MBR contenha código de máquina em modo real. Como a rotina de inicialização do BIOS carrega e executa exatamente um setor a partir do disco físico, a presença da tabela de partições no MBR junto com o código de inicialização simplifica o design do programa do MBR. Ele contém um pequeno programa que carrega o registro de inicialização do volume (VBR) da partição de destino. O controle é então passado para este código, que fica responsável por carregar o sistema operacional propriamente dito. Esse processo é conhecido como carregamento em cadeia (chain loading).
Imagem: Sergei Golyshev (AFK during workdays) · BY-NC-SA · Openverse
Além do código de inicialização e de uma tabela de partições, os registros mestres de inicialização podem conter uma assinatura de disco. Trata-se de um valor de 32 bits que se destina a identificar de forma única a mídia de disco (em oposição à unidade de disco — já que as duas coisas não são necessariamente as mesmas para discos rígidos removíveis). A assinatura de disco foi introduzida pelo Windows NT versão 3.5, mas agora é usada por vários sistemas operacionais, incluindo o núcleo Linux na versão 2.6 e posteriores. Ferramentas do Linux podem usar a assinatura de disco do NT para determinar a partir de qual disco a máquina inicializou. O Windows NT (e os sistemas operacionais posteriores da Microsoft) usa a assinatura de disco como um índice para todas as partições em qualquer disco que já tenha sido conectado ao computador sob aquele SO; essas assinaturas são mantidas em chaves do Registro do Windows, principalmente para armazenar os mapeamentos persistentes entre as partições de disco e as letras das unidades. Ela também pode ser usada em arquivos BOOT.INI do Windows NT (embora a maioria não o faça), para descrever a localização de partições inicializáveis do Windows NT (ou posterior). Uma chave (entre muitas), onde as assinaturas de disco do NT aparecem no registro do Windows 2000/XP, é:
Imagem: orangeacid · BY · Openverse
O MBR originou-se no PC XT. Computadores compatíveis com IBM PC são little-endian, o que significa que o processador armazena valores numéricos que abrangem dois ou mais bytes na memória começando pelo byte menos significativo. O formato do MBR na mídia reflete essa convenção. Assim, a assinatura do MBR aparecerá em um editor de disco como a sequência 55 AA.[a] A sequência de inicialização no BIOS carregará o primeiro MBR válido que encontrar na memória física do computador no endereço 0x7C00 a 0x7DFF. A última instrução executada no código do BIOS será um "desvio" (jump) para esse endereço, a fim de direcionar a execução para o início da cópia do MBR. A validação primária para a maioria dos BIOSs é a assinatura no deslocamento 0x01FE, embora o desenvolvedor do BIOS possa optar por incluir outras verificações, como verificar se o MBR contém uma tabela de partições válida sem entradas que apontem para setores além da capacidade informada do disco.
Interface BIOS para MBR
O MBR é carregado na localização de memória 0x0000:0x7C00 e com os seguintes registradores da CPU configurados quando o carregador de inicialização anterior (normalmente o IPL no BIOS) passa a execução para ele, desviando para 0x0000:0x7C00 no modo real da CPU. Sistemas com suporte a BIOS Plug-and-Play ou BBS fornecerão um ponteiro para os dados PnP além do DL:
Interface MBR para VBR
Por convenção, um MBR em conformidade com o padrão passa a execução para um VBR carregado com sucesso na localização de memória 0x0000:0x7C00, desviando para 0x0000:0x7C00 no modo real da CPU com os seguintes registradores mantidos ou configurados especificamente: O código do MBR passa informações adicionais para o VBR em muitas implementações: No DR-DOS 7.07, uma interface estendida pode ser fornecida opcionalmente pelo MBR estendido e em conjunto com o LOADER: Em conjunto com a GPT, uma proposta da Enhanced Disk Drive Specification (EDD) 4 para MBR híbrido recomenda outra extensão para a interface:
Imagem: gwilmore · BY-NC-SA · Openverse
Embora seja possível manipular os bytes no setor do MBR diretamente usando vários editores de disco, existem ferramentas para gravar conjuntos fixos de códigos funcionais no MBR. Desde o MS-DOS 5.0, o programa FDISK inclui o parâmetro /MBR, que reescreve o código do MBR. No Windows 2000 e Windows XP, o Console de Recuperação pode ser usado para gravar um novo código de MBR em um dispositivo de armazenamento por meio do comando fixmbr. No Windows Vista e Windows 7, o Ambiente de Recuperação pode ser usado para gravar um novo código de MBR usando o comando BOOTREC /FIXMBR. Alguns utilitários de terceiros também podem ser usados para editar diretamente o conteúdo das tabelas de partições (sem exigir qualquer conhecimento de hexadecimal ou editores de disco/setores), como o MBRWizard.[o] O dd é um comando POSIX comumente usado para ler ou gravar em qualquer posição de um dispositivo de armazenamento, incluindo o MBR. No Linux, o ms-sys pode ser usado para instalar um MBR do Windows. Os projetos GRUB e LILO possuem ferramentas para gravar código no setor do MBR, especificamente o grub-install e o lilo -mbr. O console interativo do GRUB Legacy pode gravar no MBR usando os comandos setup e embed, mas o GRUB2 atualmente exige que o grub-install seja executado de dentro de um sistema operacional.


