¿Cuáles son los "sectores ocultos" en la salida del comando "archivo" para particiones que contienen FAT32?

¿Cuáles son los "sectores ocultos" en la salida del comando "archivo" para particiones que contienen FAT32?

He dividido un disco duro USB externo en dos particiones usando GParted. Ambas son particiones primarias formateadas como FAT32 y tienen el mismo tamaño (500 GB). Esta es la salida de file -s:

/dev/sdb1: DOS/MBR boot sector, code offset 0x58+2, OEM-ID "mkfs.fat", sectors/cluster 64, reserved sectors 64, Media descriptor 0xf8, sectors/track 63, heads 255, hidden sectors 2048, sectors 976760832 (volumes > 32 MB), FAT (32 bit), sectors/FAT 119232, reserved 0x3, serial number 0x99034dfb, label: "TOSHIBA1   "

/dev/sdb2: DOS/MBR boot sector, code offset 0x58+2, OEM-ID "mkfs.fat", sectors/cluster 64, reserved sectors 64, Media descriptor 0xf8, sectors/track 63, heads 255, hidden sectors 976762880, sectors 976760832 (volumes > 32 MB), FAT (32 bit), sectors/FAT 119232, reserved 0x1, serial number 0x96cbe274, label: "TOSHIBA2   "

¿ /dev/sdb2Qué es hidden sectorsy por qué es más grande que sectors? La diferencia es 2048, que resulta ser el valor de hidden sectorsfor /dev/sdb1. ¿Es esto una coincidencia? ¿Un error de GParted o del filecomando? Más importante aún, ¿es algo de qué preocuparse?

Respuesta1

tl; dr

Nada de que preocuparse.


Artículo de WikipediaDiseño del sistema de archivos FAT.menciona "sectores ocultos" pocas veces y la descripción común de las entradas de metadatos relevantes es

Recuento de sectores ocultos que preceden a la partición que contiene este volumen FAT. Este campo siempre debe ser cero en medios que no están particionados.

(con algunas peculiaridades). Esta descripción parece ajustarse a los valores que usted observa en su caso particular.


Espero que las herramientas de Linux nunca utilicen este valor de forma predeterminada. En su caso, los valores respectivos 2048y 976762880son válidos en el contexto de /dev/sdb, pero si considera /dev/sdb1y /dev/sdb2respectivamente, estos dispositivos no están particionados, por lo que en su contexto los "sectores ocultos" deberían ser 0.

Es común montar con like mount /dev/sdb1 /some/mountpoint, pero si la partición comienza en el desplazamiento de 2048 sectores de 512 bytes, entonces puedes hacer lo mismo con

mount -o offset=$((2048*512)) /dev/sdb /some/mountpoint

Por lo tanto, no hay una indicación clara de qué contexto es el "correcto" en lo que respecta a Linux. Otro indicio de que el valor de los "sectores ocultos" no debería importar es el hecho de que incorpora información que pertenece a la tabla de particiones en las estructuras de metadatos del sistema de archivos. Hoy en día tendemos a no mezclar capas de abstracción como esta. Es relativamente fácil "desincronizar" las dos piezas de información. Y dado que el sistema operativo necesita leer la tabla de particiones para encontrar el sistema de archivos en primer lugar, la información redundante sobre el desplazamiento disponible sólo después de que ya se conoce el desplazamiento no es útil.

Tenga en cuenta que hay otra información redundante: las tablas de particiones contienenID de partición(MBR) oGUID de tipo de partición(GPT) que debería corresponder a los sistemas de archivos reales en las particiones, pero puede que no. Sin embargo, esta información, si es coherente, es bastante útil porque puede saber qué esperar (qué sistema operativo, posible arranque múltiple, intercambio de particiones) examinando solo la tabla de particiones. En la práctica, a veces esto es útil para los humanos y otras veces para las máquinas; especialmente UEFI necesita saber qué partición espartición del sistema EFI. Pero si le dice a Linux mount /dev/sdb1 …que intentará detectar el sistema de archivos real allí en lugar de examinarlo /dev/sdb, leerá la tabla de particiones y usará el ID/GUID de la partición.

No sé cuál fue el motivo detrás de los "sectores ocultos". Sin embargo, parece que hubo/hay algunos dispositivos que dependen de este valor de alguna manera. Compararman 8 mkfs.fat:

-h number-of-hidden-sectors
Seleccione el número de sectores ocultos en el volumen. Aparentemente algunas cámaras digitales sufren indigestión si les alimentas con una tarjeta CF sin esos sectores ocultos, esta opción te permite satisfacerlas. Supone 0que no se proporciona ningún valor en la línea de comando.

Parece que GParted siguió adelante y trató de satisfacer incluso "algunas cámaras digitales" o lo que sea. Entonces este es unBuena cosa. No es necesario en absoluto rehacerlo con otra herramienta.

Respuesta2

'Sectores ocultos' es un nombre inapropiado para el desplazamiento de partición, tal como se almacena en el sector de arranque FAT o NTFS, en una estructura de datos (también engañosamente) llamadaBloque de parámetros del BIOS; aquí, 'BIOS' se refiere a un componente de MS-DOS y no al firmware del sistema. El valor es (se supone que es) el número de sectores que preceden al sector de arranque en el disco. Nada más y nada menos. Para un sistema de archivos FAT que reside en medios no particionados y abarca todo el disco, debería ser cero.

Cuando se carga el sector de arranque FAT o NTFS, utiliza el valor de 'sectores ocultos' para ubicar la partición en el disco. Desde allí, el sector de arranque puede localizar estructuras del sistema de archivos y cargar un gestor de arranque de etapa posterior, como IO.SYS (MSLOAD), NTLDR o BOOTMGR. Aparte de eso, el valor generalmente no se utiliza. Entonces, si no planea arrancar desde ese sistema de archivos en un sistema BIOS, ni siquiera debería importar en absoluto... aunque nunca se sabe con qué implementaciones FAT locas se encontrará.

información relacionada