Sistemas de arquivos · Aula 1 de 8
Discos, partições e volumes
12 min de leitura
Antes de analisar qualquer sistema de arquivos, o perito precisa saber onde ele começa. Esta aula explica como um disco é endereçado, como o MBR e a GPT descrevem seu espaço, como as partições diferem dos volumes e como converter uma entrada da tabela de partições no offset exato do qual todas as ferramentas posteriores dependem.
Setores e endereçamento LBA
Um disco se apresenta como uma sequência numerada de blocos de tamanho fixo chamados setores. Os sistemas modernos os endereçam por endereçamento de blocos lógicos (LBA): o primeiro setor é o LBA 0, o seguinte é o LBA 1, e assim por diante. O offset em bytes de qualquer setor é simplesmente LBA × tamanho do setor lógico.
Durante décadas, o tamanho do setor foi de 512 bytes. As unidades Advanced Format usam setores físicos de 4.096 bytes e existem em duas variantes:
| Formato | Setor lógico | Setor físico | O que o SO e sua imagem enxergam |
|---|---|---|---|
| 512n (legado) | 512 bytes | 512 bytes | LBAs de 512 bytes |
| 512e (emulação) | 512 bytes | 4.096 bytes | LBAs de 512 bytes; a unidade mapeia 8 setores lógicos para cada setor físico |
| 4Kn (nativo) | 4.096 bytes | 4.096 bytes | LBAs de 4.096 bytes |
Todas as estruturas de particionamento contam em setores lógicos. A maioria das unidades USB e das imagens usa setores lógicos de 512 bytes, mas registre o tamanho do setor a partir do log de aquisição ou dos metadados E01, em vez de presumir seu valor. Uma partição que começa no LBA 2.048 começa no byte 1.048.576 em um disco de 512 bytes por setor e no byte 8.388.608 em um disco 4Kn.
O Master Boot Record (MBR)
O esquema MBR, também chamado de tabela de partições DOS, ocupa o setor 0. Seus 512 bytes estão organizados da seguinte forma:
| Offset (decimal) | Tamanho | Conteúdo |
|---|---|---|
| 0 | 446 bytes | Código de inicialização (o Windows também armazena uma assinatura de disco de 4 bytes no offset 440) |
| 446 (0x1BE) | 64 bytes | Quatro entradas de partição de 16 bytes cada |
| 510 (0x1FE) | 2 bytes | Assinatura de inicialização, bytes 55 AA (lidos como o valor little-endian 0xAA55) |
Cada entrada de partição de 16 bytes contém:
| Offset na entrada | Tamanho | Campo |
|---|---|---|
| 0 | 1 | Indicador de inicialização (0x80 = ativa, 0x00 = não ativa) |
| 1 | 3 | Endereço inicial no formato CHS legado (cilindro-cabeça-setor) |
| 4 | 1 | Byte de tipo de partição |
| 5 | 3 | Endereço CHS final |
| 8 | 4 | LBA inicial, little-endian de 32 bits |
| 12 | 4 | Tamanho em setores, little-endian de 32 bits |
Os campos CHS são obsoletos; baseie-se nos campos LBA. Os bytes de tipo comuns incluem 0x07 (NTFS, exFAT), 0x0B e 0x0C (FAT32, variantes CHS e LBA), 0x05 e 0x0F (partição estendida), 0x83 (sistema de arquivos Linux), 0x8E (Linux LVM) e 0xEE (proteção GPT). O byte de tipo é apenas um rótulo; confirme o conteúdo lendo o primeiro setor da partição.
Partições estendidas e lógicas
Quatro entradas não eram suficientes, então o MBR permite que uma entrada seja uma partição estendida (tipo 0x05 ou 0x0F). O primeiro setor da partição estendida contém um Extended Boot Record (EBR) com a mesma estrutura do MBR, incluindo 55 AA. Sua primeira entrada descreve uma partição lógica, com um LBA inicial relativo a esse EBR. Sua segunda entrada aponta para o próximo EBR, em relação ao início da partição estendida. O resultado é uma lista encadeada, a cadeia de EBRs, que termina em um EBR cuja segunda entrada está vazia. Um elo rompido oculta todas as partições lógicas posteriores.
O limite de 2 TiB
Como o LBA inicial e o tamanho são valores de 32 bits, o MBR pode descrever no máximo 2^32 setores. Com setores de 512 bytes, isso equivale a 2^32 × 512 = 2.199.023.255.552 bytes, ou 2 TiB.
A GUID Partition Table (GPT)
A GPT é o esquema de particionamento definido na especificação UEFI. Ela mantém o setor 0 como um MBR de proteção: um MBR normal com uma única entrada do tipo 0xEE, começando no LBA 1 e cobrindo o disco (ou 0xFFFFFFFF setores, se o disco for maior do que o MBR consegue descrever). Sua finalidade é impedir que ferramentas compatíveis apenas com MBR tratem o disco como vazio.
As estruturas reais são:
- Cabeçalho GPT no LBA 1. Ele começa com a assinatura de 8 bytes
EFI PART(hexadecimal45 46 49 20 50 41 52 54) e tem 92 bytes na revisão 1.0. Ele registra seu próprio LBA, o LBA do cabeçalho de backup, o primeiro e o último LBA utilizáveis, o GUID do disco, o LBA inicial do array de entradas de partição, o número de entradas, o tamanho de cada entrada e duas somas de verificação CRC32: uma sobre o próprio cabeçalho (calculada com o campo CRC definido como zero) e outra sobre o array de entradas de partição. - Array de entradas de partição, normalmente começando no LBA 2, com 128 entradas de 128 bytes cada. Isso equivale a 16.384 bytes; portanto, em um disco de 512 bytes por setor, ele ocupa os LBAs 2 a 33, e o primeiro LBA utilizável é o 34. Em um disco 4Kn, ele ocupa os LBAs 2 a 5.
- GPT de backup no final do disco. O cabeçalho de backup fica no último LBA, e uma cópia do array de entradas fica imediatamente antes dele.
Cada entrada de 128 bytes contém um GUID de tipo de partição de 16 bytes, um GUID exclusivo de partição de 16 bytes, um primeiro LBA de 64 bits, um último LBA de 64 bits (inclusivo), 8 bytes de sinalizadores de atributos e um nome UTF-16LE de 72 bytes. Um GUID de tipo composto apenas por zeros indica uma entrada não utilizada. GUIDs de tipo comuns:
| Partição | GUID de tipo |
|---|---|
| Partição do Sistema EFI (ESP) | C12A7328-F81F-11D2-BA4B-00A0C93EC93B |
| Partição Reservada da Microsoft (MSR) | E3C9E316-0B5C-4DB8-817D-F92DF00215AE |
| Dados básicos da Microsoft | EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 |
| Ambiente de Recuperação do Windows | DE94BBA4-06D1-4D40-A16A-BFD50179D6AC |
| Dados de sistema de arquivos Linux | 0FC63DAF-8483-4772-8E79-3D69D8477DE4 |
No disco, os três primeiros grupos de um GUID são armazenados em little-endian, de modo que o GUID de dados básicos aparece em hexadecimal como A2 A0 D0 EB E5 B9 33 44 87 C0 68 B6 B7 26 99 C7. Procure essa ordem de bytes, não a forma impressa.
Se o cabeçalho ou o array primário falhar na verificação CRC32, o firmware e as ferramentas recorrem ao backup. Se tanto o primário quanto o backup forem válidos, mas divergirem, vale a pena relatar isso: a divergência pode resultar de redimensionamento, clonagem para um disco de tamanho diferente ou edição deliberada.
Disco, partição e volume
Essas três palavras são frequentemente usadas como sinônimos, mas representam camadas diferentes:
- Um disco é o dispositivo endereçável inteiro, ou sua imagem.
- Uma partição é um intervalo contíguo de setores descrito por uma tabela de partições.
- Um volume é uma área lógica de armazenamento usada por um sistema de arquivos ou sistema operacional. Ele frequentemente corresponde a exatamente uma partição, mas nem sempre.
A correspondência nem sempre é de um para um. Uma partição pode não conter um sistema de arquivos: a MSR é uma área reservada bruta, e uma partição pode conter um contêiner criptografado ou integrante de um pool, em vez de um sistema de arquivos. Um volume também pode abranger várias partições ou discos. Várias camadas podem existir entre a partição e o sistema de arquivos. O BitLocker transforma uma partição em um volume criptografado cujo primeiro setor normalmente contém a assinatura -FVE-FS- no offset 3 (volumes BitLocker To Go em unidades removíveis podem apresentar MSWIN4.1 em seu lugar). O Linux LVM reúne volumes físicos em grupos de volumes e, a partir deles, cria volumes lógicos. Os Espaços de Armazenamento do Windows e os discos dinâmicos mais antigos agrupam o armazenamento em pools da mesma maneira. Para cada partição, pergunte qual camada começa ali antes de escolher uma ferramenta.
Organizações típicas do Windows
Uma instalação UEFI do Windows 10 ou 11 em um disco GPT geralmente contém:
| Partição | Tamanho típico | Conteúdo |
|---|---|---|
| Partição do Sistema EFI | 100 MiB (260 MiB em discos 4Kn) | FAT32; gerenciador de inicialização e dados de configuração de inicialização |
| Reservada da Microsoft (MSR) | 16 MiB | Sem sistema de arquivos |
| Windows | A maior parte do disco | NTFS; o sistema operacional e os dados do usuário |
| Recuperação | Várias centenas de MiB | NTFS; Ambiente de Recuperação do Windows |
Os tamanhos, a ordem e o número de partições de recuperação ou OEM variam conforme a versão do Windows, o instalador e o fabricante; portanto, leia a tabela em vez de presumir sua organização. As partições normalmente são alinhadas a 1 MiB, razão pela qual a primeira começa no LBA 2.048 em um disco de 512 bytes por setor. Instalações BIOS mais antigas usam MBR com uma pequena partição NTFS ativa chamada "Reservado pelo Sistema" antes da partição do Windows.
Localização de lacunas e espaço não particionado
Nem todo setor pertence a uma partição. Compare o final de cada partição com o início da seguinte e com o final do disco. As lacunas típicas são os setores 1 a 2.047 antes da primeira partição alinhada em um disco MBR, o espaço de alinhamento entre partições e o espaço não utilizado no final. As lacunas podem conter vestígios de partições anteriores, dados ocultados propositalmente ou absolutamente nada. Para encontrar uma partição anterior, procure setores de inicialização de volume dentro do espaço não particionado. Um setor de inicialização NTFS tem NTFS no offset 3, um setor de inicialização FAT32 tem FAT32 no offset 82 e um setor de inicialização exFAT tem EXFAT no offset 3. A aula 1.2 aborda o espaço não alocado dentro de um sistema de arquivos, que é algo diferente.
Exemplo resolvido: da entrada de partição ao offset em bytes
Os 16 bytes no offset 446 de uma imagem de unidade USB são:
00 20 21 00 0C FE FF FF 00 08 00 00 00 B8 D3 01
- Indicador de inicialização
00: não ativa. - Byte de tipo
0C: FAT32 com endereçamento LBA. - LBA inicial, bytes 8 a 11:
00 08 00 00. Inverta para little-endian: 0x00000800 = 2.048. - Tamanho, bytes 12 a 15:
00 B8 D3 01. Invertidos: 0x01D3B800 = 30.652.416 setores.
Com setores de 512 bytes:
- Offset em bytes da partição = 2.048 × 512 = 1.048.576 (0x100000).
- Último setor = 2.048 + 30.652.416 − 1 = 30.654.463.
- Tamanho da partição = 30.652.416 × 512 = 15.694.036.992 bytes (cerca de 14,6 GiB).
Listagem de partições com o The Sleuth Kit
O The Sleuth Kit lê imagens brutas e, quando compilado com libewf, lê imagens E01 diretamente. mmls usb.E01 detecta o esquema e exibe cada entrada em setores. Para a unidade acima, ele mostraria (de forma abreviada):
| Slot | Início | Fim | Comprimento | Descrição |
|---|---|---|---|---|
| Meta | 0 | 0 | 1 | Tabela Primária (#0) |
| ------- | 0 | 2.047 | 2.048 | Não alocado |
| 000:000 | 2.048 | 30.654.463 | 30.652.416 | Win95 FAT32 (0x0c) |
| ------- | 30.654.464 | 30.719.999 | 65.536 | Não alocado |
As linhas "Não alocado" são as lacunas que você precisa contabilizar. Em um disco GPT, mmls também lista a tabela de segurança (de proteção), o cabeçalho GPT e a tabela de partições como linhas Meta.
A maioria das ferramentas do TSK recebe o início do sistema de arquivos com -o, em setores: fsstat -o 2048 usb.E01 informa o tipo de sistema de arquivos, o número de série do volume, o rótulo e a geometria, e fls -o 2048 usb.E01 lista os arquivos. Outras ferramentas exigem um offset em bytes, por exemplo, uma montagem de dispositivo de loop somente leitura no Linux com offset=1048576. Confundir setores e bytes é uma causa comum de "nenhum sistema de arquivos encontrado". Registre tanto o offset quanto sua unidade nas suas anotações.
O caso do superfloppy
O exame prático CFX fornece uma imagem E01 de uma unidade USB. Ela pode estar particionada com MBR ou pode não estar particionada. Nesse caso, trata-se de um superfloppy: o sistema de arquivos começa no setor 0 e não há tabela de partições. O setor 0 ainda termina em 55 AA, porque os registros de inicialização de volume usam a mesma assinatura; portanto, a assinatura sozinha não comprova a existência de um MBR. Em vez disso, observe o início do setor. Um setor de inicialização começa com uma instrução de salto (normalmente EB xx 90), seguida por um nome OEM de 8 bytes, como MSDOS5.0, EXFAT ou NTFS . Nesse caso, mmls normalmente informa que não consegue determinar o tipo de partição, e você executa fsstat sem offset, o que significa offset 0.
Foco no exame: Esteja preparado para converter campos little-endian de entradas de partição em um setor inicial, setor final, tamanho ou offset em bytes, e para aplicar o tamanho de setor correto. Conheça as localizações fixas:55 AAem 510, entradas em 446,EFI PARTno LBA 1, o array de entradas normalmente no LBA 2 e o cabeçalho de backup no último LBA. Na parte prática, determine se a imagem USB está particionada com MBR ou se é um superfloppy antes de usar qualquer ferramenta de sistema de arquivos.
Pontos principais
- Os offsets são sempre
LBA × tamanho do setor lógico; unidades 512e usam LBAs de 512 bytes e unidades 4Kn usam LBAs de 4.096 bytes. - As entradas MBR começam no offset 446 e têm 16 bytes cada, com o byte de tipo em +4, o LBA inicial em +8 e o tamanho em setores em +12, estes dois últimos em little-endian de 32 bits. Isso limita o MBR a 2 TiB com setores de 512 bytes.
- A GPT usa um MBR de proteção (tipo 0xEE), um cabeçalho com
EFI PARTno LBA 1, normalmente 128 entradas de 128 bytes a partir do LBA 2, verificações CRC32 e um cabeçalho de backup no último LBA. - Uma partição é um intervalo de setores, e um volume é o que o sistema usa. Camadas de criptografia, LVM e agrupamento em pools podem existir entre eles, e algumas partições, como a MSR, não contêm sistema de arquivos.
- Contabilize todos os setores: lacunas antes, entre e depois das partições podem conter partições anteriores ou dados ocultos.
55 AAno setor 0 não comprova a existência de um MBR; um superfloppy tem seu sistema de arquivos no offset 0.