Sistemas de archivos · Lección 1 de 8
Discos, particiones y volúmenes
13 min de lectura
Antes de poder analizar cualquier sistema de archivos, un examinador debe saber dónde comienza. Esta lección explica cómo se direcciona un disco, cómo MBR y GPT describen su espacio, en qué se diferencian las particiones de los volúmenes y cómo convertir una entrada de la tabla de particiones en el desplazamiento exacto del que dependen todas las herramientas posteriores.
Sectores y direccionamiento LBA
Un disco se presenta como una secuencia numerada de bloques de tamaño fijo llamados sectores. Los sistemas modernos los direccionan mediante direccionamiento de bloques lógicos (LBA): el primer sector es el LBA 0, el siguiente es el LBA 1, y así sucesivamente. El desplazamiento en bytes de cualquier sector es simplemente LBA × tamaño del sector lógico.
Durante décadas, el tamaño del sector fue de 512 bytes. Las unidades Advanced Format utilizan sectores físicos de 4.096 bytes y se ofrecen en dos variantes:
| Formato | Sector lógico | Sector físico | Lo que ven el SO y la imagen |
|---|---|---|---|
| 512n (heredado) | 512 bytes | 512 bytes | LBA de 512 bytes |
| 512e (emulación) | 512 bytes | 4.096 bytes | LBA de 512 bytes; la unidad asigna 8 sectores lógicos a cada sector físico |
| 4Kn (nativo) | 4.096 bytes | 4.096 bytes | LBA de 4.096 bytes |
Todas las estructuras de particionado cuentan en sectores lógicos. La mayoría de las unidades USB y las imágenes utilizan sectores lógicos de 512 bytes, pero registre el tamaño del sector a partir del registro de adquisición o de los metadatos E01 en lugar de darlo por sentado. Una partición que comienza en el LBA 2.048 empieza en el byte 1.048.576 en un disco de sectores de 512 bytes y en el byte 8.388.608 en un disco 4Kn.
El registro de arranque maestro (MBR)
El esquema MBR, también llamado tabla de particiones DOS, ocupa el sector 0. Sus 512 bytes se distribuyen de la siguiente manera:
| Desplazamiento (decimal) | Tamaño | Contenido |
|---|---|---|
| 0 | 446 bytes | Código de arranque (Windows también almacena una firma de disco de 4 bytes en el desplazamiento 440) |
| 446 (0x1BE) | 64 bytes | Cuatro entradas de partición de 16 bytes cada una |
| 510 (0x1FE) | 2 bytes | Firma de arranque, bytes 55 AA (interpretados como el valor little-endian 0xAA55) |
Cada entrada de partición de 16 bytes contiene:
| Desplazamiento dentro de la entrada | Tamaño | Campo |
|---|---|---|
| 0 | 1 | Indicador de arranque (0x80 = activa, 0x00 = no activa) |
| 1 | 3 | Dirección inicial en el formato heredado CHS (cilindro-cabezal-sector) |
| 4 | 1 | Byte de tipo de partición |
| 5 | 3 | Dirección CHS final |
| 8 | 4 | LBA inicial, de 32 bits en little-endian |
| 12 | 4 | Tamaño en sectores, de 32 bits en little-endian |
Los campos CHS están obsoletos; utilice los campos LBA. Entre los bytes de tipo habituales se encuentran 0x07 (NTFS, exFAT), 0x0B y 0x0C (FAT32, variantes CHS y LBA), 0x05 y 0x0F (partición extendida), 0x83 (sistema de archivos Linux), 0x8E (LVM de Linux) y 0xEE (protector de GPT). El byte de tipo es solo una etiqueta; confirme el contenido leyendo el primer sector de la partición.
Particiones extendidas y lógicas
Cuatro entradas no eran suficientes, por lo que MBR permite que una entrada sea una partición extendida (tipo 0x05 o 0x0F). El primer sector de la partición extendida contiene un registro de arranque extendido (EBR) con la misma distribución que el MBR, incluido 55 AA. Su primera entrada describe una partición lógica, con un LBA inicial relativo a ese EBR. Su segunda entrada apunta al siguiente EBR, en relación con el inicio de la partición extendida. El resultado es una lista enlazada, la cadena de EBR, que termina en un EBR cuya segunda entrada está vacía. Un enlace roto oculta todas las particiones lógicas posteriores.
El límite de 2 TiB
Como el LBA inicial y el tamaño son valores de 32 bits, MBR puede describir como máximo 2^32 sectores. Con sectores de 512 bytes, esto equivale a 2^32 × 512 = 2.199.023.255.552 bytes, o 2 TiB.
La tabla de particiones GUID (GPT)
GPT es el esquema de particionado definido en la especificación UEFI. Conserva el sector 0 como un MBR protector: un MBR normal con una única entrada de tipo 0xEE, que comienza en el LBA 1 y abarca todo el disco (o 0xFFFFFFFF sectores si el disco es mayor de lo que MBR puede describir). Su propósito es evitar que las herramientas que solo admiten MBR traten el disco como si estuviera vacío.
Las estructuras reales son:
- Cabecera GPT en el LBA 1. Comienza con la firma de 8 bytes
EFI PART(hexadecimal45 46 49 20 50 41 52 54) y tiene una longitud de 92 bytes en la revisión 1.0. Registra su propio LBA, el LBA de la cabecera de respaldo, el primer y el último LBA utilizables, el GUID del disco, el LBA inicial de la matriz de entradas de partición, el número de entradas, el tamaño de cada entrada y dos sumas de comprobación CRC32: una de la propia cabecera (calculada con el campo CRC establecido en cero) y otra de la matriz de entradas de partición. - Matriz de entradas de partición, que normalmente comienza en el LBA 2, con 128 entradas de 128 bytes cada una. Esto equivale a 16.384 bytes, por lo que en un disco de sectores de 512 bytes ocupa los LBA del 2 al 33 y el primer LBA utilizable es el 34. En un disco 4Kn ocupa los LBA del 2 al 5.
- GPT de respaldo al final del disco. La cabecera de respaldo se encuentra en el último LBA, y una copia de la matriz de entradas se encuentra inmediatamente antes.
Cada entrada de 128 bytes contiene un GUID de tipo de partición de 16 bytes, un GUID único de partición de 16 bytes, un primer LBA de 64 bits, un último LBA de 64 bits (incluido), 8 bytes de indicadores de atributos y un nombre UTF-16LE de 72 bytes. Un GUID de tipo compuesto íntegramente por ceros indica una entrada sin utilizar. GUID de tipo habituales:
| Partición | GUID de tipo |
|---|---|
| Partición del sistema EFI (ESP) | C12A7328-F81F-11D2-BA4B-00A0C93EC93B |
| Partición reservada de Microsoft (MSR) | E3C9E316-0B5C-4DB8-817D-F92DF00215AE |
| Datos básicos de Microsoft | EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 |
| Entorno de recuperación de Windows | DE94BBA4-06D1-4D40-A16A-BFD50179D6AC |
| Datos del sistema de archivos Linux | 0FC63DAF-8483-4772-8E79-3D69D8477DE4 |
En el disco, los tres primeros grupos de un GUID se almacenan en little-endian, por lo que el GUID de datos básicos aparece en hexadecimal como A2 A0 D0 EB E5 B9 33 44 87 C0 68 B6 B7 26 99 C7. Busque ese orden de bytes, no la forma impresa.
Si la cabecera o la matriz principal no supera la comprobación CRC32, el firmware y las herramientas recurren a la copia de respaldo. Si tanto la principal como la de respaldo superan la comprobación, pero no coinciden, conviene indicarlo en el informe: puede deberse a un cambio de tamaño, a una clonación en un disco de distinto tamaño o a una edición deliberada.
Disco, partición y volumen
Estas tres palabras suelen utilizarse indistintamente, pero corresponden a capas diferentes:
- Un disco es el dispositivo direccionable completo, o su imagen.
- Una partición es un intervalo contiguo de sectores descrito por una tabla de particiones.
- Un volumen es un área de almacenamiento lógico que utiliza un sistema de archivos o un sistema operativo. A menudo corresponde exactamente a una partición, pero no siempre.
La correspondencia no siempre es de uno a uno. Una partición puede no contener ningún sistema de archivos: la MSR es un área reservada sin formato, y una partición puede contener un contenedor cifrado o de almacenamiento agrupado en lugar de un sistema de archivos. Un volumen también puede abarcar varias particiones o discos. Puede haber varias capas entre la partición y el sistema de archivos. BitLocker convierte una partición en un volumen cifrado cuyo primer sector normalmente contiene la firma -FVE-FS- en el desplazamiento 3 (los volúmenes BitLocker To Go en unidades extraíbles pueden mostrar MSWIN4.1 en su lugar). LVM de Linux agrupa volúmenes físicos en grupos de volúmenes y crea volúmenes lógicos a partir de ellos. Los Espacios de almacenamiento de Windows y los antiguos discos dinámicos agrupan el almacenamiento de la misma manera. Para cada partición, pregúntese qué capa comienza allí antes de elegir una herramienta.
Distribuciones típicas de Windows
Una instalación UEFI de Windows 10 u 11 en un disco GPT suele contener:
| Partición | Tamaño típico | Contenido |
|---|---|---|
| Partición del sistema EFI | 100 MiB (260 MiB en discos 4Kn) | FAT32; administrador de arranque y datos de configuración de arranque |
| Reservada de Microsoft (MSR) | 16 MiB | Sin sistema de archivos |
| Windows | La mayor parte del disco | NTFS; el sistema operativo y los datos del usuario |
| Recuperación | Varios cientos de MiB | NTFS; entorno de recuperación de Windows |
Los tamaños, el orden y el número de particiones de recuperación u OEM varían según la versión de Windows, el instalador y el fabricante, por lo que debe leer la tabla en lugar de darla por sentada. Las particiones suelen alinearse a 1 MiB, razón por la que la primera comienza en el LBA 2.048 en un disco de sectores de 512 bytes. Las instalaciones BIOS más antiguas utilizan MBR con una pequeña partición NTFS activa «Reservado para el sistema» antes de la partición de Windows.
Localización de huecos y espacio sin particionar
No todos los sectores pertenecen a una partición. Compare el final de cada partición con el inicio de la siguiente y con el final del disco. Los huecos típicos son los sectores del 1 al 2.047 antes de la primera partición alineada en un disco MBR, el espacio sobrante por alineación entre particiones y el espacio sin utilizar al final. Los huecos pueden contener restos de particiones anteriores, datos ocultados deliberadamente o nada en absoluto. Para encontrar una partición anterior, busque sectores de arranque de volumen dentro del espacio sin particionar. Un sector de arranque NTFS contiene NTFS en el desplazamiento 3, un sector de arranque FAT32 contiene FAT32 en el desplazamiento 82 y un sector de arranque exFAT contiene EXFAT en el desplazamiento 3. La lección 1.2 trata el espacio no asignado dentro de un sistema de archivos, que es algo distinto.
Ejemplo resuelto: de la entrada de partición al desplazamiento en bytes
Los 16 bytes en el desplazamiento 446 de una imagen de una unidad USB son:
00 20 21 00 0C FE FF FF 00 08 00 00 00 B8 D3 01
- Indicador de arranque
00: no activa. - Byte de tipo
0C: FAT32 con direccionamiento LBA. - LBA inicial, bytes del 8 al 11:
00 08 00 00. Invierta el orden para interpretar little-endian: 0x00000800 = 2.048. - Tamaño, bytes del 12 al 15:
00 B8 D3 01. Con el orden invertido: 0x01D3B800 = 30.652.416 sectores.
Con sectores de 512 bytes:
- Desplazamiento en bytes de la partición = 2.048 × 512 = 1.048.576 (0x100000).
- Último sector = 2.048 + 30.652.416 − 1 = 30.654.463.
- Tamaño de la partición = 30.652.416 × 512 = 15.694.036.992 bytes (aproximadamente 14,6 GiB).
Listado de particiones con The Sleuth Kit
The Sleuth Kit lee directamente imágenes en bruto y, cuando se compila con libewf, imágenes E01. mmls usb.E01 detecta el esquema y muestra cada entrada en sectores. Para la unidad anterior mostraría lo siguiente (abreviado):
| Posición | Inicio | Final | Longitud | Descripción |
|---|---|---|---|---|
| Meta | 0 | 0 | 1 | Tabla principal (#0) |
| ------- | 0 | 2.047 | 2.048 | No asignado |
| 000:000 | 2.048 | 30.654.463 | 30.652.416 | Win95 FAT32 (0x0c) |
| ------- | 30.654.464 | 30.719.999 | 65.536 | No asignado |
Las filas «No asignado» son los huecos que debe tener en cuenta. En un disco GPT, mmls también muestra la tabla de seguridad (protectora), la cabecera GPT y la tabla de particiones como filas Meta.
La mayoría de las herramientas TSK reciben el inicio del sistema de archivos mediante -o, en sectores: fsstat -o 2048 usb.E01 informa del tipo de sistema de archivos, el número de serie del volumen, la etiqueta y la geometría, y fls -o 2048 usb.E01 enumera los archivos. Otras herramientas requieren un desplazamiento en bytes, por ejemplo un montaje de bucle de solo lectura en Linux con offset=1048576. Confundir sectores y bytes es una causa habitual del mensaje «no se encontró ningún sistema de archivos». Registre tanto el desplazamiento como su unidad en sus notas.
El caso del superfloppy
Una imagen de una unidad USB que reciba durante el trabajo en un caso puede estar particionada con MBR o puede no estar particionada en absoluto. En ese caso se trata de un superfloppy: el sistema de archivos comienza en el sector 0 y no hay tabla de particiones. El sector 0 sigue terminando en 55 AA, porque los registros de arranque de volumen utilizan la misma firma, por lo que la firma por sí sola no demuestra la presencia de un MBR. Examine, en cambio, el inicio del sector. Un sector de arranque comienza con una instrucción de salto (normalmente EB xx 90) seguida de un nombre OEM de 8 bytes, como MSDOS5.0, EXFAT o NTFS . En ese caso, mmls suele indicar que no puede determinar el tipo de partición, y se ejecuta fsstat sin desplazamiento, lo que significa un desplazamiento de 0.
Enfoque del examen: Prepárese para convertir los campos little-endian de una entrada de partición en un sector inicial, un sector final, un tamaño o un desplazamiento en bytes, y para aplicar el tamaño de sector correcto. Conozca las ubicaciones fijas:55 AAen 510, las entradas en 446,EFI PARTen el LBA 1, la matriz de entradas normalmente en el LBA 2 y la cabecera de respaldo en el último LBA. Esté preparado para determinar a partir del sector 0 si una imagen USB está particionada con MBR o es un superfloppy, y qué desplazamiento implica esto para las herramientas de sistemas de archivos.
Puntos clave
- Los desplazamientos siempre son
LBA × tamaño del sector lógico; las unidades 512e utilizan LBA de 512 bytes y las unidades 4Kn utilizan LBA de 4.096 bytes. - Las entradas MBR comienzan en el desplazamiento 446 y tienen 16 bytes cada una, con el byte de tipo en +4, el LBA inicial en +8 y el tamaño en sectores en +12, estos dos últimos de 32 bits en little-endian. Esto limita MBR a 2 TiB con sectores de 512 bytes.
- GPT utiliza un MBR protector (tipo 0xEE), una cabecera con
EFI PARTen el LBA 1, normalmente 128 entradas de 128 bytes a partir del LBA 2, comprobaciones CRC32 y una cabecera de respaldo en el último LBA. - Una partición es un intervalo de sectores y un volumen es lo que utiliza el sistema. Entre ellos puede haber capas de cifrado, LVM y agrupación de almacenamiento, y algunas particiones, como la MSR, no contienen ningún sistema de archivos.
- Tenga en cuenta todos los sectores: los huecos antes, entre y después de las particiones pueden contener particiones anteriores o datos ocultos.
55 AAen el sector 0 no demuestra la presencia de un MBR; un superfloppy tiene su sistema de archivos en el desplazamiento 0.