Какие атрибуты содержат небольшие файлы в таблице mft

Обновлено: 07.07.2024

Содержание

Строение

Метафайлы

Метафайлы NTFS — служебные файлы (области), каждый из которых выполняет ту или иную функцию файловой системы NTFS. Все метафайлы находятся в корневом каталоге NTFS тома, недоступном ОС.

  • $MFT — основная таблица MFT
  • $MFTmirr — копия первых шестнадцати записей MFT (размещенная ровно посередине тома)
  • $Boot — загрузчик (только на первичном томе)
  • . — (с точкой как название) корневой каталог
  • $LogFile — журнал файловой системы
  • $Volume — служебная информация (метка и ID тома, версия файловой системы, т.д.)
  • $Bitmap — карта свободного места тома
  • $AttrDef — список стандартных атрибутов файлов на томе
  • $Quota — записи с правами пользователей на использование дискового пространства (квотами)
  • $Secure — дескрипторы безопасности файловых объектов (права доступа)

Связь с NTFS

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

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

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

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

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

В зависимости от среднего размера файлов и других критериев при заполнении диска зарезервированная для MFT зона или незарезервированное дисковое пространство могут исчерпываться в первую очередь.

Тома с небольшим количеством относительно больших файлов сначала исчерпывают незарезервированное дисковое пространство, в то время как тома с большим числом относительно небольших файлов сначала исчерпывают пространство, зарезервированное для MFT. В любом случае, при переполнении одной из этих областей начинается фрагментация MFT. При переполнении незарезервированного дискового пространства из зоны MFT начинает выделяться пространство для пользовательских файлов и папок, что приводит к фрагментации MFT. При переполнении зоны MFT пространство для новых записей MFT начинает выделяться из незарезервированного дискового пространства, что снова приводит к фрагментации MFT. [2]

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

По мере того, как каталог растет, список файлов может потребовать нерезидентной формы хранения. Однако начальная часть списка всегда остается резидентной в корневой записи каталога в таблице MFT. Имена файлов резидентной части списка файлов являются узлами B-дерева. Остальные части списка файлов размещаются вне MFT. Для их поиска используется специальный атрибут "размещение списка" (Index Allocation - IA), представляющий собой набор номеров кластеров, которые указывают на остальные части списка. Одни части списков являются листьями дерева, а другие являются промежуточными узлами, то есть содержат наряду с именами файлов атрибут Index Allocation, указывающий на списки файлов более низких уровней. [3]


Стандарт файловой системы NTFS версии 3.1 появился в 2001 году с выходом на рынок Windows XP и с тех пор не претерпел фундаментальных изменений. В Windows 10 также используется NTFS v3.1. Архитектуру и особенности внутреннего устройства этой файловой системы Крис Касперски подробно описал в своей книге «Восстановление данных», которая сейчас готовится к переизданию. Мы публикуем отрывок из этой книги, где Крис рассказывает о том, что представляет собой NTFS изнутри.

NTFS с высоты птичьего полета

Основным структурным элементом всякой файловой системы является том (volume), в случае с FAT совпадающий с разделом (partition). NTFS поддерживает тома, состоящие из нескольких разделов (см. рис.). Будем для простоты считать, что том представляет собой отформатированный раздел (то есть раздел, содержащий служебные структуры файловой системы).

Большинство файловых систем трактуют том как совокупность файлов, свободного дискового пространства и служебных структур файловой системы, но в NTFS все служебные структуры представлены файлами, которые (как это и положено файлам) могут находиться в любом месте тома, при необходимости фрагментируя себя на несколько частей.

Основным служебным файлом является главная файловая таблица, $MFT (Master File Table) — своеобразная база данных, хранящая информацию обо всех файлах тома: их именах, атрибутах, способе и порядке размещения на диске. Каталог также является файлом особого типа, со списком принадлежащих ему файлов и вложенных подкаталогов. Важно подчеркнуть, что в MFT присутствуют все файлы, находящиеся во всех подкаталогах тома, поэтому для восстановления диска наличия файла $MFT будет вполне достаточно.

Остальные служебные файлы, называемые метафайлами (metafiles) или метаданными (metadata), всегда имеют имена, начинающиеся со знака доллара ( $ ), и носят сугубо вспомогательный характер, интересный только самой файловой системе. К ним в первую очередь относится: $LogFile — файл транзакций, $Bitmap — карта свободного/занятого пространства, $BadClust — перечень плохих кластеров. Текущие версии Windows блокируют доступ к служебным файлам с прикладного уровня (даже с правами администратора!), и всякая попытка открытия или создания такого файла в корневом каталоге обречена на неудачу.

Классическое определение, данное в учебниках информатики, отождествляет файл с именованной записью на диске. Большинство файловых систем добавляет к этому понятие атрибута (attribute) — некоторой вспомогательной характеристики, описывающей время создания, права доступа и так далее. В NTFS имя файла, данные файла и его атрибуты полностью уравнены в правах. Иначе говоря, всякий файл NTFS представляет собой совокупность атрибутов, каждый из которых хранится как отдельный поток байтов. Поэтому, во избежание путаницы, атрибуты, хранящие данные файла, часто называют потоками (streams).

Каждый атрибут состоит из тела (body) и заголовка (header). Атрибуты подразделяются на резидентные (resident) и нерезидентные (non-resident). Резидентные атрибуты хранятся непосредственно в $MFT , что существенно уменьшает грануляцию дискового пространства и сокращает время доступа. Нерезидентные атрибуты хранят в $MFT лишь свой заголовок, описывающий порядок размещения атрибута на диске.

Назначение атрибута определяется его типом (type), представляющим собой четырехбайтное шестнадцатеричное значение. При желании атрибуту можно дать еще и имя (name), состоящее из символов, входящих в соответствующее пространство имен (namespace). Подавляющее большинство файлов имеет по меньшей мере три атрибута. К их числу относится стандартная информация о файле (время создания, модификации, последнего доступа, права доступа), которая хранится в атрибуте типа 10h , условно обозначаемом $STANDARD_INFORMATION . Ранние версии Windows NT позволяли обращаться к атрибутам по их условным обозначениям, но начиная с Windows 2000 мы лишены этой возможности. Полное имя файла (не путать с путем!) хранится в атрибуте типа 30h ( $FILE_NAME ).

Если у файла есть одно или несколько альтернативных имен, таких атрибутов может быть и несколько. Здесь же хранится ссылка (file reference) на родительский каталог, позволяющая разобраться, к какому каталогу принадлежит данный файл или подкаталог. По умолчанию данные файла хранятся в безымянном атрибуте типа 80h ( $DATA ). Однако при желании прикладные программы могут создавать дополнительные потоки данных, отделяя имя атрибута от имени файла знаком двоеточия (например: ECHO xxx > file:attr1; ECHO yyy > file:attr2; more < file:attr1; more < file:attr2 ).

Изначально в NTFS была заложена способность индексации любых атрибутов, значительно сокращающая время поиска файла по заданному списку критериев (например, времени последнего доступа). Индексы хранятся в виде двоичных деревьев, поэтому среднее время выполнения запроса оценивается как O(lg n) . На практике в большинстве драйверов NTFS реализована индексация лишь по имени файла. Как уже говорилось ранее, каталог представляет собой файл особого типа — файл индексов. В отличие от FAT, где файл каталога представляет собой единственный источник данных об организации файлов, в NTFS файл каталога используется лишь для ускорения доступа к содержимому каталога. Он не является обязательным, так как ссылка на родительский каталог всякого файла в обязательном порядке присутствует в атрибуте его имени ( $FILE_NAME ).

Продолжение доступно только участникам

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Крис Касперски

Известный российский хакер. Легенда ][, ex-редактор ВЗЛОМа. Также известен под псевдонимами мыщъх, nezumi (яп. 鼠, мышь), n2k, elraton, souriz, tikus, muss, farah, jardon, KPNC.

Основная таблица файлов (MFT) хранит сведения, необходимые для извлечения файлов из раздела NTFS.

Файл может иметь одну или несколько записей MFT и может содержать один или несколько атрибутов. В файловой системе NTFS ссылка на файл является ссылкой на сегмент MFT основной записи файла. Дополнительные сведения см. в статье _ _ Справочник по сегментам MFT.

MFT содержит сегменты записей файлов; первые 16 из них зарезервированы для специальных файлов, например следующих:

  • 0: MFT ($Mft)
  • 5: корневой каталог ( \ )
  • 6: файл выделения кластера тома ($Bitmap)
  • 8: Bad — файл кластера ($BadClus)

Каждый сегмент записи файла начинается с заголовка сегмента записи файла. Дополнительные сведения см. в разделе _ _ _ заголовок сегмента записи файла. За каждым сегментом записи файла следуют один или несколько атрибутов. Каждый атрибут начинается с заголовка записи атрибута. Дополнительные сведения см. в разделе _ _ заголовок записи атрибута. Запись атрибута включает тип атрибута (например, $DATA или $BITMAP), необязательное имя и значение атрибута. Пользовательский поток данных — это атрибут, как и все потоки. Список атрибутов завершается с параметром 0xFFFFFFFF ($END).

Ниже приведены некоторые примеры атрибутов.

  • Файл $Mft содержит неименованный $DATA атрибут, который представляет собой последовательность сегментов записи MFT в порядке.
  • Файл $Mft содержит неименованный атрибут $BITMAP, который указывает, какие записи MFT используются.
  • Файл $Bitmap содержит неименованный $DATA атрибут, указывающий, какие кластеры используются.
  • Файл $BadClus содержит атрибут $DATA с именем $BAD, который содержит запись, соответствующую каждому поврежденному кластеру.

Если больше нет места для хранения атрибутов в сегменте записи файла, то дополнительные сегменты записи файла выделяются и вставляются в первый (или базовый) сегмент записи файла в атрибуте, который называется списком атрибутов. Список атрибутов указывает, где можно найти каждый атрибут, связанный с файлом. Сюда входят все атрибуты в записи базового файла, за исключением самого списка атрибутов. Дополнительные сведения см. в разделе _ _ элемент списка атрибутов.

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

Содержание

MFT представляет собой файл (разделенный на записи (строки), обычно размером 1 Кб), в котором хранится информация обо всех файлах тома, в том числе и о самом MFT. Файлами, которым отведено первые 16 записей, являются метафайлы, недоступные операционной системе, но важные для файловой системы NTFS, причем они дублируются ровно посередине тома. Система не может выполнять перемещение записей MFT-зоны для ликвидации их фрагментации по мере их расширения, поэтому сразу после форматирования NTFS том делится как бы на две части: служебную область, которая предоставляется под использование пользователем, и зарезервированную под MFT (12,5 %). Механизм использования MFT-зоны достаточно гибок, и, когда файловое пространство заполняется, MFT-зона просто сокращается, а когда в файловом пространстве появится свободное место, она может быть вновь расширена. MFT-зона сохраняется целой как можно дольше, так как при её расширении она может фрагментироваться, что нежелательно в связи с возможностью понижения скорости работы с томом. Модульность структуры MFT обеспечивает устойчивость NTFS к ошибкам по сравнению с FAT, так как MFT может переместить и фрагментировать все свои области, обойдя повреждения диска (кроме первых 16 записей).

Метафайлы NTFS — служебные файлы (области), каждый из которых выполняет ту или иную функцию файловой системы NTFS. Все метафайлы находятся в корневом каталоге NTFS тома, недоступном ОС. [1]

— основная таблица MFT

— журнал файловой системы

— карта свободного места тома

— записи с правами пользователей на использование дискового пространства (квотами)

Обычно файлы с дисков физически не удаляются, а просто как бы скрываются. В последствии они затрутся новыми папками и файлами, но пока информация об их существовании остается в специальной таблице MFT (главная файловая таблица). Благодаря этой информации специалисты могут восстановить случайно удаленные данные с вашего компьютера. Но если эту информацию удалить, то восстановление будет почти невозможным.

Благодаря опции «Очистка свободного места» вы можете уничтожить информацию обо всех удаленных файлах. Эта опция не влияет на быстродействие компьютера, с помощью нее вы можете усилить свою конфиденциальность, не дать возможность посторонним восстановить ваши удаленные документы, видео, фотографии и т.д.

MFT и его структура

Как уже было сказано выше, MFT состоит из массива записей размеров 1 Кб. Каждая запись идентифицирует один файл, расположенный на диске. При создании файла NTFS находит пустую запись в MFT, затем заполняет ей информацией о создаваемом файле. Можно привести инфоррмацию о составе информации, записываемой в главную таблицу файлов.

Тип информации

Описание

Метафайлы

Как уже обсуждалось, основная информация о файле содержится в файловой записи (File Record ) размером 1 КБ таблицы MFT , а небольшие файлы целиком хранятся в файловой записи.

Файловая запись состоит из заголовка ( Header ) и набора атрибутов ( Attribute ). В заголовке содержится служебная информация о файловой записи, например, её тип и размер. Все данные, относящиеся непосредственно к файлу, хранятся в виде атрибутов. Названия атрибутов, так же как и системных файлов, начинаются с "$". Например, отдельными атрибутами являются имя файла ($FILE_NAME), информация о его свойствах ( $STANDARD_INFORMATION ), данные файла ( $DATA ). Типичная файловая запись представлена на рис.17.3.

Файловая запись

На диске файловая запись всегда расположена в начале сектора, первые байты файловой записи кодируют слово "FILE" (ASCII-коды: 46 49 4C 45). Конец записи определяется 4 байтовой последовательностью FF FF FF FF.

Физически атрибут файла хранится в виде потока байтов ( stream ) – простой последовательности байтов. Такое представление позволяет одинаковым образом работать с разнотипными атрибутами, а также добавлять нестандартные пользовательские атрибуты.

Каждый атрибут состоит из заголовка ( attribute header ), определяющего тип атрибута и его свойства, и тела ( attribute body ), содержащего основную информацию атрибута.

Более подробная структура файловой записи представлена на рис.17.4.

Структура файловой записи

По расположению относительно MFT атрибуты бывают резидентные и нерезидентные. Резидентные атрибуты ( resident attributes) полностью помещаются в файловую запись MFT , нерезидентные атрибуты (nonresident attributes) хранятся вне MFT . Область, в которой расположен нерезидентный атрибут , называется группой (run). Поскольку нерезидентных атрибутов в файле может быть несколько, то и групп бывает тоже несколько. Множество групп файла называется списком групп (RunList). Файловая запись при наличии нерезидентных атрибутов содержит ссылку на расположение группы на диске (см. пример на рис.17.2 "Главная таблица файлов MFT ").

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

Поля заголовка и атрибутов файловой записи


Рис. 17.5. Поля заголовка и атрибутов файловой записи

В начале файловой записи находится признак её начала – слово "FILE" (46 49 4C 45). По смещению 0x14 расположено двухбайтовое поле , в котором записано смещение первого атрибута относительно начала файловой записи. В примере в этом поле записано 38, т. е. первый атрибут расположен по смещению 38.

В следующем поле хранится тип файловой записи: значение 01 обозначает файл , 02 – каталог ( directory ). В примере файловая запись соответствует файлу ( значение 01 по смещению 16).

Ещё одно поле в заголовке содержит размер всей записи. В примере на рис.17.5 в этом поле записано 1A0, т. е. размер записи составляет 416 байт .

Каждый атрибут имеет поля, указывающие тип, длину и резидентность атрибута. Все типы атрибутов имеют свои численные значения, например, атрибуту $FILE_NAME соответствует значение 0x30, атрибуту $STANDARD_INFORMATION – 0x10, атрибуту $DATA – 0x80.

Если атрибут резидентный, в поле резидентности записывается 0x00, иначе – 0x01. В случае нерезидентного атрибута предусмотрены поля для хранения номеров кластеров, в которых располагается группа или несколько групп, выделенных для размещения файла.

В примере на рис.17.5 показаны два атрибута. Первый атрибут имеет тип $STANDARD_INFORMATION ( значение 10), длина атрибута 96 байт (6016 = 9610), атрибут является резидентным (00). У второго атрибута тип $ DATA (80), длина – 72 байта (4816 = 7210), атрибут является нерезидентным (01).

Для обозначения кластеров используются два типа номеров: LCN и VCN . При помощи первого типа, LCN (Logical Cluster Number – логический номер кластера), нумеруются все кластеры на диске, от первого до последнего. LCN применяются, чтобы найти начальный кластер группы. Номера VCN ( Virtual Cluster Number – виртуальный номер кластера) обозначают порядковый номер кластера внутри группы. Схема нумерации кластеров LCN VCN проиллюстрирована на рис.17.6.

Схема нумерации кластеров с использованием LCN VCN


Рис. 17.6. Схема нумерации кластеров с использованием LCN VCN

В случае нерезидентных атрибутов в заголовке атрибута содержатся следующие поля: номер VCN первого кластера группы (обычно равен 0х00), номер VCN последнего кластера группы и список групп (RunList), описывающий расположение групп на диске.

Рассмотрим пример описания расположения групп, приведенный на рис.17.5 (справа). В этом примере значения полей следующие:

  • первый VCN = 0x00;
  • последний VCN = 0x3F;
  • список групп (RunList) = 0x21 40 55 20 00.

Расположение кластеров для данного примера приведено на рис.17.7.

Расположение кластеров группы для примера на рис. 17.5


Рис. 17.7. Расположение кластеров группы для примера на рис. 17.5

В этом примере значение для списка групп

0x21 40 55 20 00

  • 0x21 – первый байт кодирует размер двух полей, которые за ним следуют:
    • младший полубайт обозначает размер поля (в байтах), в котором хранится длина группы в кластерах; в данном случае значение 1 указывает, что на длину группы отводится один байт;
    • старший полубайт обозначает размер поля (в байтах), в котором расположен номер LCN первого кластера группы; в данном случае значение 2 указывает на двухбайтовое поле;

    Указанные обозначения проиллюстрированы на рис.17.8.

    Список группы

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

    Структуры данных для управления файлами

    Рассмотрим структуры данных, задействованные при работе с файловой системой NTFS (рис.17.9).

    Структуры данных, связанные с NTFS

    В структуре данных EPROCESS , описывающей процесс в Windows (см. лекцию 7 "Процессы и потоки"), имеется поле ObjectTable ( файл base\ntos\inc\ps.h, строка 293), в котором содержится указатель на таблицу дескрипторов процесса типа HANDLE_TABLE ( файл base\ntos\inc\ex.h, строка 5179). В строках этой таблицы содержатся ссылки на ресурсы, открытые процессом, и в том числе, ссылки на объекты типа FILE_OBJECT , которые упоминались в лекции 15 "Управление устройствами".

    Структура FILE_OBJECT ( файл base\ntos\inc\io.h, строка 1763) содержит следующие основные поля:

    • FileName – строковое имя файла;
    • Vpb – указатель на структуру VPB, которая представляет том на устройстве внешней памяти;
    • FsContext – указатель на блок управления потоком данных NTFS;
    • DeviceObject – указатель на объект типа DEVICE_OBJECT , связанный с физическим диском, на котором находится файл.

    В структуре VPB ( Volume Parameter Block ) содержатся следующие поля ( файл base\ntos\inc\io.h, строка 1288):

    • VolumeLabelLength – размер тома в байтах;
    • DeviceObject – указатель на объект типа DEVICE_OBJECT , ассоциированный с данным томом (логическим диском);
    • RealDevice – указатель на объект типа DEVICE_OBJECT , ассоциированный с физическим устройством внешней памяти (физическим диском);
    • SerialNumber – серийный номер тома;
    • ReferenceCount – счетчик количества ссылок на структуру; если это поле не равно нулю, значит, структура кем-то используется;
    • VolumeLabel – метка (строковое имя) тома. Максимальная длина метки определяется константой MAXIMUM_VOLUME_LABEL_LENGTH , равной 32 двухбайтовым символам (см. файл base\ntos\inc\io.h, строка 1286).

    На рис.17.9 изображен физический диск , разбитый на три тома (логических диска) – два тома NTFS и один том FAT32 . Поле DeviceObject структуры VPB указывает на объект DEVICE_OBJECT , который ссылается на первый из томов NTFS . Поле RealDevice структуры VPB указывает на объект DEVICE_OBJECT , связанный с физическим диском.

    С каждым файлом NTFS , с которым операционная система в данный момент работает, связана структура данных , называемая блок управления файлом (File Control Block , FCB ). В этой структуре хранится указатель на запись в таблице MFT для данного файла (см. рис.17.9).

    Поскольку в файле существует в общем случае несколько потоков, для каждого потока создается своя структура данных – блок управления потоком ( Stream Control Block , SCB), в котором содержится ссылка на FCB . Поле FsContext структуры FILE_OBJECT указывает на SCB для открытого потока, таким образом, структура FILE_OBJECT на самом деле связана с потоком, а не с файлом. Чтобы открыть другой поток в том же файле требуется создавать новый объект FILE_OBJECT . На рис.17.9 показана ситуация, когда процесс открыл два разных потока одного и того же файла. В WRK можно найти описание блока управления потоком SCB – структуру FSRTL_ADVANCED_FCB_HEADER ( файл base\ntos\inc\fsrtl.h, строка 120) вместе с её основным полем, представляющим структуру FSRTL_COMMON_FCB_HEADER (тот же файл , строка 65).

    Резюме

    В этой лекции приведен обзор файловых систем, поддерживаемых Windows , и подробно рассматривается основная файловая система Windows – NTFS . Дается определение базовым понятиям – диск , раздел, том, сектор, кластер . Перечисляются возможности NTFS . Описывается структура NTFS тома, особое внимание уделяется главной таблице файлов MFT . Рассматриваются виды и структура файловых записей MFT . В заключение приводятся структуры данных Windows Research Kernel , связанные с файловой системой NTFS .

    Читайте также: