Información sobre la estructura de FAT32 - MBR, sector de arranque de FAT32

Luis Última actualización el 30/09/2024 enRecursos de recuperación de datos|Más artículos

Resumen:

Este artículo presenta información detallada sobre la estructura del sistema de archivos FAT32, el MBR FAT32 o el sector de arranque FAT32, etc. Si has perdido datos en una unidad o partición FAT32, descarga gratis aquí el mejor software de recuperación de datos para restaurar datos de una unidad/partición FAT32 ahora mismo.

¿Qué es el Registro de Arranque Maestro?

El Registro de Inicio Maestro es el mismo para casi todos los Sistemas Operativos. Se encuentra en el primer Sector del Disco Duro, en el Cilindro 0, Cabezal 0, Sector 1. Es el primer fragmento de código que ejecuta tu ordenador después de haber comprobado todo tu hardware (POST) y haber pasado el control del software de carga al disco duro. También contiene la tabla de particiones, que define las distintas secciones de tu disco duro. Básicamente, si algo le ocurre a esta pequeña sección de 512 bytes, tu disco duro está descerebrado.

Desplazamiento Descripción Talla
000h Código ejecutable (arranca el ordenador) 446 Bytes
1BEh 1ª Entrada de Partición (Ver Tabla siguiente) 16 Bytes
1CEh Entrada 2ª Partición 16 Bytes
1DEh Entrada de la 3ª Partición 16 Bytes
1EEh Entrada de la 4ª Partición 16 Bytes
1FEh Firma del registro de arranque (55hAAh) 2 Bytes
  • Entrada de partición (parte del MBR)
Desplazamiento Descripción Talla
00h Estado actual de la partición(00h=Inactiva, 80h=Activa) 1 Byte
01h Comienzo de la Partición - Cabeza 1 Byte
02h Comienzo de la Partición - Cilindro/Sector (Ver abajo) 1 Palabra
04h Tipo de tabique (ver lista a continuación) 1 Byte
05h Fin de la Partición - Cabeza 1 Byte
06h Fin de Partición - Cilindro/Sector 1 Palabra
08h Número de sectores entre el MBR y el primer sector de la partición 1 Palabra doble
0Ch Número de sectores en la partición 1 Palabra doble
  • Codificación cilindro/sector

Supongo que en la época de los discos duros de 10 MB y los 8086, el código era escaso. Así que hicieron todo lo que pudieron para preservar el espacio. Por desgracia, ahora tenemos que vivir con ello, pero por suerte crearon nuevas formas de traducir el sistema para que el Límite de 1024 Cilindros (2^10) no sea un problema demasiado grande, al menos para los ordenadores más nuevos. Los más antiguos suelen necesitar algún tipo de programa de Superposición de Disco para que vean todo el disco duro.

De todos modos, para obtener el Sector, tienes que aplicarle una máscara AND ($3F). Para obtener el Cilindro, coges el byte alto y lo O con el byte bajo al que se le ha aplicado la máscara AND ($C0) y luego se ha desplazado dos a la izquierda. No es muy fácil de explicar, así que sólo te mostraré cómo lo hice con dos rutinas que hice (En Pascal) para Codificar y Decodificar el Cilindro/Sector. Espero que aunque no sepas Pascal seas capaz de leerlo.

Función CylSecEncode(Cilindro, Sector: Palabra): Palabra;
Comienza
CylSecEncode: = (Lo(Cilindro) shl 8) o (Hi(Cilindro) shl 6) o Sector;
Fin;

Procedimiento CylSecDecode(Var Cilindro, Sector: Palabra; CylSec : Palabra);
Comienza
Cilindro: = Hi(CylSec) o ((Lo(CylSec) y $C0) shl 2);
Sector: = (CylSec y $3F);
Fin;

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Cilindro Bits 7 a 0 Cilindro Bits 9+8 Sector Bits 5 a0

Listado de tipos de partición

Hay más de los que se muestran, pero sólo he incluido los que son relevantes para los sistemas operativos MS.

Valor Descripción
00h Desconocido o Nada
01h FAT de 12 bits
04h FAT de 16 bits (Partición menor de 32 MB)
05h Partición MS-DOS ampliada
06h FAT de 16 bits (Partición mayor de 32 MB)
0Bh FAT de 32 bits (Partición de hasta2048GB)
0Ch Igual que 0BH, pero utiliza LBA1 13h Extensiones
0Eh Igual que 06H, pero utiliza LBA1 13h Extensiones
0Fh Igual que 05H, pero utiliza LBA1 13h Extensiones

Lectura de varias particiones

Aunque tener varias particiones en FAT32 no es tan probable como en FAT16, sigue funcionando igual. La primera partición es la Partición Primaria, y todo lo demás se almacena en la Partición Extendida. Sin embargo, es un poco complicado leer esas particiones adicionales (no mucho, sólo un poco). El primer registro de la tabla de particiones muestra dónde está la Partición Principal (qué tamaño tiene, dónde empieza y dónde acaba). El segundo registro de la tabla de particiones muestra dónde está la Partición Extendida Completa (que puede incluir más de una partición). Para leer más particiones, ve al lugar donde dice que empieza la Partición Extendida y lee el primer sector. Actúa igual que el MBR. Tendrá un espacio en blanco donde se supone que está el código, y en la tabla de particiones tendrá como primera entrada la siguiente Partición de la Unidad, y si hay más, habrá otra Partición Extendida, igual que antes. Sin embargo, todas las referencias a Números de Sector se hacen tomando como referencia ese nuevo punto del MBR, convirtiéndolo en una unidad virtual. Por si esto no tiene mucho sentido (y por la forma en que explico las cosas puedo entender que no lo tenga), déjame mostrarte cómo se configura una unidad con tres particiones.

MBR de la unidad completa

Entrada nº 1 - Apunta a la Partición nº 1
Entrada nº 2 - Apunta a toda la partición extendida

Leerías el primer sector de esa Partición Extendida, y verías otra Estructura MBR.

MBR de Partición Extendida

Entrada #1 - Apunta a la Partición #2
Entrada #2 - Apunta al resto de la Partición Extendida después de la Partición #2

Ahora, todas las referencias a Números de Sector (concretamente la entrada en el Desplazamiento 08h) en esas Entradas no se referenciarían desde el inicio de la unidad, sino desde el inicio de la Partición Ampliada. Sin embargo, los números CHS (Cilindro, Cabezal, Sector) seguirían siendo correctos.

Una vez más, leerías el primer sector de esa Partición Extendida, y verías el siguiente MBR.

MBR del resto de la partición extendida

Entrada #1 - Apunta a la Partición #3
No hay Entrada #2, ya que ésta fue la Última Partición

Si hubiera otra partición, el patrón continuaría igual que antes, hasta llegar a la última.

Información del registro de arranque FAT32

Esta información se encuentra en el primer sector de cada partición.

Desplazamiento Descripción Talla
00h Código de salto + NOP 3 Bytes
03h Nombre OEM (Probablemente MSWIN4.1) 8 Bytes
0Bh Bytes por sector 1 Palabra
0Dh Sectores por clúster 1 Byte
0Eh Sectores reservados 1 Palabra
10h Número de copias de la FAT 1 Byte
11h Máximo de entradas de directorio raíz (N/A para FAT32) 1 Palabra
13h Número de sectores de la partición menores de 32 MB (no disponible para FAT32) 1 Palabra
15h Descriptor de soporte (F8h paraDiscos duros) 1 Byte
16h Sectores por FAT en sistemas FAT antiguos (N/A para FAT32) 1 Palabra
18h Sectores por vía 1 Palabra
1Ah Número de cabezas 1 Palabra
1Ch Número de sectores ocultos en la partición 1 Palabra doble
20h Número de sectores en la partición 1 Palabra doble
24h Número de sectores por FAT 1 Palabra doble
28h Indicadores (Los bits 0-4 indican la copia FAT activa) (El bit 7 indica si la duplicación FAT está activada o desactivada) (Si la duplicación FAT está desactivada, la información FAT sólo se escribe en la copia indicada por los bits 0-4) 1 Palabra
2Ah Versión de la unidad FAT32 (byte alto = versión mayor, byte bajo = versión menor) 1 Palabra
2Ch Número de clúster del inicio del directorio raíz 1 Palabra doble
30h Número de Sector del Sector de Información del Sistema de Archivos (Ver Estructura más abajo)(Referenciado desde el Inicio de la Partición) 1 Palabra
32h Número de Sector del Sector BackupBoot (Referenciado desde el Inicio de la Partición) 1 Palabra
34h Reservado 12 Bytes
40h Unidad lógica Número de partición 1 Byte
41h No utilizado (podría ser el byte superior de la entrada anterior) 1 Byte
42h Firma extendida (29h) 1 Byte
43h Número de serie de la partición 1 Palabra doble
47h Volumen Nombre de la partición 11 Bytes
52h Nombre de la FAT (FAT32) 8 Bytes
5Ah Código ejecutable 420 Bytes
1FEh Firma del registro de arranque (55hAAh) 2 Bytes

Instrucción del sector de información del sistema de archivos

Normalmente, existe un Segundo Sector de la partición, aunque como hay una referencia en el Sector de Arranque a él. Supongo que se puede mover. Nunca me he hecho una idea completa de éste. Aunque sé dónde están los campos importantes.

Desplazamiento Descripción Talla
00h Primera firma (52h 52h 61h41h) 1 Palabra doble
04h Desconocido, actualmente (podría ser nulo) 480 Bytes
1E4h Firma del sector FSInfo(72h 72h 41h 61h) 1 Palabra doble
1E8h Número de clusters libres (Establecer en -1 si se desconoce) 1 Palabra doble
1ECh Número de clúster que se asignó más recientemente. 1 Palabra doble
1F0h Reservado 12 Bytes
1FCh Desconocido o Nulo 2 Bytes
1FEh Firma del registro de arranque (55hAAh) 2 Bytes

Disposición de la unidad FAT32

Desplazamiento Descripción
Inicio de la partición Sector de arranque
Inicio + nº de sectores reservados Tablas de grasas
Inicio + nº de reservados + (nº de sectores por FAT * 2) Área de datos (Comienza con el Cluster nº 2)

Cluster Significado

Un clúster es un grupo de sectores del disco duro que contienen información. Un Grupo de 4K tiene 8 Sectores (512*8=4096). A cada grupo se le asigna un lugar en la tabla FAT. Cuando miras una entrada en la FAT, el número que aparece en ella te indica si ese clúster contiene datos o no y, en caso afirmativo, si es el final de los datos o hay otro clúster después. Todos los datos de una partición empiezan en el clúster nº 2. Si la Entrada FAT es 0, entonces no hay datos en ese clúster. Si la Entrada FAT es 0FFFFFFFh, entonces es la última entrada de la cadena.

Este es uno de los mayores agujeros en mi información. No soy capaz de encontrar ningún sitio que muestre qué números significan qué cuando se trata de la tabla FAT. He podido saber el final de la cadena con sólo mirar una Unidad FAT32, pero no sé qué significa un Clúster MALO ni cuál es el número máximo válido para mostrar datos.

De momento, puedes calcular el clúster máximo válido en una partición con esta fórmula:

( (# de Sectores en Partición) - (# de Sectores por Grasa * 2) - (# de Sectores Reservados) ) / (Número de sectores por clúster)

Si hay algún resto en la respuesta a esa fórmula, sólo significa que había unos cuantos conglomerados de más al final de la partición (probablemente no los suficientes como para hacer otro conglomerado), así que puedes deshacerte de todo lo que haya después del punto decimal.

Tabla de directorios

Otro aspecto cuando se observa un Sistema de Archivos a Bajo Nivel es la Tabla de Directorios. La Tabla de Directorios es la que almacena todas las Entradas de Archivos y Directorios. Básicamente, sólo hay una diferencia entre la Tabla de Directorios de FAT16 y FAT32. La diferencia es: el Byte Reservado OS/2 (Offset 20 [14h]) de la Estructura de Nombre de Archivo Corto se sustituye por la Palabra Alta del Número de Clúster (ya que ahora son 4 bytes en lugar de 2).

Tabla de asignación de archivos

Notas a pie de página

1 - LBA = Direccionamiento Lógico por Bloques - Utiliza las Extensiones Int 13h incorporadas en las BIOS más recientes para acceder a datos por encima de la barrera de los 8 GB, o para acceder estrictamente en modo LBA, en lugar de CHS (Cilindro, Cabeza, Sector).

Consejo extra: restaura los datos perdidos del disco duro FAT32 con el software de recuperación de discos duros de EaseUS

Si has borrado, eliminado o formateado datos accidentalmente en un disco duro FAT32, USB u otros dispositivos de almacenamiento, que no cunda el pánico. ¡Tu mejor opción es dejar que EaseUS Data Recovery Wizard te ayude! Aquí nos gustaría recomendarte que pruebes EaseUS Data Recovery Wizard, que te permite recuperar, formatear y restaurar eficazmente todos los datos perdidos en 3 sencillos pasos. Descárgalo gratis para recuperar todos tus datos perdidos de FAT32 ahora: