Загрузочный сектор, FSINFO, таблица FAT и записи каталогов FAT

Процесс поиска удаленных файлов состоит из обнаружения и интерпретации содержимого диска. Этой статьей мы откроем цикл, в котором расскажем, как найти и правильно «прочитать» системную информацию. Существует четыре версии FAT — FAT8, FAT12, FAT16 и FAT32. Мы проведем анализ FAT32 диска, расположенного на SD-карте памяти фотоаппарата.

Структуры файловой системы FAT

Логический диск под управление FAT32 можно разделить на 3 логических части, которые идут последовательно друг за другом:

  • Зарезервированная область;
  • Область FAT;
  • Область данных (содержит корневой каталог и содержимое файлов);
Структура данных FAT

Рис.1 Физическая структура FAT.

Система FAT очень проста и условно в ней можно выделить 4 структуры:

  • Загрузочный сектор;
  • FSINFO;
  • Таблица FAT;
  • Записи каталогов.

Загрузочный сектор

Загрузочный сектор занимает 1 сектор (чаще всего 512 байт) и располагается в первом секторе. Давайте рассмотрим подробнее его содержимое.

Смещение Размер Описание Обязательное
0 3 Ссылка на загрузочный код Нет
3 8 Метка ОС I Нет
11 2 Сколько байт в секторе Да
13 1 Сколько секторов в кластере II Да
14 2 Размер резервной области в секторах Да
16 1 Сколько копий FAT-таблицы Да
17 2 Сколько объектов в корневом каталоге III Да
19 2 Сколько секторов на диске IV Да
21 1 Метка носителя V Нет
22 2 Размер таблицы FAT в секторах III Да
24 2 Сколько секторов в дорожке Нет
26 2 Сколько головок Нет
28 4 Сколько секторов перед началом раздела Нет
32 4 Сколько секторов в кластере II Да
36 4 Размер таблицы FAT в секторах Да
40 2 Режим обновления VI Да
42 2 Номер версии Да
44 4 Кластер с корневым каталогом Да
48 2 Сектор с FSINFO Нет
50 2 Сектор с резервной копией
загрузочного сектора
Нет
52 12 Резерв Нет
64 1 Номер диска Нет
65 1 Не используется Нет
66 1 Последовательность байт 0x29 VII Нет
67 4 Серийный номер тома Нет
71 11 Метка тома I Нет
82 8 Метка Нет
90 420 Резерв Нет
510 2 Последовательность байт 0xAA55 Нет

Таб.1 Структура загрузочного сектора FAT.

  • I В кодировке ASCII;
  • II Задается степенью 2;
  • III Использовалось для ранних версий FAT. Для FAT32 = 0;
  • IV Если количество секторов на диске больше 65535, используется поле по адресу 32;
  • V Для жестких дисков – 0xf8, для съемных – 0xf0;
  • VI Если бит 7 равен 1, активна только одна копия FAT, индекс которой определяется разрядами 0-3. В противном случае все структуры FAT являются зеркальными копиями друг друга;
  • VII Последовательность байт 0x29;

Информация из загрузочного сектора играет основополагающую роль в восстановлении удаленных файлов, поэтому его обнаружение чрезвычайно важно.

Структура FSINFO

Ссылка на начало структуры хранится в загрузочном секторе, размер составляет 1 сектор (обычно 512 байт). FAT использует FSINFO для алгоритма выделения свободных секторов диска.

Смещение Размер Описание Обязательное
0 4 Последовательность байт
0x41615252
Нет
4 480 Резерв Нет
484 4 Последовательность байт
0x6147272
Нет
488 4 Сколько свободных кластеров Нет
492 4 Следующий свободный кластер Нет
496 12 Резерв Нет
508 4 Последовательность байт
0xAA550000
Нет

Таб.2 Структура данных FSINFO.

Поскольку FSINFO может не обновляться и все ее поля не обязательны, опираться на нее для извлечения данных мы не можем.

Таблица FAT

Файловая система может иметь несколько копий этой таблицы, точное количество таблиц и их размер указаны в загрузочном секторе. Обычно используется 2 копии, полностью дублирующие друг друга. Они располагаются последовательно, одна за другой, и имеют столько записей, сколько кластеров на диске.

В FAT32 структура состоит из записей размером 4 байта. Каждая запись соответствует кластеру на логическом диске и может принимать следующие значения:

  • 0x000 0000 – если кластер свободен;
  • 0x0fff fff7 – если кластер поврежден и не должен выделяться;
  • 0x0fff fff8 – если кластер завершает файл или каталог;
  • 0x000 0001 … 0x0fff fff6 – указатель на следующий кластер, занимаемый файлом или каталогом.

Чтение и анализ основной таблицы FAT и её копий позволяют выяснить, в каких кластерах хранится содержимое нужного файла.

Записи каталогов

Записи каталогов содержат имя, атрибуты файлов и каталогов, а также время создания, последнего доступа и редактирования объектов. Эта информация хранится в кластерах, выделенных родительскому каталогу, ссылку на который можно получить из загрузочного сектора.

Базовая структура (Simple File Name) поддерживает только короткие имена файлов (8 символов – имя и 3 символа – расширение). Для поддержки длинных имён файлов в добавление к базовой записи создаются дополнительные структуры (Long File Name). Записи LFN имеют размер 32 байта и предшествуют базовой записи.

Смещение Размер Описание Обязательное
0 1 Порядковый номер
или последовательность байт 0xe5 I, II
Да
1 10 Первые 5 символов имени файла I Да
11 1 Последовательность байт 0x0f Да
12 1 Резерв Нет
13 1 Контрольная сумма Да
14 12 Следующие 6 символов имени файла I Да
26 2 Резерв Нет
28 4 Следующие 2 символа имени файла I Да

Таб.3 Структура записи каталога Long File Name.

  • I Имя файла хранится в Unicode;
  • II FAT заменяет первый символ имени файла на 0xe5, если он удален.

Для хранения длинного имени файла может использоваться несколько структур LFN. Чтобы получить полное имя, нужно сложить все эти структуры. После дополнительных следует базовая запись каталога размером 32 байта.

Смещение Размер Описание Обязательное
0 1 Первый символ имени файла I, II Да
1 10 Следующие 10 символов имени файла I Да
11 1 Атрибуты III Да
12 1 Резерв Нет
13 1 Десятые доли секунды времени создания Нет
14 2 Часы, минуты, секунды времени создания Нет
16 2 Дата создания Нет
18 2 Дата последнего обращения Нет
20 2 Старшие 2 байта ссылки на первый кластер Да
22 2 Часы, минуты, секунды времени модификации Нет
24 2 Дата модификации Нет
26 2 Младшие 2 байта ссылки на первый кластер Да
28 4 Размер файла Да

Таб.4 Структура базовой записи каталога FAT.

  • I Имя файла в кодировке ASCII;
  • II FAT заменяет первый символ имени файла на 0xe5, если он удален;
  • III Возможные атрибуты перечислены в таблице.
Значение Описание
0x01 Доступ только для чтения
0x02 Скрытый файл
0x04 Системный файл
0x08 Метка тома
0x0f Длинное имя файла
0x10 Каталог
0x20 Архивный файл

Таб.5 Атрибуты.

Из базовой записи можно восстановить атрибуты файла, время создания и редактирования, а также ссылку на первый кластер содержимого.

HEX редактор

Продукты компании Hetman Software имеют встроенный HEX редактор, который позволяет быстро найти и просмотреть содержимое загрузочного сектора и его копии, записи FAT-таблицы, корневого каталога и области данных. Подробнее о том, как использовать эти таблицы и алгоритмы восстановления диска FAT, читайте у нас в блоге.

Author: Michael Miroshnichenko

1 Star2 Stars3 Stars4 Stars5 Stars (4 votes, average: 5.00 out of 5)