Структуры данных, необходимые для описания файловой системы на диске
Основная функция файловой системы - связь символьного имени файла и блоков диска, принадлежащих файлу, - реализуется с помощью ссылки из записи каталога о данном файле на запись в таблице, формат которой определяется типом файловой системы на данном диске.
Например, в файловой системе FAT, одной из файловых систем, поддерживаемых ОС Windows, имеется таблица отображения файлов (file allocation table), которая поддерживает связный список блоков для каждого файла. Таблица индексирована по номерам блоков. Запись в каталоге указывает на строку в таблице, содержащую первый блок файла, а далее по таблице можно найти все остальные блоки данного файла. Принцип работы файловой системы FAT более подробно описан в [2].
Рассмотрим устройство базовой файловой системы ОС Windows - NTFS.
Главная файловая таблица MFT
В файловой системе NTFS запись о файле в каталоге сопоставляется с записью о файле в главной файловой таблице диска - MFT (master file table), которая содержит информацию о расположении данных файла.
Рис. 12.2. Записи MFT
MFT - главная структура данных на диске, представляет собой обычный файл, содержащий до 248записей размером 1 Кб каждая (см. рис. 12.2). Каждому файлу или каталогу соответствует одна запись. Записи 12-15 зарезервированы для служебных файлов, а записи, начиная с 16-й, предназначены для файлов пользователей. Для больших файлов требуется несколько записей, первая из которых называется базовой. Таблица MFT может располагаться в любом месте диска.
В состав каждой записи входит заголовок и последовательность пар <заголовок атрибута, значение>. Если атрибут целиком помещается в записи MFT, он считается резидентным. В противном случае атрибут помещается в отдельные блоки диска, а в заголовке атрибута хранится информация о его местонахождении. Всегда резидентны атрибуты: "имя файла", "стандартная информация", а такие атрибуты, как "поток данных файла", "индекс" большого каталога обычно нерезидентны, хотя для файлов размером несколько сот байтов поток данных может быть резидентным атрибутом, т.к. целиком помещается в записи MFT.
Чаще данные файла все же не помещаются в записи MFT. Рассмотрим данный вариант несколько подробнее. В этом случае вслед за заголовком в записи размещается список дисковых блоков файла (рис. 12.3).
Рис. 12.3. Запись MFT для 10-блочного файла, состоящего из четырех фрагментов (серий)
Напомним, что решается задача приведения в соответствие номера блока в файле (LCN) номеру блока на диске (VCN). Для этого блоки диска представляются в виде совокупности серий, каждая из которых является непрерывной последовательностью блоков. Например, на рис. показано отображение 10-блочного файла, блоки которого размещаются в 9, 10, 25, 26, 27, 63, 85, 86, 87 и 88-м блоках диска. Схема весьма эффективна, особенно для не слишком фрагментированных файлов, например, непрерывный файл независимо от размера описывается всего одной серией.
Для сильно фрагментированных файлов требуется много серий и несколько MFT записей. Первая запись о файле содержит список остальных записей. Если этот список велик, то он является нерезидентным атрибутом и размещается в отдельном файле.
Номера дисковых кластеров файлов можно узнать при помощи утилиты nfi.exe (NTFS File Sectors Information Util), входящей в состав ресурсов Windows.