реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Загрузочные сектора FAT, Что-то совсем запутался...
kolobochishe
сообщение Nov 5 2016, 11:35
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



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

Решил тут сделать форматирование флешки в своем приборе на МК. Смотрю описание 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 может и отсутствовать

Сообщение отредактировал kolobochishe - Nov 5 2016, 12:31
Go to the top of the page
 
+Quote Post
CrimsonPig
сообщение Nov 5 2016, 13:39
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502




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

На носителе может быть еще и Partition Table.
Go to the top of the page
 
+Quote Post
kolobochishe
сообщение Nov 5 2016, 13:51
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



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


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

Про расположение копии FsInfo правда я рано спросил. Там ясно написано, что в секторе #7
Go to the top of the page
 
+Quote Post
CrimsonPig
сообщение Nov 5 2016, 17:32
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502



Цитата(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 лучше не полагаться, никто его толком не использует, потому что почти невозможно гарантировать правильность записанной там информации.
Go to the top of the page
 
+Quote Post
kolobochishe
сообщение Nov 7 2016, 17:46
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



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

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


Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 12th August 2025 - 12:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016