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.
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 |
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 |
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.
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 |
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).
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:
Artículos Relacionados
Cómo solucionar KERNEL_SECURITY_CHECK_FAILURE Windows 11
Cómo arreglar inaccesible boot device de Windows 11 [8 soluciones]
¿Tu tarjeta SD no funciona en la cámara? Aquí tienes por qué y cómo solucionarlo
[Solucionado] Error Page Fault In Nonpaged Area