Master Boot Record (MBR) é um setor de boot que contém código de máquina para ser carregado na memória RAM e executado pelo firmware da máquina e está posicionado nos primeiros bytes de um dispositivo de armazenamento de dados (disco físico ou removível). Este setor contém informações das partições do disco: onde se localizam, de que tipo são e o tamanho de cada uma (Partition Table – Tabela de Partições). Caso uma dessas entradas esteja corrompida de alguma forma, o sistema não consegue iniciar.
A MBR ocupa o primeiro setor inteiro – 512 bytes – e se organiza assim:
Endereço Offset (Hex) | Descrição | Bytes | |
0x0 | Área do código de inicialização | 446 | |
0x1BE | Dados da Partição 1 | Tabela de Partições | 16 |
0x1CE | Dados da Partição 2 | 16 | |
0x1DE | Dados da Partição 3 | 16 | |
0x1EE | Dados da Partição 4 | 16 | |
0x1FE | Assinatura do MBR (MBR Magic number) | 2 | |
Total: 446+16+16+16+16+2 | 512 |
Vamos ver isso na prática. Para isso vou usar um Editor Hexadecimal, Editor de Disco e Editor de Memória grátis chamado “HxD”. Para isso clicarei em “Tools”>”Open Disk” e selecionarei meu “Hard disk 1”
Analisando a Tabela de Partições
A tabela de partições tem a seguinte estrutura:
Endereço Offset (Hex) | Descrição | Bytes |
0x0 | Status de Boot | 1 |
0x1 | Endereço CHS (Cylinder, Head, Sector – Cilindro, Cabeça, Setor) de início da partição | 3 |
0x4 | Tipo de Partição | 1 |
0x5 | Endereço CHS do fim da partição | 3 |
0x8 | Setor que começa a partição | 4 |
0xC | Tamanho da partição em Setores | 4 |
Vamos ver isso no HxD. Primeiro vamos para o endereço offset 0x1BE.
Na caixinha amarela contém as informações da partição 1, na caixinha roxa contém as informações da partição 2, na caixinha marrom contém as informações da partição 3 e na caixinha preta contém as informações da partição 4. Vamos dissecar as informações da partição 1 (primeira caixinha):
Offset (Hexa) | Valor (Hexa) | O que é | Explicação |
0x0 | 80 | Status de Boot | De forma geral dois valores são usados: 0x80 (significa que a partição está ativa ou é bootável) e 0x00 (significa que a partição está inativa ou não é bootável). Geralmente apenas partições primárias são 0x80 |
0x1 | 20 21 00 | Endereço CHS do início da partição | Estes valores são armazenados em “little-endian”. Por isso devem ser lidos de trás para frente. Outra coisa a se notar é que, por algum motivo, eles são colocados na ordem: “Cabeça, Setor e Cilindro” |
0x4 | 07 | Tipo de Partição | Neste exemplo, o tipo de partição 07 significa que o sistema de arquivos é HPFS ou NTFS (ou alguns outros formatos difíceis de encontrar e, por isso, não citarei aqui) |
0x5 | DF 13 0C | Endereço CHS do fim da partição | Mesma coisa do “Endereço CHS do início da partição” |
0x8 | 00 08 00 00 | Endereço do “setor” onde se encontra a partição | Este valor é armazenado em little-endian. Portanto deve ser lido de “trás para frente”. 00 00 08 00 = 800 (hex). Isso significa que o início da partição deste exemplo está no setor 800 (ou setor 2048) |
0xC | 00 20 03 00 | Número de setores na partição | Este valor está em little-endian. Deve ser lido desta forma: 00 03 20 00 = 32000 (hex) Portanto essa partição tem 204.800 setores |
Agora que dissecamos tudo isso, vamos analisar melhor isso e confirmar o que vimos. Vimos que o setor que inicia essa partição é o setor 2048. Vamos neste setor para ver se realmente inicia essa partição.
Vemos que no setor 2048 realmente inicia uma partição do tipo “NTFS” (confirmando o tipo de partição da tabela de partições).
No último campo da tabela de partições vemos que a partição tem 204.800 setores. Cada setor tem 512 bytes. Portanto essa partição deve ter 104.857.600 Bytes, que equivale a 102.400 KB, que equivale a 100 MB exatos! Entrando em “Ferramentas Administrativas > Gerenciamento do Computador > Gerenciamento de disco”, tenho o seguinte resultado:
E confirmo que a partição 1 tem exatos 100 MB, tipo NTFS (de novo) e que está marcada como “Ativa”.
Show de bola, muito interessante Rafa!
Valeu por compartilhar conhecimento!!