Устройства внешней памяти в системе FAT32 имеют не байтовую, а блочную адресацию. Запись информации в устройство внешней памяти осуществляется блоками или секторами. Сектор – минимальная адресуемая единица хранения информации на внешних запоминающих устройствах. Как правило, размер сектора фиксирован и составляет 512 байт. Для увеличения адресного пространства устройств внешней памяти сектора объединяют в группы, называемые кластерами. Кластер – объединение нескольких секторов, которое может рассматриваться как самостоятельная единица, обладающая определёнными свойствами. Основным свойством кластера является его размер, измеряемый в количестве секторов или количестве байт.
Файловая система FAT32 имеет следующую структуру.
Нумерация кластеров, используемых для записи файлов, ведется с 2. Как правило, кластер №2 используется корневым каталогом, а начиная с кластера №3 хранится массив данных. Сектора, используемые для хранения информации, представленной выше корневого каталога, в кластеры не объединяются. Минимальный размер файла, занимаемый на диске, соответствует 1 кластеру.
Загрузочный сектор начинается следующей информацией:
§ EB 58 90 – безусловный переход и сигнатура;
§ 4D 53 44 4F 53 35 2E 30 MSDOS5.0;
§ 00 02 – количество байт в секторе (обычно 512);
§ 1 байт – количество секторов в кластере;
§ 2 байта – количество резервных секторов.
Кроме того, загрузочный сектор содержит следующую важную информацию:
§ 0x10 (1 байт) – количество таблиц FAT (обычно 2);
§ 0x20 (4 байта) – количество секторов на диске;
§ 0x2С (4 байта) – номер кластера корневого каталога;
§ 0x1E8 (4 байта) – количество свободных кластеров, -1 если не известно;
§ 0x1EС (4 байта) – номер последнего записанного кластера;
§ 0x1FE (2 байта) – сигнатура (55 AA).
Таблица FAT содержит информацию о состоянии каждого кластера на диске. Младшие 2 байт таблицы FAT хранят F8 FF FF 0F FF FF FF FF (что соответствует состоянию кластеров 0 и 1, физически отсутствующих). Далее состояние каждого кластера содержит номер кластера, в котором продолжается текущий файл или следующую информацию:
§ 00 00 00 00 – кластер свободен;
§ FF FF FF 0F – конец текущего файла.
Корневой каталог содержит набор 32-битных записей информации о каждом файле, содержащих следующую информацию:
§ 8 байт – имя файла;
§ 3 байта – расширение файла;
Корневой каталог содержит набор 32-битных записей информации о каждом файле, содержащих следующую информацию:
§ 8 байт – имя файла;
§ 3 байта – расширение файла;
§ 1 байт – атрибут файла:
§ 1 байт – зарезервирован;
§ 1 байт – время создания (миллисекунды) (число от 0 до 199);
§ 2 байта – время создания (с точностью до 2с):
§ 2 байта – дата создания:
§ 2 байта – дата последнего доступа;
§ 2 байта – старшие 2 байта начального кластера;
§ 2 байта – время последней модификации;
§ 2 байта – дата последней модификации;
§ 2 байта – младшие 2 байта начального кластера;
§ 4 байта – размер файла (в байтах).
В случае работы с длинными именами файлов (включая русские имена) кодировка имени файла производится в системе кодировки UTF-16. При этого для кодирования каждого символа отводится 2 байта. При этом имя файла записывается в виде следующей структуры:
§ 1 байт последовательности;
§ 10 байт содержат младшие 5 символов имени файла;
§ 1 байт атрибут;
§ 1 байт резервный;
§ 1 байт – контрольная сумма имени DOS;
§ 12 байт содержат младшие 3 символа имени файла;
§ 2 байта – номер первого кластера;
§ остальные символы длинного имени.
Далее следует запись, включающая имя файла в формате 8.3 в обычном формате.