Перейти к содержанию
    

Загрузочные сектора FAT

Всем доброго дня!

 

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

image.jpg

 

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 может и отсутствовать

Изменено пользователем kolobochishe

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Не надо читать никакие wiki.

Надо погуглить на тему "Microsoft fat file system specification".

Там будет документ, где все расписано относительно точно.

 

На носителе может быть еще и Partition Table.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...

Надо погуглить на тему "Microsoft fat file system specification".

...

 

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

 

Про расположение копии FsInfo правда я рано спросил. Там ясно написано, что в секторе #7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Про расположение копии FsInfo правда я рано спросил. Там ясно написано, что в секторе #7

 

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

Кроме того, это поле используется для выравнивания FAT tables по началу EraseBlock, если это кому-то надо (SD карточки, например).

На FsInfo лучше не полагаться, никто его толком не использует, потому что почти невозможно гарантировать правильность записанной там информации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем-то во всем относительно разобрался.

 

Область данных (и рут директория в случае с 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 не обнаружил угрозы.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...