Блок начальной загрузки
Блок начальной загрузки (boot record) занимает ровно один сектор — 512 байтов. В FAT12 и FAT16 он состоит из 23 полей, а в FAT32 — из 30 полей. Первые 14 полей, расположенные в первых 36 байтах, едины для всех версий ФС, а следующие поля в FAT12/FAT16 и fAt32 различны.
Некоторые поля являются необязательными (дополнительными) и могут быть заполнены нулями. При этом в FAT12 и FAT16 дополнительными считаются все поля, лежащие после 36-го байта загрузочного сектора. Структура полей приведена в табл. Все смещения представлены в шестнадцатеричном виде, как они и отображаются в HEX-редакторе.
Таблица Начальные 36 байтов boot record
Начальное смещение |
Длина, байт |
Описание |
Обяза тельность |
0000 |
3 |
Команда перехода к загрузочному коду |
Нет |
0003 |
8 |
Имя OEM как текст ASCII |
Нет |
000B |
2 |
Количество байтов в секторе. Допустимые значения: 512, 1024, 2048 или 4096 |
Да |
000D |
1 |
Количество секторов в кластере. Допустимые значения — степени 2. Размер кластера не должен превышать 32 Кбайт (64 сектора) |
Да |
000E |
2 |
Число секторов зарезервированной области |
Да |
0010 |
1 |
Количество копий FAT. По умолчанию 2 |
Да |
0011 |
2 |
Максимальное количество файлов в корневом каталоге для FAT12 и FAT16. В FAT16 оно обычно равно 512 (200h). В FAT32 поле равно 0 |
Да |
0013 |
2 |
16-разрядное количество секторов в файловой системе. Если число секторов более 65535 (FFFFh), оно указывается в 32-разрядном поле (байты 0020h-0023h), а это поле равно нулю |
Да* |
0015 |
1 |
Код типа носителя. Для стационарных дисков он равен F8, для съемных — F0 |
Нет |
0016 |
2 |
16-разрядный размер (в секторах) каждой копии FAT в FAT12 и FAT16. В FAT32 поле равно 0 |
Да |
0018 |
2 |
Количество секторов на дорожке |
Нет |
001A |
2 |
Количество головок |
Нет |
001C |
4 |
Количество секторов перед началом раздела |
Нет |
0020 |
4 |
32-разрядное количество секторов в файловой системе. Либо это поле, либо 16-разрядное поле (байты 0013h- 0014h) должно быть равно нулю |
Да* |
Начальное смещение |
Длина, байт |
Описание |
Обяза тельность |
0024 |
1 |
Номер диска BIOS I NT 13h |
Нет |
0025 |
1 |
Не используется |
Нет |
0026 |
1 |
Сигнатура (29) показывает, действительны ли следующие три значения |
Нет |
0027 |
4 |
Серийный номер тома |
Нет |
002B |
10 |
Метка тома как текст ASCII. Назначается пользователем при создании файловой системы |
Нет |
0036 |
8 |
Метка типа файловой системы как текст ASCII. Стандартные значения: «FAT», «FAT12» и «FAT16», но ни одно из них не является обязательным |
Нет |
003E |
448 |
Не используется (зарезервировано для расширений загрузочного кода и сообщений) |
Нет |
01FE |
2 |
Сигнатура (AA55) |
Нет |
Таблица Продолжение boot record (FAT32)
Начальное смещение |
Длина, байт |
Описание |
Обяза тельность |
0024 |
4 |
32-разрядный размер одной копии FAT (число секторов) |
Да |
0028 |
2 |
Режим обновления нескольких структур FAT. Если бит 7 равен 1, активна только одна копия FAT, индекс которой определяется разрядами 0-3. В противном случае все структуры FAT являются зеркальными копиями друг друга |
Да |
002A |
2 |
Основной и дополнительный номер версии |
Да |
002C |
4 |
Номер кластера, в котором находится корневой каталог |
Да |
0030 |
2 |
Номер сектора, в котором находится структура FSINFO |
Нет |
0032 |
2 |
Сектор, в котором находится резервная копия загрузочного сектора (по умолчанию 6) |
Нет |
0034 |
12 |
Не используется (зарезервировано) |
Нет |
0040 |
1 |
Номер диска BIOS I NT 13h |
Нет |
0041 |
1 |
Не используется |
Нет |
0042 |
1 |
Сигнатура (29) показывает, действительны ли следующие три значения |
Нет |
0043 |
4 |
Серийный номер тома |
Нет |
0047 |
10 |
Метка тома как текст ASCII. Назначается пользователем при создании файловой системы |
Нет |
Начальное смещение |
Длина, байт |
Описание |
Обяза тельность |
0052 |
8 |
Метка типа файловой системы как текст ASCII. Стандартное значение — «FAT32», но оно не является обязательным |
Нет |
005A |
420 |
Не используется (зарезервировано для расширений загрузочного кода и сообщений) |
Нет |
01FE |
2 |
Сигнатура (AA55) |
Нет |
Таким образом, блок начальной загрузки обязательно содержит основные сведения о ФС: размер сектора, размер кластера, а также число секторов, охваченных файловой системой. Кроме того, в FAT32 блок начальной загрузки обязательно указывает на расположение корневого каталога.
Таблица размещения файлов
От блока начальной загрузки переходим к таблице размещения файлов (FAT). Обычно она существует в двух идентичных копиях. Количество копий (1 или 2) указано в загрузочном секторе (поле 0010). Первая копия FAT начинается после зарезервированных секторов, размер которых указывается в поле 000E загрузочного сектора. Размер каждой копии FAT также хранится в загрузочном секторе (в FAT32 это содержимое поля 0024). Вторая копия FAT, если она существует, начинается в следующем секторе за первой копией.
Таблица состоит из записей одинакового размера. Нумерация записей начинается с 0, и каждая запись соответствует кластеру с тем же номером (адресом). Длина каждой записи зависит от версии файловой системы. В FAT12 используются 12-разрядные, в FAT16 — 16-разрядные, а в FAT32 — 32-разрядные записи.
Если кластер еще ни разу не использовался и свободен, его запись заполнена нулями. Записи хотя бы однажды выделявшихся кластеров отличны от нуля и содержат адрес следующего кластера в файле или каталоге. Если кластер завершает цепочку файла или каталога, его запись содержит маркер конца файла: в FAT 12 это любое значение больше FF8, в FAT 16 — FFF8 и в FAT32 — FFF. Если кластер помечен как поврежденный и не должен использоваться системой, его запись содержит значение FF7 в FAT12, FFF7 в FAT 16 или FFF FF7 в FAT32.
Заметим, что адресация кластеров файловой системы начинается с 2. Это значит, что записи 0 и 1 в структуре FAT не используются. Обычно в записи 0 хранится копия типа носителя, а в записи 1 — флаг обновления файловой системы.
