Блок начальной загрузки
Блок начальной загрузки (boot record) занимает ровно один сектор — 512 байтов. В FAT12 и FAT16 он состоит из 23 полей, а в FAT32 — из 30 полей. Первые 14 полей, расположенные в первых 36 байтах, едины для всех версий ФС, а следующие поля в FAT12/FAT16 и fAt32 различны.
Некоторые поля являются необязательными (дополнительными) и могут быть заполнены нулями. При этом в FAT12 и FAT16 дополнительными считаются все поля, лежащие после 36-го байта загрузочного сектора. Структура полей приведена в табл. Все смещения представлены в шестнадцатеричном виде, как они и отображаются в HEX-редакторе.
Таблица Начальные 36 байтов boot record
Начальное смещение | Длина, байт | Описание | Обяза тельность |
Команда перехода к загрузочному коду | Нет | ||
Имя OEM как текст ASCII | Нет | ||
000B | Количество байтов в секторе. Допустимые значения: 512, 1024, 2048 или 4096 | Да | |
000D | Количество секторов в кластере. Допустимые значения — степени 2. Размер кластера не должен превышать 32 Кбайт (64 сектора) | Да | |
000E | Число секторов зарезервированной области | Да | |
Количество копий FAT. По умолчанию 2 | Да | ||
Максимальное количество файлов в корневом каталоге для FAT12 и FAT16. В FAT16 оно обычно равно 512 (200h). В FAT32 поле равно 0 | Да | ||
16-разрядное количество секторов в файловой системе. Если число секторов более 65535 (FFFFh), оно указывается в 32-разрядном поле (байты 0020h-0023h), а это поле равно нулю | Да* | ||
Код типа носителя. Для стационарных дисков он равен F8, для съемных — F0 | Нет | ||
16-разрядный размер (в секторах) каждой копии FAT в FAT12 и FAT16. В FAT32 поле равно 0 | Да | ||
Количество секторов на дорожке | Нет | ||
001A | Количество головок | Нет | |
001C | Количество секторов перед началом раздела | Нет | |
32-разрядное количество секторов в файловой системе. Либо это поле, либо 16-разрядное поле (байты 0013h- 0014h) должно быть равно нулю | Да* | ||
Начальное смещение | Длина, байт | Описание | Обяза тельность |
Номер диска BIOS I NT 13h | Нет | ||
Не используется | Нет | ||
Сигнатура (29) показывает, действительны ли следующие три значения | Нет | ||
Серийный номер тома | Нет | ||
002B | Метка тома как текст ASCII. Назначается пользователем при создании файловой системы | Нет | |
Метка типа файловой системы как текст ASCII. Стандартные значения: «FAT», «FAT12» и «FAT16», но ни одно из них не является обязательным | Нет | ||
003E | Не используется (зарезервировано для расширений загрузочного кода и сообщений) | Нет | |
01FE | Сигнатура (AA55) | Нет |
Таблица Продолжение boot record (FAT32)
Начальное смещение | Длина, байт | Описание | Обяза тельность |
32-разрядный размер одной копии FAT (число секторов) | Да | ||
Режим обновления нескольких структур FAT. Если бит 7 равен 1, активна только одна копия FAT, индекс которой определяется разрядами 0-3. В противном случае все структуры FAT являются зеркальными копиями друг друга | Да | ||
002A | Основной и дополнительный номер версии | Да | |
002C | Номер кластера, в котором находится корневой каталог | Да | |
Номер сектора, в котором находится структура FSINFO | Нет | ||
Сектор, в котором находится резервная копия загрузочного сектора (по умолчанию 6) | Нет | ||
Не используется (зарезервировано) | Нет | ||
Номер диска BIOS I NT 13h | Нет | ||
Не используется | Нет | ||
Сигнатура (29) показывает, действительны ли следующие три значения | Нет | ||
Серийный номер тома | Нет | ||
Метка тома как текст ASCII. Назначается пользователем при создании файловой системы | Нет | ||
Начальное смещение | Длина, байт | Описание | Обяза тельность |
Метка типа файловой системы как текст ASCII. Стандартное значение — «FAT32», но оно не является обязательным | Нет | ||
005A | Не используется (зарезервировано для расширений загрузочного кода и сообщений) | Нет | |
01FE | Сигнатура (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 — флаг обновления файловой системы.
Корневой каталог
За второй копией FAT следует корневой каталог (Root Directory). Он, как и FAT, состоит из записей фиксированной длины. В FAT32 размер записи равен 32 байтам. Каждая запись указывает на файл или директорию. Внутренняя структура записи приведена в табл.
Смещение от начала записи | Длина, байт | Описание |
Имя файла или каталога | ||
Расширение | ||
000B | Атрибуты файла | |
000C | Зарезервировано | |
Время создания/модификации (в специальном формате) | ||
Дата создания/модификации (в специальном формате) | ||
001A | Номер начального кластера | |
001C | Размер файла в байтах |
Таким образом, запись каталога связывает имя файла с номером кластера, в котором записано начало этого файла. Запись каталога отсылает к записи о начале этого файла в FAT. Когда длина файла превышает размер кластера (а так обычно и бывает), продолжение файла пишется в следующие кластеры. Как правило, такие фрагменты идут не друг за другом, а разбросаны по всему диску (фрагментация диска). Таблица FAT связывает кластеры, хранящие фрагменты одного файла, в последовательную цепочку (рис.). В последнем звене цепочки указывается, что здесь конец файла.
Рис. Связь каталога, FAT и кластеров, содержащих файл
Хотя файловая система NTFS устроена гораздо сложнее, в силе остается тот же принцип. Записи ФС, ссылаясь друг на друга, приводят от имени файла к кластерам, где этот файл записан. И, наоборот, от кластера с каким-то содержимым они должны, в конечном счете, привести к имени файла и его положению в дереве каталогов.
Дата добавления: 2017-05-18; просмотров: 816;