kochevkv 0 5 ноября, 2016 Опубликовано 5 ноября, 2016 (изменено) · Жалоба Всем доброго дня! Решил тут сделать форматирование флешки в своем приборе на МК. Смотрю описание 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 может и отсутствовать Изменено 5 ноября, 2016 пользователем kolobochishe Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CrimsonPig 0 5 ноября, 2016 Опубликовано 5 ноября, 2016 · Жалоба Не надо читать никакие wiki. Надо погуглить на тему "Microsoft fat file system specification". Там будет документ, где все расписано относительно точно. На носителе может быть еще и Partition Table. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kochevkv 0 5 ноября, 2016 Опубликовано 5 ноября, 2016 · Жалоба ... Надо погуглить на тему "Microsoft fat file system specification". ... Ну я собственно его и читаю, и так и не понял откуда там 3-й сектор взялся. BPB, FsInfo. А что за третий то? Реально на флешке это просто пустой сектор который следует за FsInfo и содержит лишь паттерн 0xAA55 в конце. Зачем он нужен и откуда он взялся? Про расположение копии FsInfo правда я рано спросил. Там ясно написано, что в секторе #7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CrimsonPig 0 5 ноября, 2016 Опубликовано 5 ноября, 2016 · Жалоба Ну я собственно его и читаю, и так и не понял откуда там 3-й сектор взялся. BPB, FsInfo. А что за третий то? Реально на флешке это просто пустой сектор который следует за FsInfo и содержит лишь паттерн 0xAA55 в конце. Зачем он нужен и откуда он взялся? Про расположение копии FsInfo правда я рано спросил. Там ясно написано, что в секторе #7 Я уже точно не помню, но стоит взглянуть на поле BPB_RsvdSecC (offset 14). Оно говорит, сколько секторов зарезервировано от начала volume и до начала FAT tables. Все сектора, которые не несут служебной информации, могут содержать что угодно, в том числе и код загрузчика. Кроме того, это поле используется для выравнивания FAT tables по началу EraseBlock, если это кому-то надо (SD карточки, например). На FsInfo лучше не полагаться, никто его толком не использует, потому что почти невозможно гарантировать правильность записанной там информации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kochevkv 0 7 ноября, 2016 Опубликовано 7 ноября, 2016 · Жалоба В общем-то во всем относительно разобрался. Область данных (и рут директория в случае с 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 не обнаружил угрозы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться