Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Загрузочные сектора FAT
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
kolobochishe
Всем доброго дня!

Решил тут сделать форматирование флешки в своем приборе на МК. Смотрю описание FAT от Microsoft. Написано что загрузочный сектор BPB должен находится в нулевом 512-байтном физическом секторе флешки. Открываю WinHex в разделе Physical Media отформатированную флешку и вижу совсем не то, что должно быть


1. Что за "Unpartitioned space"? Почему 0xE9 находится на таком смещении от начала?

Если у кого есть более детальное и точное описание FAT32, напишите ссылку на ресурс. А то даже не знаю где расположить FAT таблицу.

Еще вот такая "непонятка". Раздел 3.6. Microsoft FAT Specification

3.6 Backup BPB Structure
Loss (inability to retrieve contents) of sector #0 (containing the BPB) could lead to catastrophic
data loss due to possible inability to mount the volume. On FAT32 formatted volumes, sector #6
must contain a copy of the BPB.
The BPB_BkBootSec field contains the value 6 for both copies of the BPB (the one in sector 0
and the backup copy located in sector 6).
Volume repair utilities are expected to retrieve contents of the BPB from sector #6 in a situation
when sector #0 is unreadable.

NOTE: Starting at the BPB_BkBootSec sector is a complete boot record. The Microsoft FAT32
”boot sector” is actually three sectors long. There is a copy of all three of these sectors starting at
the BPB_BkBootSec sector. A copy of the FSInfo sector (see Section 5) is also there, although
the BPB_FSInfo field in this backup boot sector is set to the same value as is stored in the
sector #0 BPB.

2. Про какие еще 3 загрузочных сектора речь? Все ж в 1 умещается. 1 BPB и еще один вспомогательный FsInfo. BPB копируется в 6-й сектор.
3. А FsInfo куда?

4. Вот здесь wiki FAT32 написано, что размер кластера может быть до 32КБ, а в опциях форматирования в Windows можно и 64КБ. Насколько "несовместимым" для других устройств будет диск с таким форматированием? Будут ли ошибки?
5. С какого сектора начинается FAT таблица индексов, какая кратность должна быть у адреса этого сектора относительно размера кластера? По какому адресу раполагается копия таблицы индексов? Пишут что они расположены последовательно, но ведь есть разбиение на кластеры и физические блоки и в общем случае количество индексов и размер логических и физических блоков могут несовпадать

-------------------------------

Сейчас сделал низкоуровневое стирание флешки и отформатировал средствами windows и 0xEB, 0x??, 0x90 (что равнозначно 0xE9 указанному мной выше, но в том случае форматировалась карточка фотоаппаратом) оказалась все-таки в нулевом секторе без всяких там смещений. Видимо, MBR был в начале, а уж потом загрузочный FAT сектор. Притом смещение разное на разных флешках. В случае с флешкой MBR может и отсутствовать
CrimsonPig

Не надо читать никакие wiki.
Надо погуглить на тему "Microsoft fat file system specification".
Там будет документ, где все расписано относительно точно.

На носителе может быть еще и Partition Table.
kolobochishe
Цитата(CrimsonPig @ Nov 5 2016, 19:39) *
...
Надо погуглить на тему "Microsoft fat file system specification".
...


Ну я собственно его и читаю, и так и не понял откуда там 3-й сектор взялся. BPB, FsInfo. А что за третий то? Реально на флешке это просто пустой сектор который следует за FsInfo и содержит лишь паттерн 0xAA55 в конце. Зачем он нужен и откуда он взялся?

Про расположение копии FsInfo правда я рано спросил. Там ясно написано, что в секторе #7
CrimsonPig
Цитата(kolobochishe @ Nov 5 2016, 13:51) *
Ну я собственно его и читаю, и так и не понял откуда там 3-й сектор взялся. BPB, FsInfo. А что за третий то? Реально на флешке это просто пустой сектор который следует за FsInfo и содержит лишь паттерн 0xAA55 в конце. Зачем он нужен и откуда он взялся?
Про расположение копии FsInfo правда я рано спросил. Там ясно написано, что в секторе #7


Я уже точно не помню, но стоит взглянуть на поле BPB_RsvdSecC (offset 14). Оно говорит, сколько секторов зарезервировано от начала volume и до начала FAT tables. Все сектора, которые не несут служебной информации, могут содержать что угодно, в том числе и код загрузчика.
Кроме того, это поле используется для выравнивания FAT tables по началу EraseBlock, если это кому-то надо (SD карточки, например).
На FsInfo лучше не полагаться, никто его толком не использует, потому что почти невозможно гарантировать правильность записанной там информации.
kolobochishe
В общем-то во всем относительно разобрался.

Область данных (и рут директория в случае с FAT32) располагается сразу после копии FAT.

Адрес начала области данных по документации Microsoft желательно должен быть выровнен по размеру кластера. Опытным путем на компе с Win7 все же было получено другое минимальное значение 4 194 304 байта от начала. В документе же Microsoft в комменте к примеру на карточку 512МБ и Fat32 было написано, что число Reserved Sectors не должно быть меньше 32 секторов. Все что в большую сторону - допустимо.

Теперь берем адрес ROOT DIRECTORY в секторах (не кластерах) и отнимаем от него размер в секторах 2-х областей FAT индексов и в итоге получаем Reserved Sectors.

Теперь по секторам (в случае отсутствия MBR и PARTITION TABLE) :

Сектор 0 - 512 байт BPB (загрузочная запись)
Сектор 1 - 512 байт FS_Info
Сектор 3 - пустой сектор с таким же паттерном в последних 2-х байтах, что и BPB (0x55 и 0xAA)
Сектор 4, 5 - пустые (нули)

Далее если в поле BPB_BkBootSec указали не 0, а 6, то:
Сектор 6 - полная копия [Сектор 0]
Сектор 7 - полная копия [Сектор 1]
Сектор 8 - полная копия [Сектор 2]

Далее все заполнено нулями до самого начала первой FAT index table.

Размер таблицы индексов округляется в большую сторону кратно размеру сектора (как правило, в большинстве случаев 512 байт).

--------------------------
Еще вопрос к знатокам чисто из любопытства. Что windows пишет в 12 секторе? Вот здесь https://en.wikipedia.org/wiki/Design_of_the...stem#attributes сказано, что "In some cases, Microsoft also uses sector 12 of the reserved sectors area for an extended boot loader." Может кто-нибудь пояснить, что там обычно? Остальные устройства в этом секторе ничего не пишут при форматировании. Где-то слышал про вирус Win32.Sector12, но Microsoft Essentials не обнаружил угрозы.


Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.