При форматировании носителя информации на нём создаётся файловая система.
Форматирование можно сравнить с установкой полок с ящиками c
приложенным списком со сведениями, по которым можно узнать, в каком
ящике какие вещи находятся, и какие вещи подходят друг другу. В этом
списке также отмечены испорченные и пустые ящики.
FAT состоит из 5 областей. Они перечислены в следующей таблице. Также
в таблице указаны формулы для расчёта начала каждой области.
Название | Адрес сектора (смещение) |
Главная загрузочная запись MBR (Master Boot Record) | = 0 |
Загрузочная запись раздела PBR (Partition Boot Record) | = 1C8h (4 байта) в главной загрузочной записи |
Записи FAT | = загрузочная запись раздела + 0Eh (2 байта) в загрузочной записи раздела |
Записи каталога | = записи FAT + (16h (2 байта) * 10h (1 байт)) в загрузочной записи раздела |
Область данных (кластер 0) | = записи каталога + (11h (2 байта)*32/512) в загрузочной записи раздела |
Размер сектора всегда составляет 512 байтов. Это число также
указано в позиции загрузочной записи раздела 0Bh (размер записи 2 байта)
в байтах.
Кластер образуется из нескольких объединённых секторов. Чтобы
узнать, сколько секторов содержится в кластере, смотрите следующую
таблицу.
Объем носителя данных | Величина кластера FAT16 | Величина кластера FAT32 | Величина кластера NTFS |
7 Мб - 16 Мб | 2 Кб | не поддерживается | 512 байтов |
17 Мб - 32 Мб | 512 байтов | не поддерживается | 512 байтов |
33 Мб - 64 Мб | 1 Кб | 512 байтов | 512 байтов |
65 Мб - 128 Мб | 2 Кб | 1 Кб | 512 байтов |
129 Мб - 256 Мб | 4 Кб | 2 Кб | 512 байтов |
257 Мб - 512 Мб | 8 Кб | 4 Кб | 512 байтов |
513 Мб - 1 Гб | 16 Кб | 4 Кб | 1 Кб |
Количество секторов в кластере также указаны в позиции загрузочной записи раздела 0Dh (размер записи 1 байт).
Она содержит сведения о жёстком диске и его разделах.
Адрес | Описание | Размер, байтов |
000h | Главная загрузочная запись | 446 |
1BEh | 1. Запись раздела | 16 |
1CEh | 2. Запись раздела | 16 |
1DEh | 3. Запись раздела | 16 |
1EEh | 4. Запись раздела | 16 |
1FEh | Сигнатура BIOS (55h AAh) | 2 |
Первая запись раздела содержит следующие сведения:
Адрес | Описание | Размер поля, байтов |
00h | Статус раздела: 0 если неактивный, 80h если активный. | 1 |
01h | Головка, на которой начинается раздел | 1 |
02h | Дорожка, на которой начинается раздел (биты 16-6), и сектор, на котором начинается раздел (биты 5-0). | 2 |
04h | Тип раздела (1h - FAT12, 4h - FAT16<32Мб, 6h - FAT16>32Мб, Bh - FAT32) | 1 |
05h | Головка, на которой заканчивается раздел. | 1 |
06h | Дорожка, на которой заканчивается раздел (биты 16-6), и сектор, на котором заканчивается раздел (биты 5-0). | 2 |
08h | Расстояние между сектором MBR и первым сектором раздела, в секторах | 4 |
0Ch | Общее число секторов в разделе | 4 |
Находится в разделе и содержит сведения о форматировании этого раздела.
Адрес | Описание | Размер поля, байтов |
00h | Указание перехода + NOP | 3 |
03h | OEM название | 8 |
0Bh | Количество байтов в секторе на жестком диске | 2 |
0Dh | Количество секторов в кластере | 1 |
0Eh | Количество зарезервированных секторов | 2 |
10h | Количество копий FAT, как правило, 2 | 1 |
11h | Количество возможных записей в корневом каталоге: 512 при FAT16 | 2 |
13h | Количество секторов в более маленьких разделах | 2 |
15h | Тип носителя: F8 для жестких дисков; F0 для дискет. | 1 |
16h | Секторов на FAT | 2 |
18h | Секторов на дорожку | 2 |
1Ah | Число головок | 2 |
1Ch | Зарезервированные сектора в начале жесткого диска | 4 |
20h | Общее число секторов в разделе | 4 |
24h | Номер дисковода. Первый жёсткий диск имеет обозначение 80h, второй 81h и т.д. | 2 |
26h | Расширенная загрузочная сигнатура (29h) | 1 |
27h | Серийный номер носителя данных | 4 |
2Bh | Наименование носителя данных | 11 |
36h | Название FAT (FAT16) | 8 |
3Eh | Исполняемый код | 448 |
1FEh | Сигнатура (55h AAh) | 2 |
Записи FAT
Каждая запись имеет размер 2 байта, а её позиция соответствует кластеру в области данных.
Запись содержит в себе либо номер следующего кластера файла, либо состояние текущего кластера.
Рис. 1. Записи FAT
Обозначения:
0000 | Неиспользуемый кластер |
от 1 до количества кластеров | Номер кластера со следующей частью файла |
FFFF0h - FFFF6 | Зарезервированный кластер |
FFF7 | Испорченный кластер |
FFF8h - FFFFh | Конец файла (эта позиция соответствует последнему кластеру файла ) |
В данном примере файл "HaloWelt.txt" начинается в кластере 05h. В
FAT-таблице на позиции 05h стоит значение FFFFh, то есть файл
"HaloWelt.txt" не нуждается в следующем кластере. В области данных в
кластере 5h должен находиться текст файла.
Файл "Format.exe" начинается в кластере 6h и занимает 3 последовательных кластера.
Файл "Zerstuke.exe" начинается в кластере Ch и занимает 3 кластера в различных местах носителя данных.
Кластер 9h отмечен как "испорченный".
Первые 2 позиции в FAT зарезервированы, но в области данных данные начинаются с кластера 0. Поэтому кластер в области данных = (номер кластера в FAT) - 2.
На приведённой выше иллюстрации это не учтено для упрощения понимания структуры.
Адрес | Размер, байтов | Значение |
0h | 8 | Имя файла |
8h | 3 | Расширение |
0Bh | 1 | Свойства файла (00ARSHDV) 00: зарезервированные биты A: бит "архивный" R: бит "только для чтения" S: бит "системный" D: бит "каталог" V: бит "том" |
16h | 2 | Время |
18h | 2 | Дата |
1Ah | 2 | Первый кластер |
1Ch | 4 | Размер |
Данные файла начинаются в соответствующем кластере без
предварительного предупреждения. Если последний кластер не полон,
оставшиеся байты имеют значение 00h. Таким образом, если файл содержит
только 1 байт, этот файл займёт 1 Кбайт памяти (если размер кластера
равен двум секторам). Оставшиеся 1023 байта кластера будут содержать
нули. Чтобы найти последний байт файла, нужно взять величину файла из
позиции записи каталога 1Ch (4 байт) и вычесть из него значение (количество кластеров файла - 1)*размер кластера.
Для жёсткого диска:
Главная загрузочная запись создаётся с помощью fdisk.exe.
Загрузочная запись тома создаётся с помощью format.exe.
При дефрагментации данных кластеры файла присоединяются последовательно друг к другу (если это конечно возможно).
Scandisk.exe сравнивает копии таблиц FAT и проверяет, совпадает
ли размер файла с количеством кластеров. Кластер также не может
принадлежать двум файлам или два раза появляться в файле.
Программа-пример с комментариями и описанием основных функций (с сайта автора).
© PIClist-RUS (piclist.ru), 2007 г.
|