Что такое «скрытые сектора» в выводе команды `file` для разделов, содержащих FAT32?

Что такое «скрытые сектора» в выводе команды `file` для разделов, содержащих FAT32?

Я разделил внешний жесткий диск USB на два раздела с помощью GParted. Оба являются основными разделами, отформатированными как FAT32 и имеющими одинаковый размер (500 ГБ). Вот вывод 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/sdb2, что такое hidden sectorsи почему оно больше, чем sectors? Разница составляет 2048, что является значением hidden sectorsдля /dev/sdb1. Это совпадение? Ошибка GParted или команды file? Что еще важнее, стоит ли об этом беспокоиться?

решение1

вкратце

Не о чем беспокоиться.


Статья в ВикипедииПроектирование файловой системы FATнесколько раз упоминает «скрытые сектора», а общее описание соответствующих записей метаданных следующее:

Количество скрытых секторов, предшествующих разделу, содержащему этот том FAT. Это поле всегда должно быть равно нулю на носителях, которые не разбиты на разделы.

(с небольшими причудами). Это описание, похоже, соответствует ценностям, которые вы наблюдаете в вашем конкретном случае.


Я ожидаю, что инструменты Linux никогда не будут использовать это значение по умолчанию. В вашем случае соответствующие значения 2048и 976762880действительны в контексте /dev/sdb, но если вы рассматриваете /dev/sdb1и /dev/sdb2соответственно, то эти устройства не разбиты на разделы, поэтому в их контексте «скрытые сектора» должны быть 0.

Обычно монтируют с помощью like mount /dev/sdb1 /some/mountpoint, но если раздел начинается со смещения 2048 секторов по 512 байт, то вы можете сделать то же самое с помощью

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

Таким образом, нет четкого указания на то, какой контекст является «правильным» в отношении Linux. Еще одним намеком на то, что значение «скрытых секторов» не должно иметь значения, является тот факт, что оно встраивает информацию, принадлежащую таблице разделов, в структуры метаданных файловой системы. В настоящее время мы стараемся не смешивать уровни абстракции таким образом. Сравнительно легко «рассинхронизировать» две части информации. И поскольку ОС необходимо прочитать таблицу разделов, чтобы найти файловую систему в первую очередь, избыточная информация о смещении, доступная только после того, как вы уже знаете смещение, вряд ли полезна.

Обратите внимание, что есть еще одна избыточная информация: таблицы разделов содержатидентификаторы разделов(МБР) илиGUID типа раздела(GPT), которая должна соответствовать реальным файловым системам в разделах, но может и не соответствовать. Однако эта информация, если она связная, весьма полезна, поскольку вы можете узнать, чего ожидать (какая ОС, возможная мультизагрузка, разделы подкачки), изучив только таблицу разделов. На практике это иногда полезно для людей, а иногда для машин; особенно UEFI необходимо знать, какой разделСистемный раздел EFI. Но если вы скажете Linux, что mount /dev/sdb1 …он попытается обнаружить фактическую файловую систему, а не проверять ее /dev/sdb, прочитать таблицу разделов и использовать идентификатор раздела/GUID.

Я не знаю, что было обоснованием "скрытых секторов". Тем не менее, похоже, были/есть некоторые устройства, которые как-то полагаются на это значение. Сравнитьman 8 mkfs.fat:

-h number-of-hidden-sectors
Выберите количество скрытых секторов в томе. По-видимому, некоторые цифровые камеры получают несварение, если вы скармливаете им карту CF без таких скрытых секторов, эта опция позволяет вам удовлетворить их. Предполагается, 0что в командной строке не указано значение.

Похоже, GParted пошел дальше и попытался удовлетворить даже "некоторые цифровые камеры" или что-то в этом роде. Так что этохорошая вещь. Вам совершенно не нужно переделывать с помощью другого инструмента.

решение2

«Скрытые сектора» — это неправильное название смещения раздела, хранящегося в загрузочном секторе FAT или NTFS, в структуре данных (также вводящей в заблуждение), называемойБлок параметров BIOS; здесь «BIOS» относится к компоненту MS-DOS, а не к системной прошивке. Значение (предположительно) равно числу секторов, предшествующих загрузочному сектору на диске. Ни больше, ни меньше. Для файловой системы FAT, которая находится на неразмеченном носителе и охватывает весь диск, оно должно быть равно нулю.

Когда загружается загрузочный сектор FAT или NTFS, он использует значение «скрытых секторов» для поиска раздела на диске. Оттуда загрузочный сектор может найти структуры файловой системы и загрузить загрузчик более поздней стадии, такой как IO.SYS (MSLOAD), NTLDR или BOOTMGR. За исключением этого, значение обычно не используется. Так что если вы не планируете загружаться с этой файловой системы в системе BIOS, это вообще не должно иметь значения… хотя вы никогда не знаете, с какими безумными реализациями FAT вы столкнетесь.

Связанный контент