Открыть сервис

Master File Table

Master File Table (MFT, рус. Главная файловая таблица) — это системная область файловой системы NTFS, представляющая собой реляционную базу данных, в которой хранятся метаданные обо всех файлах и папках, находящихся на томе. MFT является центральным элементом NTFS, определяющим её производительность, надёжность и возможности, такие как поддержка длинных имён, разрешений безопасности и сжатия.

Структура и организация

MFT представляет собой последовательность записей фиксированного размера, называемых записями MFT (MFT Records). Каждая запись обычно имеет размер 1 КБ (1024 байта) и идентифицируется уникальным 48-битным номером — номером записи MFT (MFT Reference Number). Этот номер используется для внутренних ссылок и не совпадает с номером индексного дескриптора (inode) в других файловых системах.

Первые 16 записей MFT (с номерами от 0 до 15) зарезервированы для системных файлов NTFS, которые сами хранятся как обычные файлы в MFT. К ним относятся:

  • $MFT (запись 0) — сама главная файловая таблица.
  • $MFTMirr (запись 1) — зеркальная копия первых четырёх записей MFT, используемая для восстановления при повреждении.
  • $LogFile (запись 2) — журнал транзакций, обеспечивающий восстановление после сбоев.
  • $Volume (запись 3) — информация о томе (метка, серийный номер, версия).
  • $AttrDef (запись 4) — таблица определений атрибутов.
  • $Root (запись 5) — корневой каталог тома.
  • $Bitmap (запись 6) — битовая карта, показывающая, какие кластеры заняты.
  • $Boot (запись 7) — загрузочный сектор тома.
  • $BadClus (запись 8) — список повреждённых кластеров.
  • $Secure (запись 9) — база данных безопасности (дескрипторы безопасности).
  • $UpCase (запись 10) — таблица преобразования регистров символов.
  • $Extend (запись 11) — корень для дополнительных системных файлов (например, $Quota, $Reparse, $ObjId).

Записи MFT

Каждая запись MFT состоит из заголовка и набора атрибутов. Заголовок содержит:

  • Сигнатуру (magic number) — «FILE» для активной записи, «BAAD» для повреждённой.
  • Порядковый номер (sequence number) — увеличивается при повторном использовании записи, что позволяет обнаруживать ссылки на устаревшие записи.
  • Ссылки на первую и последнюю запись в цепочке (для фрагментированных файлов).
  • Флаги состояния (активна, удалена, используется).

Атрибуты хранятся внутри записи MFT в виде последовательности пар «тип-значение». Тип атрибута определяется 16-битным кодом. Основные типы атрибутов:

  • $STANDARD_INFORMATION (0x10) — базовые метаданные: временные метки (создания, изменения, доступа), флаги (архивный, скрытый, системный, только чтение), идентификатор владельца.
  • $FILE_NAME (0x30) — имя файла (до 255 символов в кодировке UTF-16), включая короткое имя в формате 8.3. Файл может иметь несколько атрибутов $FILE_NAME (например, для разных точек монтирования).
  • $SECURITY_DESCRIPTOR (0x50) — разрешения доступа (ACL) и права владения. Часто хранится в общей базе $Secure для экономии места.
  • $DATA (0x80) — содержимое файла. Для небольших файлов (до 900-1000 байт) данные могут храниться непосредственно в записи MFT (резидентные данные). Для больших файлов атрибут содержит список кластеров (экстентов) на диске.
  • $INDEX_ROOT (0x90) и $INDEX_ALLOCATION (0xA0) — используются для каталогов. $INDEX_ROOT хранит первые записи каталога в записи MFT, а $INDEX_ALLOCATION — B-дерево индексов в отдельных кластерах.

Резидентные и нерезидентные атрибуты

Атрибуты делятся на резидентные (хранятся непосредственно в записи MFT) и нерезидентные (хранятся в отдельных кластерах на диске). Резидентные атрибуты обычно используются для метаданных и данных файлов малого размера. Нерезидентные атрибуты содержат указатели на экстенты — непрерывные области кластеров, где расположены данные. Экстенты описываются структурой Data Run, которая кодирует относительный номер кластера и количество кластеров.

Фрагментация и производительность

Поскольку MFT сама является файлом, она может фрагментироваться. Фрагментация MFT снижает производительность, так как для чтения записей требуется обращение к разным участкам диска. Для уменьшения фрагментации NTFS резервирует около 12,5 % объёма тома для MFT (так называемая MFT Zone). Эта зона используется только для расширения MFT и не затрагивается обычными файлами, пока не будет заполнена.

При создании или удалении файлов записи MFT выделяются и освобождаются. Если запись была удалена, она может быть повторно использована для нового файла. Однако порядковый номер записи увеличивается, что позволяет файловой системе обнаруживать устаревшие ссылки.

Восстановление и целостность

MFT является критически важной структурой для работы NTFS. При повреждении MFT том может стать недоступным. Для защиты от сбоев NTFS использует:

  • Зеркальную копию $MFTMirr — хранит копию первых четырёх записей MFT (самой таблицы, её зеркала, журнала и тома). При повреждении основной MFT система может восстановить эти записи.
  • Журнал транзакций $LogFile — записывает все изменения MFT до их применения. В случае сбоя (например, отключения питания) система восстанавливает состояние до последней успешной транзакции.
  • Контрольные суммы — каждая запись MFT содержит контрольную сумму, позволяющую обнаружить повреждения.

Инструменты восстановления, такие как chkdsk, могут анализировать MFT и восстанавливать её целостность, но полное восстановление при серьёзных повреждениях часто невозможно.

Особенности в различных версиях Windows

Реализация MFT менялась с версиями NTFS:

  • NTFS 3.0 (Windows 2000) — введена поддержка точек повторной обработки (reparse points), разреженных файлов и квот.
  • NTFS 3.1 (Windows XP) — добавлена поддержка журнала изменений (USN Journal) и улучшена обработка больших файлов.
  • NTFS 3.2 (Windows Vista/7) — расширена поддержка разреженных файлов и улучшена производительность MFT за счёт оптимизации выделения записей.
  • NTFS 3.3 (Windows 8/10) — добавлена поддержка сжатия для файлов размером более 4 ГБ и улучшена работа с SSD.

В современных версиях Windows (10/11) MFT может занимать до 1/8 объёма тома, но фактически редко превышает 10-15 % при нормальной эксплуатации.

Сравнение с другими файловыми системами

В отличие от FAT32, где каталоги хранятся в виде простого списка, MFT обеспечивает более быстрый поиск и поддержку множества атрибутов. В сравнении с ext4 (Linux), где inode хранят метаданные, MFT хранит данные небольших файлов непосредственно в записи, что снижает количество операций ввода-вывода. Однако MFT более чувствительна к фрагментации, чем Btrfs (Linux) или ReFS (Windows), которые используют более сложные структуры для управления метаданными.

Инструменты для работы с MFT

Для анализа и восстановления MFT используются:

  • chkdsk (Windows) — проверяет целостность файловой системы и MFT.
  • ntfsfix (Linux) — утилита для восстановления NTFS.
  • TestDisk — кроссплатформенный инструмент для восстановления удалённых файлов и повреждённых MFT.
  • WinHex и HxD — шестнадцатеричные редакторы, позволяющие просматривать и редактировать записи MFT.
  • FTK Imager — криминалистический инструмент для создания образов дисков и анализа MFT.

Безопасность и криминалистика

MFT является важным источником данных в компьютерной криминалистике. Она хранит:

  • Временные метки (создание, модификация, доступ, изменение MFT).
  • Имена файлов, в том числе удалённых (записи не стираются, а помечаются как свободные).
  • Размеры файлов и их расположение на диске.
  • Информацию о владельцах и разрешениях.

Удалённые файлы могут быть восстановлены, пока их записи MFT не перезаписаны. Анализ MFT позволяет установить последовательность действий пользователя, определить время доступа к файлам и выявить следы вредоносного ПО.

Источники

  • Руссинович М., Соломон Д. «Внутреннее устройство Microsoft Windows: Windows Server 2003, Windows XP и Windows 2000» (2005).
  • Carrier B. «File System Forensic Analysis» (2005).
  • Документация Microsoft по файловой системе NTFS (MSDN).
  • Спецификация NTFS от проекта Linux-NTFS (open source).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →