Основным структурным элементом всякой файловой системы является

Рис. 6.1. Обычный (
Большинство файловых систем трактуют
Основным служебным файлом является главная файловая таблица, $MFT
будет вполне достаточно.
Остальные служебные файлы, называемые $
), и носят сугубо вспомогательный характер, интересный только самой файловой системе. К ним, в первую очередь, относится: $LogFile
— файл транзакций, $Bitmap
— карта свободного/занятого пространства, $BadClust
— перечень плохих кластеров и т.д. Более подробная информация о них будет приведена далее в этой главе. Текущие версии Windows блокируют доступ к служебным файлам с прикладного уровня (даже с правами администратора!), и всякая попытка открытия или создания такого файла в корневом каталоге обречена на неудачу.
Классическое определение, данное в учебниках информатики, отождествляет файл с именованной записью на диске. Большинство файловых систем добавляет к этому понятие
Каждый атрибут состоит из
Назначение атрибута определяется его 10h
, условно обозначаемом $STANDARD_INFORMATION
. Ранние версии Windows NT позволяли обращаться к атрибутам по их условным обозначениям, но Windows 2000 и Windows XP лишены этой возможности. Полное имя файла (не путать с путем!) хранится в атрибуте типа 30h
($FILE_NAME
). Если у файла есть одно или несколько альтернативных имен (например, имя MS-DOS), таких атрибутов может быть и несколько. Здесь же хранится 80h
($DATA
). Однако при желании прикладные программы могут создавать дополнительные потоки данных, отделяя имя атрибута от имени файла знаком двоеточия (например: ECHO ххх > file:attr1; ECHO yyy > file:attr2; more < file:attr1; more < file:attr2
).
Изначально в NTFS была заложена способность индексации любых атрибутов, значительно сокращающая время поиска файла по заданному списку критериев (например, времени последнего доступа). Индексы хранятся в виде двоичных деревьев, поэтому среднее время выполнения запроса оценивается как $FILE_NAME
).
Каждый атрибут может быть зашифрован, разрежен или сжат. Техника работы с такими атрибутами выходит далеко за рамки первичного знакомства с организацией файловой системы и будет рассмотрена позднее. Пока же рассмотрим углубленно фундамент файловой системы NTFS — структуру $MFT
.
Главная файловая таблица
В процессе форматирования логического раздела в его начале создается так называемая NtfsMftZoneReservation
, она может составлять 25%, 37% или 50%.

Рис. 6.2. Структура тома, отформатированного под NTFS
В этой области расположен файл $MFT
, изначально занимающий порядка 64 секторов и растущий от начала зоны MFT к ее концу по мере создания новых пользовательских файлов и каталогов. Чем больше файлов содержится на томе, тем больше размер MFT. Приблизительный размер файла MFT можно оценить по следующей формуле: sizeof (FILE Record) * N Files
, где sizeof(FILE Record)
обычно составляет 1 Кбайт, а N Files
— полное количество файлов и подкаталогов раздела, включая недавно удаленные.
Для предотвращения фрагментации файла $MFT
зона MFT удерживается зарезервированной вплоть до полного исчерпания свободного пространства тома, затем незадействованный 'хвост' зоны MFT усекается в два раза, освобождая место для пользовательских файлов. Этот процесс может повторяться многократно, вплоть до полной отдачи всего зарезервированного пространства. Решение красивое, хотя и не новое. Многие из файловых систем восьмидесятых годов прошлого века позволяли резервировать заданное дисковое пространство в хвосте активных файлов, сокращая их фрагментацию (причем любых файлов, а не только служебных). Например, такая способность была у DOS 3.0, разработанной для персональных компьютеров типа 'Агат'. Может быть, кто-то из вас помнит такую машину?
Когда файл $MFT
достигает границ зоны MFT, в ходе своего последующего роста он неизбежно фрагментируется, вызывая обвальное падение производительности файловой системы. При