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.
O MBR contém as informações sobre como os setores do disco (também conhecidos como "blocos") estão divididos em partições, com cada partição contendo teoricamente um sistema de arquivos. O MBR também contém código executável para funcionar como um carregador para o sistema operacional instalado — geralmente passando o controle para a segunda etapa do carregador ou em conjunto com o registro de inicialização do volume (VBR) de cada partição. Esse código do MBR é comumente chamado de carregador de inicialização (boot loader).
A organização da tabela de partições no MBR limita o espaço máximo de armazenamento endereçável de um disco particionado a 2 TiB (232 × 512 bytes). Abordagens para elevar ligeiramente esse limite utilizando aritmética de 32 bits ou setores de 4096 bytes não são suportadas oficialmente, pois quebram fatalmente a compatibilidade com os carregadores de inicialização existentes, com a maioria dos sistemas operacionais compatíveis com MBR e ferramentas de sistema associadas, além de poderem causar corrupção grave de dados quando usadas fora de ambientes de sistema rigidamente controlados. Portanto, o esquema de particionamento baseado em MBR foi substituído pelo esquema de Tabela de Partições GUID (GPT) em quase todos os computadores novos. Uma GPT pode coexistir com um MBR a fim de fornecer alguma forma limitada de compatibilidade retroativa para sistemas mais antigos.
Os MBRs não estão presentes em mídias não particionadas, como disquetes, superdisquetes ou outros dispositivos de armazenamento configurados para se comportarem como tal, e também não estão necessariamente presentes em unidades usadas em plataformas que não sejam PC.
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.
Em 1996, o suporte ao endereçamento de bloco lógico (LBA) foi introduzido no Windows 95B e no MS-DOS 7.10 (não confundir com o IBM PC-DOS 7.1) para suportar discos maiores que 8 GB. Os carimbos de data/hora do disco (disk timestamps) também foram introduzidos. Isso também refletia a ideia de que o MBR deve ser independente de sistema operacional e de sistema de arquivos. No entanto, essa regra de design foi parcialmente comprometida em implementações mais recentes do MBR da Microsoft, que forçam o acesso CHS para os tipos de partição FAT16B e FAT32 0x06/0x0B, enquanto o LBA é usado para 0x0E/0x0C.
Apesar da documentação às vezes escassa de certos detalhes intrínsecos do formato MBR (o que ocasionalmente causava problemas de compatibilidade), ele foi amplamente adotado como um padrão da indústria de fato, devido à grande popularidade dos computadores compatíveis com PC e à sua natureza semiestática ao longo de décadas. Isso ocorreu a ponto de ser suportado por sistemas operacionais de computador para outras plataformas. Às vezes, isso ocorria em adição a outros padrões preexistentes ou multiplataforma para inicialização (bootstrapping) e particionamento.
As entradas de partição do MBR e o código de inicialização do MBR usados em sistemas operacionais comerciais, no entanto, são limitados a 32 bits. Portanto, o tamanho máximo de disco suportado em discos que utilizam setores de 512 bytes (sejam reais ou emulados) pelo esquema de particionamento MBR (sem aritmética de 32 bits) é limitado a 2 TiB. Consequentemente, um esquema de particionamento diferente deve ser usado para discos maiores, já que estes se tornaram amplamente disponíveis desde 2010. O esquema de particionamento MBR está, por isso, em processo de substituição pela Tabela de Partições GUID (GPT). A abordagem oficial faz pouco mais do que garantir a integridade dos dados empregando um MBR de proteção (protective MBR). Especificamente, ela não fornece compatibilidade retroativa com sistemas operacionais que também não suportam o esquema GPT. Enquanto isso, múltiplas formas de MBRs híbridos foram projetadas e implementadas por terceiros para manter partições localizadas nos primeiros 2 TiB físicos de um disco em ambos os esquemas de particionamento "em paralelo" e/ou para permitir que sistemas operacionais mais antigos inicializem a partir de partições GPT também. A atual natureza não padronizada dessas soluções causa vários problemas de compatibilidade em certos cenários.
O MBR consiste em 512 ou mais bytes localizados no primeiro setor da unidade.
Ele pode conter um ou mais dos seguintes itens:
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.
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).
| Endereço | Descrição | Tamanho (bytes) | |
|---|---|---|---|
0x0000 (0) |
Área do código de inicialização (bootstrap) | 446 | |
0x01BE (446) |
Entrada de partição №1 | Tabela de partições (para partições primárias) |
16 |
0x01CE (462) |
Entrada de partição №2 | 16 | |
0x01DE (478) |
Entrada de partição №3 | 16 | |
0x01EE (494) |
Entrada de partição №4 | 16 | |
0x01FE (510) |
0x55 |
Assinatura de inicialização | 2 |
0x01FF (511) |
0xAA | ||
| Tamanho total: 446 + 4×16 + 2 | 512 | ||
| Endereço | Descrição | Tamanho (bytes) | |
|---|---|---|---|
0x0000 (0) | Área do código de inicialização (parte 1) | 218 | |
0x00DA (218) |
0x0000 |
Carimbo de data/hora do disco (opcional; Windows 95B/98/98SE/ME (MS-DOS 7.1–8.0). Alternativamente, pode servir como assinatura do carregador OEM com NEWLDR) | 2 |
0x00DC (220) |
Unidade física original (0x80–0xFF) |
1 | |
0x00DD (221) |
Segundos (0–59) | 1 | |
0x00DE (222) |
Minutos (0–59) | 1 | |
0x00DF (223) |
Horas (0–23) | 1 | |
0x00E0 (224) | Área do código de inicialização (parte 2, entrada do código em 0x0000) |
216 (ou 222) | |
0x01B8 (440) |
Assinatura de disco de 32 bits | Assinatura de disco (opcional; UEFI, Linux, família Windows NT e outros SOs) | 4 |
0x01BC (444) |
0x0000 (0x5A5A se for protegido contra cópia) |
2 | |
0x01BE (446) |
Entrada de partição №1 | Tabela de partições (para partições primárias) |
16 |
0x01CE (462) |
Entrada de partição №2 | 16 | |
0x01DE (478) |
Entrada de partição №3 | 16 | |
0x01EE (494) |
Entrada de partição №4 | 16 | |
0x01FE (510) |
0x55 |
Assinatura de inicialização | 2 |
0x01FF (511) |
0xAA | ||
| Tamanho total: 218 + 6 + 216 + 6 + 4×16 + 2 | 512 | ||
| Endereço | Descrição | Tamanho (bytes) | |
|---|---|---|---|
0x0000 (0) | Área do código de inicialização | 428 | |
0x01AC (428) |
0x78 |
Assinatura AAP (opcional) | 2 |
0x01AD (429) |
0x56 | ||
0x01AE (430) |
Unidade física AAP (0x80–0xFE; 0x00: não usada; 0x01–0x7F, 0xFF: reservadas) |
Registro AAP (opcional) (entrada de partição AAP #0 com semântica especial) | 1 |
0x01AF (431) |
Endereço CHS (inicial) da partição AAP/arquivo de imagem ou VBR/EBR | 3 | |
0x01B2 (434) |
Reservado para tipo de partição AAP (0x00 se não usado) (opcional) |
1 | |
0x01B3 (435) |
Reservado para endereço CHS final no AAP (opcional; o byte no deslocamento 0x01B5 também é usado para a soma de verificação do MBR (PTS DE, BootWizard); 0x000000 se não usado) |
3 | |
0x01B6 (438) |
LBA inicial do arquivo de imagem AAP ou VBR/EBR ou setores relativos da partição AAP (copiado para o deslocamento +01Chex no setor carregado sobre a entrada de "setores ocultos" de um BPB DOS 3.31 (ou emulação dele) para também suportar a inicialização por EBR) |
4 | |
0x01BA (442) |
Reservado para setores no AAP (opcional; 0x00000000 se não usado) |
4 | |
0x01BE (446) |
Entrada de partição №1 | Tabela de partições (para partições primárias) |
16 |
0x01CE (462) |
Entrada de partição №2 | 16 | |
0x01DE (478) |
Entrada de partição №3 | 16 | |
0x01EE (494) |
Entrada de partição №4 | 16 | |
0x01FE (510) |
0x55 |
Assinatura de inicialização | 2 |
0x01FF (511) |
0xAA | ||
| Tamanho total: 428 + 2 + 16 + 4×16 + 2 | 512 | ||
| Endereço | Descrição | Tamanho (bytes) | |
|---|---|---|---|
0x0000 (0) |
JMPS (EBhex) / Tamanho do registro NEWLDR (frequentemente 0x0A/0x16/0x1C para início do código em 0x000C/0x0018/0x001E) |
Registro NEWLDR (opcional) | 2 |
0x0002 (2) |
Assinatura "NEWLDR" |
6 | |
0x0008 (8) |
Unidade física do LOADER e flag de inicialização (0x80–0xFE, 0x00–0x7E, 0xFF, 0x7F) (se não usado, este e os 3 bytes seguintes devem ser todos 0) |
1 | |
0x0009 (9) |
Endereço CHS do setor de inicialização do LOADER ou arquivo de imagem (ex: IBMBIO.LDR) (0x000000 se não usado) |
3 | |
0x000C (12) |
Mínimo permitido para o registrador DL, caso contrário, obtém da tabela de partições (0x80: padrão; 0x00: sempre usar DL; 0xFF: sempre usar entrada da tabela) |
1 | |
0x000D (13) |
Reservado (padrão: 0x000000) |
3 | |
0x0010 (16) |
LBA do setor de inicialização do LOADER ou arquivo de imagem (opcional; 0x00000000 se não usado) |
4 | |
0x0014 (20) |
Deslocamento de correção (patch) da unidade de boot do VBR (padrão 0x0000 se não usado, caso contrário 0024hex ou 01FDhex) |
2 | |
0x0016 (22) |
Soma de verificação (0x0000 se não usada) |
2 | |
0x0018 (24) |
Assinatura do carregador OEM ("MSWIN4" para REAL/32, veja também o deslocamento +0DAhex, corresponde ao rótulo OEM no deslocamento +003hex em VBRs (opcional) |
6 | |
| Varia | Área do código de inicialização (entrada do código em 0x0000) |
Varia | |
0x01AC (428) |
0x78 |
Assinatura AAP (opcional) | 2 |
0x01AD (429) |
0x56 | ||
0x01AE (430) |
Entrada de partição AAP №0 com semântica especial | Registro AAP (opcional) | 16 |
0x01BE (446) |
Entrada de partição №1 | Tabela de partições (para partições primárias) |
16 |
0x01CE (462) |
Entrada de partição №2 | 16 | |
0x01DE (478) |
Entrada de partição №3 | 16 | |
0x01EE (494) |
Entrada de partição №4 | 16 | |
0x01FE (510) |
0x55 |
Assinatura de inicialização | 2 |
0x01FF (511) |
0xAA | ||
| Tamanho total: 30 + 398 + 2 + 16 + 4×16 + 2 | 512 | ||
| Endereço | Descrição | Tamanho (bytes) | |
|---|---|---|---|
0x0000 (0) | Área do código de inicialização | 380 | |
0x017C (380) |
0x5A |
Assinatura AST/NEC (opcional; não se aplica ao SpeedStor) | 2 |
0x017D (381) |
0xA5 | ||
0x017E (382) |
Entrada de partição №8 | Tabela de partições expandida AST/NEC (opcional; também para SpeedStor) |
16 |
0x018E (398) |
Entrada de partição №7 | 16 | |
0x019E (414) |
Entrada de partição №6 | 16 | |
0x01AE (430) |
Entrada de partição №5 | 16 | |
0x01BE (446) |
Entrada de partição №4 | Tabela de partições (para partições primárias) |
16 |
0x01CE (462) |
Entrada de partição №3 | 16 | |
0x01DE (478) |
Entrada de partição №2 | 16 | |
0x01EE (494) |
Entrada de partição №1 | 16 | |
0x01FE (510) |
0x55 |
Assinatura de inicialização | 2 |
0x01FF (511) |
0xAA | ||
| Tamanho total: 380 + 2 + 4×16 + 4×16 + 2 | 512 | ||
| Endereço | Descrição | Tamanho (bytes) | |
|---|---|---|---|
0x0000 (0) | Área do código de inicialização (bootstrap) | 252 | |
0x00FC (252) |
0xAA |
Assinatura DM (opcional) | 2 |
0x00FD (253) |
0x55 | ||
0x00FE (254) |
Entrada de partição | Tabela de partições expandida DM (opcional) |
16 |
0x010E (270) |
Entrada de partição | 16 | |
0x011E (286) |
Entrada de partição | 16 | |
0x012E (302) |
Entrada de partição | 16 | |
0x013E (318) |
Entrada de partição | 16 | |
0x014E (334) |
Entrada de partição | 16 | |
0x015E (350) |
Entrada de partição | 16 | |
0x016E (366) |
Entrada de partição | 16 | |
0x017E (382) |
Entrada de partição | 16 | |
0x018E (398) |
Entrada de partição | 16 | |
0x019E (414) |
Entrada de partição | 16 | |
0x01AE (430) |
Entrada de partição | 16 | |
0x01BE (446) |
Entrada de partição №1 | Tabela de partições (para partições primárias) |
16 |
0x01CE (462) |
Entrada de partição №2 | 16 | |
0x01DE (478) |
Entrada de partição №3 | 16 | |
0x01EE (494) |
Entrada de partição №4 | 16 | |
0x01FE (510) |
0x55 |
Assinatura de inicialização | 2 |
0x01FF (511) |
0xAA | ||
| Tamanho total: 252 + 2 + 12×16 + 4×16 + 2 | 512 | ||
| Deslocamento (bytes) | Tamanho do campo | Descrição | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0x00 | 1 byte | Status ou unidade física (o bit 7 definido indica ativa ou inicializável; MBRs antigos só aceitam 0x80, 0x00 significa inativa e 0x01–0x7F representam inválida) | ||||||||||||||||||
| 0x01 | 3 bytes | Endereço CHS do primeiro setor absoluto na partição. O formato é descrito por três bytes, veja as próximas três linhas. | ||||||||||||||||||
| 0x01 | 1 byte |
| ||||||||||||||||||
| 0x02 | 1 byte |
| ||||||||||||||||||
| 0x03 | 1 byte |
| ||||||||||||||||||
| 0x04 | 1 byte | Tipo de partição | ||||||||||||||||||
| 0x05 | 3 bytes | Endereço CHS do último setor absoluto na partição. O formato é descrito por 3 bytes, veja as próximas 3 linhas. | ||||||||||||||||||
| 0x05 | 1 byte |
| ||||||||||||||||||
| 0x06 | 1 byte |
| ||||||||||||||||||
| 0x07 | 1 byte |
| ||||||||||||||||||
| 0x08 | 4 bytes | LBA do primeiro setor absoluto na partição | ||||||||||||||||||
| 0x0C | 4 bytes | Número de setores na partição | ||||||||||||||||||
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 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.
Devido aos limites do endereçamento CHS, foi feita uma transição para o uso de LBA, ou endereçamento de bloco lógico. Tanto o comprimento quanto o endereço inicial da partição são valores de setor armazenados nas entradas da tabela de partições como quantidades de 32 bits. O tamanho do setor costumava ser considerado fixo em 512 (29) bytes, e uma ampla gama de componentes importantes, incluindo chipsets, setores de inicialização, sistemas operacionais, motores de banco de dados, ferramentas de particionamento, utilitários de cópia de segurança e de sistema de arquivos, além de outros softwares, tinham esse valor em código rígido (hard-coded). Desde o final de 2009, estão disponíveis unidades de disco que empregam setores de 4096 bytes (4Kn ou Advanced Format), embora o tamanho do setor para algumas dessas unidades ainda fosse reportado como 512 bytes ao sistema hospedeiro por meio de conversão no firmware do disco rígido, sendo chamadas de unidades de emulação de 512 bytes (512e).
Como os endereços e tamanhos dos blocos são armazenados na tabela de partições de um MBR usando 32 bits, o tamanho máximo, bem como o endereço inicial mais alto de uma partição que utiliza unidades com setores de 512 bytes (reais ou emulados), não pode exceder 2 TiB−512 bytes (2.199.023.255.040 bytes ou 4.294.967.295 (232−1) setores × 512 (29) bytes por setor). Mitigar essa limitação de capacidade foi uma das principais motivações para o desenvolvimento da GPT.
Como as informações de particionamento são armazenadas na tabela de partições do MBR por meio de um endereço de bloco inicial e um comprimento, em teoria seria possível definir partições de tal forma que o espaço alocado para um disco com setores de 512 bytes resultasse em um tamanho total próximo a 4 TiB, se todas as partições menos uma estivessem localizadas abaixo do limite de 2 TiB e a última fosse definida como iniciando no bloco 232−1 ou perto dele, especificando seu tamanho em até 232−1. Isso definiria uma partição que exige 33 em vez de 32 bits para que o endereço do setor seja acessado. No entanto, na prática, apenas certos sistemas operacionais habilitados para LBA-48, incluindo o Linux, FreeBSD e Windows 7, que utilizam internamente endereços de setor de 64 bits, realmente suportam isso. Devido a restrições de espaço de código e à própria natureza da tabela de partições do MBR em suportar apenas 32 bits, os setores de inicialização, mesmo se habilitados para suportar LBA-48 em vez de LBA-28, frequentemente usam cálculos de 32 bits, a menos que sejam projetados especificamente para suportar a faixa completa de endereços do LBA-48 ou se destinem a rodar apenas em plataformas de 64 bits. Qualquer código de inicialização ou sistema operacional que utilize internamente endereços de setor de 32 bits faria com que os endereços sofressem estouro ao acessar essa partição, resultando em uma corrupção grave de dados em todas as partições.
Para discos que apresentam um tamanho de setor diferente de 512 bytes, como unidades externas USB, também existem limitações. Um tamanho de setor de 4096 resulta em um aumento de oito vezes no tamanho de uma partição que pode ser definida usando MBR, permitindo partições de até 16 TiB (232 × 4096 bytes) de tamanho. Versões do Windows mais recentes do que o Windows XP suportam tamanhos de setor maiores, assim como o Mac OS X, e o Linux suporta tamanhos de setor maiores desde a versão 2.6.31 ou 2.6.32, mas problemas com carregadores de inicialização, ferramentas de particionamento e implementações de BIOS de computadores apresentam certas limitações, uma vez que frequentemente são programados de forma rígida para reservar apenas 512 bytes para buffers de setor, fazendo com que a memória seja sobrescrita no caso de setores maiores. Isso também pode causar um comportamento imprevisível e, portanto, deve ser evitado quando a compatibilidade e a conformidade com os padrões forem uma prioridade.
Quando um dispositivo de armazenamento de dados foi particionado com o esquema GPT, o registro mestre de inicialização ainda conterá uma tabela de partições, mas seu único propósito é indicar a existência da GPT e evitar que programas utilitários que compreendem apenas o esquema de tabela de partições MBR criem novas partições no que, de outra forma, veriam como espaço livre no disco, apagando acidentalmente a GPT.
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).
Programas de código de MBR populares foram criados para inicializar o PC DOS e o MS-DOS, e códigos de inicialização semelhantes continuam em amplo uso. Esses setores de inicialização esperam que o esquema de tabela de partições do FDISK esteja em uso e varrem a lista de partições na tabela embutida do MBR para encontrar a única que está marcada com a flag de ativa. Ele então carrega e executa o registro de inicialização do volume (VBR) da partição ativa.
Existem implementações alternativas de código de inicialização, algumas das quais são instaladas por gerenciadores de inicialização, que operam de diversas maneiras. Alguns códigos de MBR carregam um código adicional para o gerenciador de inicialização a partir da primeira trilha do disco, que assumem ser um espaço "livre" não alocado a nenhuma partição de disco, e o executam. Um programa MBR pode interagir com o usuário para determinar qual partição de qual unidade deve inicializar, podendo transferir o controle para o MBR de uma unidade diferente. Outros códigos de MBR contêm uma lista de locais do disco (frequentemente correspondentes ao conteúdo de arquivos em um sistema de arquivos) do restante do código do gerenciador de inicialização para carregar e executar. (O primeiro método depende de um comportamento que não é universal entre todos os utilitários de particionamento de disco, principalmente aqueles que leem e gravam GPTs. O último exige que a lista embutida de locais de disco seja atualizada sempre que forem feitas alterações que realoquem o restante do código).
Em máquinas que não usam processadores x86, ou em máquinas x86 com firmware que não seja BIOS, como Open Firmware ou firmware Extensible Firmware Interface (EFI), esse design é inadequado, e o MBR não é usado como parte da inicialização do sistema. Em vez disso, o firmware EFI é capaz de compreender diretamente o esquema de particionamento GPT e o formato de sistema de arquivos FAT, carregando e executando programas mantidos como arquivos na partição de sistema EFI. O MBR estará envolvido apenas na medida em que possa conter uma tabela de partições para fins de compatibilidade, caso o esquema de tabela de partições GPT tenha sido utilizado.
Existe algum código de substituição do MBR que emula a inicialização do firmware EFI, o que torna as máquinas não EFI capazes de inicializar a partir de discos que utilizam o esquema de particionamento GPT. Ele detecta uma GPT, coloca o processador no modo de operação correto e carrega o código compatível com EFI do disco para concluir essa tarefa.

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, é:
HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\
Se a assinatura de um disco armazenada no MBR fosse A8 E1 B9 D2 (nessa ordem) e sua primeira partição correspondesse à unidade lógica C: sob o Windows, os dados em REG_BINARY sob o valor da chave \DosDevices\C: seriam:
A8 E1 B9 D2 00 7E 00 00 00 00 00 00
Os quatro primeiros bytes são a referida assinatura do disco. (Em outras chaves, esses bytes podem aparecer na ordem inversa da encontrada no setor do MBR). Eles são seguidos por mais oito bytes, formando um inteiro de 64 bits em notação little-endian, que são usados para localizar o deslocamento em bytes desta partição. Neste caso, 00 7E corresponde ao valor hexadecimal 0x7E00 (32.256). Sob a suposição de que a unidade em questão reporte um tamanho de setor de 512 bytes, a divisão desse deslocamento em bytes por 512 resulta em 63, que é o número do setor físico (ou LBA) que contém o primeiro setor da partição (ao contrário da contagem de setores usada no valor de setores das tuplas CHS, que começa a contar a partir de um, o valor do setor absoluto ou LBA começa a contar a partir de zero).
Se este disco tivesse outra partição com os valores 00 F8 93 71 02 após a assinatura do disco (sob, por exemplo, o valor da chave \DosDevices\D:), ela começaria no deslocamento em bytes 0x00027193F800 (10.495.457.280), que também é o primeiro byte do setor físico 20.498.940.
A partir do Windows Vista, a assinatura do disco também é armazenada no repositório de Dados de Configuração da Inicialização (BCD), e o processo de boot depende dela. Se a assinatura do disco mudar, não puder ser encontrada ou apresentar um conflito, o Windows ficará impossibilitado de inicializar. A menos que o Windows seja forçado a usar a parte sobreposta do endereço LBA da entrada da Partição Ativa Avançada como uma pseudo-assinatura de disco, o uso do Windows entra em conflito com o recurso de Partição Ativa Avançada do PTS-DOS 7 e do DR-DOS 7.07, em particular se o código de inicialização deles estiver localizado fora dos primeiros 8 GB do disco, fazendo com que o endereçamento LBA precise ser obrigatoriamente utilizado.
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 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.
Para o BIOS, discos removíveis (ex: disquetes) e fixos são essencialmente a mesma coisa. Para qualquer um deles, o BIOS lê o primeiro setor físico da mídia para a RAM no endereço absoluto 0x7C00, verifica a assinatura nos dois últimos bytes do setor carregado e, se a assinatura correta for encontrada, transfere o controle para o primeiro byte do setor com uma instrução de desvio (JMP). A única distinção real que o BIOS faz é que (por padrão, ou se a ordem de boot não for configurável) ele tenta inicializar a partir do primeiro disco removível antes de tentar inicializar a partir do primeiro disco fixo. Sob a perspectiva do BIOS, a ação do MBR ao carregar um registro de inicialização de volume na RAM é exatamente idêntica à ação do registro de inicialização de volume de um disquete ao carregar o código objeto de um carregador de sistema operacional na RAM. Em ambos os casos, o programa que o BIOS carregou está realizando o trabalho de carregamento em cadeia de um sistema operacional.
Embora o código do setor de inicialização do MBR espere ser carregado no endereço físico 0x0000:0x7C00, toda a memória desde o endereço físico 0x0000:0x0501 (o endereço 0x0000:0x0500 é o último usado por um BIOS Phoenix) até 0x0000:0x7FFF, expandida posteriormente para 0x0000:0xFFFF (e às vezes até 0x9000:0xFFFF) — o final dos primeiros 640 KB — está disponível em modo real. A chamada de interrupção do BIOS INT 12h pode ajudar a determinar quanta memória pode ser alocada com segurança (por padrão, ela simplesmente lê o tamanho da memória base em KB a partir da localização segmento:deslocamento 0x0040:0x0013, mas pode ser interceptada por outros softwares residentes de pré-inicialização, como sobreposições de BIOS, códigos RPL ou vírus, para reduzir a quantidade relatada de memória disponível, evitando que outros softwares de etapas de boot seguintes, como setores de inicialização, os sobrescrevam).
Os últimos 66 bytes do MBR de 512 bytes são reservados para a tabela de partições e outras informações, de modo que o programa do setor de inicialização do MBR deve ser pequeno o suficiente para caber em 446 bytes de memória ou menos.
O código do MBR examina a tabela de partições, seleciona uma partição adequada e carrega o programa que executará a próxima etapa do processo de boot, geralmente fazendo uso de chamadas de interrupção do BIOS INT 13h. O código de inicialização do MBR carrega e executa o código de um registro de inicialização do volume (dependente do carregador de inicialização ou do sistema operacional) localizado no início da partição "ativa". O registro de inicialização do volume caberá dentro de um setor de 512 bytes, mas é seguro para o código do MBR carregar setores adicionais para acomodar carregadores de inicialização mais longos que um setor, desde que eles não façam suposições sobre o tamanho do setor. Na verdade, pelo menos 1 KB de RAM está disponível no endereço 0x7C00 em todas as máquinas das classes IBM XT e AT, de modo que um setor de 1 KB poderia ser usado sem problemas. Assim como o MBR, um registro de inicialização de volume normalmente espera ser carregado no endereço 0x0000:0x7C00. Isso decorre do fato de que o design do registro de inicialização do volume originou-se em mídias não particionadas, onde ele seria diretamente carregado pelo procedimento de boot do BIOS; como mencionado acima, o BIOS trata MBRs e registros de inicialização de volume (VBRs) exatamente da mesma forma. Como essa é a mesma localização onde o MBR é carregado, uma das primeiras tarefas de um MBR é realocar a si mesmo para outro lugar na memória. O endereço de realocação é determinado pelo MBR, mas na maioria das vezes é 0x0000:0x0600 (para códigos de MBR do MS-DOS/PC DOS, OS/2 e Windows) ou 0x0060:0x0000 (maioria dos MBRs do DR-DOS). (Ainda que ambos os endereços segmentados apontem para o mesmo endereço de memória física em modo real, para que o Apple Darwin inicialize, o MBR deve ser realocado para 0x0000:0x0600 em vez de 0x0060:0x0000, pois o código depende do ponteiro DS:SI para a entrada de partição fornecida pelo MBR, mas erroneamente refere-se a ele apenas via 0x0000:SI.) É importante não fazer a realocação para outros endereços na memória porque muitos VBRs assumirão um certo layout de memória padrão ao carregar seu arquivo de boot.
O campo Status em um registro de tabela de partições é usado para indicar uma partição ativa. MBRs em conformidade com os padrões permitirão apenas uma partição marcada como ativa e usarão isso como parte de uma verificação de integridade para determinar a existência de uma tabela de partições válida. Eles exibirão uma mensagem de erro se mais de uma partição tiver sido marcada como ativa. Alguns MBRs não padronizados não tratarão isso como uma condição de erro e apenas usarão a primeira partição marcada na linha.
Tradicionalmente, valores diferentes de 0x00 (não ativa) e 0x80 (ativa) eram inválidos e o programa de inicialização exibia uma mensagem de erro ao encontrá-los. No entanto, a Plug and Play BIOS Specification e a BIOS Boot Specification (BBS) permitiram que outros dispositivos também se tornassem inicializáveis a partir de 1994. Consequentemente, com a introdução do MS-DOS 7.10 (Windows 95B) e superiores, o MBR começou a tratar o bit 7 definido como uma flag de ativação e exibia uma mensagem de erro apenas para os valores 0x01..0x7F. Ele continuou a tratar a entrada como a unidade de disco física a ser usada ao carregar o VBR da partição correspondente mais tarde, aceitando assim outras unidades de boot além de 0x80 como válidas; contudo, o MS-DOS não fazia uso dessa extensão por si só. O armazenamento do número real da unidade física na tabela de partições normalmente não causa problemas de compatibilidade retroativa, já que o valor diferirá de 0x80 apenas em unidades que não sejam a primeira (as quais, de qualquer forma, não eram inicializáveis anteriormente). No entanto, mesmo em sistemas habilitados para dar boot a partir de outras unidades, a extensão pode ainda não funcionar universalmente, por exemplo, após a atribuição de unidades físicas pelo BIOS mudar quando unidades são removidas, adicionadas ou trocadas. Portanto, de acordo com a BIOS Boot Specification (BBS), a melhor prática para um MBR moderno que aceita o bit 7 como flag de ativação é repassar o valor DL originalmente fornecido pelo BIOS em vez de usar a entrada da tabela de partições.
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:
$PnP"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:
0x000C), traduzir unidades não padronizadas da Wyse 0x02..0x7F para 0x80..0xFD e, opcionalmente, corrigir o valor da unidade (armazenado no deslocamento 0x019 no Bloco de Parâmetros de BIOS Estendido (EBPB) ou no deslocamento de setor 0x01FD) em VBRs carregados antes de passar a execução para eles (veja o deslocamento do NEWLDR 0x0014) — isso também permite que outros carregadores de inicialização usem o NEWLDR como um carregador em cadeia, configurem sua imagem em memória dinamicamente e criem um "túnel" para o carregamento de VBRs, EBRs ou AAPs através do NEWLDR.O código do MBR passa informações adicionais para o VBR em muitas implementações:
boot1h, boot1u da Apple e o boot1fat32 de David Elliott) também dependem desse ponteiro, mas, adicionalmente, eles não usam o DS, assumindo que ele esteja definido como 0x0000 em seu lugar. Isso causará problemas se essa suposição estiver incorreta. O código de MBR do OS/2, MS-DOS 2.0 a 8.0, PC DOS 2.0 a 7.10 e Windows NT/2000/XP também fornece essa mesma interface, embora esses sistemas não a utilizem. Os MBRs do Windows Vista/7 não fornecem mais esse ponteiro DS:SI. Enquanto algumas extensões dependem apenas da própria entrada da tabela de partições de 16 bytes, outras extensões podem exigir que toda a tabela de partições de 4 (ou 5 entradas) também esteja presente.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:
!GPT")$PnP" (veja acima)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 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.
Vários programas são capazes de criar uma "cópia de segurança (backup)" tanto da tabela de partições primárias quanto das partições lógicas na partição estendida.
O comando sfdisk do Linux (em um SystemRescueCD) é capaz de salvar um backup da tabela de partições primárias e estendidas. Ele cria um arquivo que pode ser lido em um editor de texto, ou esse arquivo pode ser usado pelo sfdisk para restaurar a tabela de partições primárias/estendidas. Um exemplo de comando para fazer o backup da tabela de partições é sfdisk -d /dev/hda > hda.out e para restaurar é sfdisk /dev/hda < hda.out. É possível copiar a tabela de partições de um disco para outro dessa forma, o que é útil para configurar espelhamento (mirroring), mas o sfdisk executa o comando sem exibir confirmações/avisos usando sfdisk -d /dev/sda | sfdisk /dev/sdb.
55hex AAhex, isto é, 0x55 no deslocamento 0x01FE e AAhex no deslocamento 0x01FF. Como a representação little-endian deve ser assumida no contexto de máquinas compatíveis com IBM PC, isso pode ser escrito como a palavra de 16 bits AA55hex em programas para processadores x86 (note a ordem invertida), ao passo que teria que ser escrita como 55AAhex em programas para outras arquiteturas de CPU que utilizam uma representação big-endian. Como isso foi confundido inúmeras vezes em livros e até mesmo em documentos de referência originais da Microsoft, este artigo utiliza a representação em disco byte a byte baseada em deslocamento para evitar qualquer possível interpretação incorreta.00 00 00 00 00 00hex, a menos que o código armazenado no MBR seja conhecido. O Windows adere a essa regra.0000hex:7C00hex é o primeiro byte do 32º KB de RAM. O carregamento do programa de boot nesse endereço historicamente foi a razão pela qual, embora o tamanho mínimo de RAM de um IBM PC original (modelo 5150) fosse de 16 KB, 32 KB eram necessários para a opção de disco no IBM XT.A0000hex ou 655.360 bytes) de memória. Em teoria, apenas 32 KB (até 0000hex:7FFFhex) ou 64 KB (até 0000hex:FFFFhex) têm garantia de existência; esse seria o caso em uma máquina da classe IBM XT equipada apenas com a quantidade mínima necessária de memória para um sistema de disco.Cada sistema operacional inclui ferramentas para gerenciar partições MBR. Infelizmente, cada sistema operacional lida com partições MBR de uma maneira ligeiramente diferente.
Matthias [R.] Paul escreve: "[...] PTS-DOS [usa] uma quinta entrada de partição especial na frente das outras quatro entradas no MBR e o código de bootstrap correspondente do MBR compatível com AAP. [...]"
Alguns sistemas OEM, como o AST DOS (tipo(N.B. As tabelas de partições do NEC MS-DOS 3.30 e AST MS-DOS com oito entradas são precedidas por uma assinatura14hex) e o NEC DOS (tipo24hex) tinham 8 em vez de 4 entradas de partição em seus setores de MBR. (Matthias R. Paul).
A55Ahex no deslocamento 0x017C.)Quando adicionamos partições a esta tabela da NEC, a primeira foi colocada nos deslocamentos 0x01EE até 0x01FD e a próxima entrada foi adicionada logo acima dela. Portanto, as entradas são inseridas e listadas de trás para frente em relação a uma tabela normal. Assim, ao olhar para tal tabela com um editor de disco ou utilitário de listagem de partições, ela mostraria a primeira entrada em uma tabela de oito entradas da NEC como sendo a última (quarta entrada) em uma tabela de partições normal.(N.B. Mostra uma tabela de partições de 8 entradas e onde seu código de boot difere do MS-DOS 3.30.)
0x7C00 in x86?». Glamenv-Septzen.net. Consultado em 4 de maio de 2011. Cópia arquivada em 24 de agosto de 2017[…] SYS […] /O[:nnn] Substitui a unidade de boot relatada pelo IPL (n=0..126, 128..254). […] Preparando o disco de destino... Escolhendo o Setor de Boot CHS FAT12 (requer que o IPL relate a unidade de boot). Tratando o destino como disquete ou mídia superfloppy (unidade de boot 0). Gravando o novo Setor de Boot... […](N.B. O comando SYS grava setores de inicialização de volume (VBR) em vez de master boot records, mas a interface de registradores de entrada deles é semelhante (com extensões), uma vez que ambos podiam ser carregados inicialmente pelo sistema subjacente.)