1. Восстанавливаемость. В случае отключения питания или какого-либо другого сбоя NTFS восстанавливает дисковые тома и возвращает их в целостное состояние. Восстановление проис-ходит автоматически при первом обращении к диску. NTFS дублирует наиболее важную систем-ную информацию.
2. Защита от несанкционированного доступа, то есть каждый файл имеет дескриптор защиты,каждый пользователь при входе в систему регистрируется, поэтому доступ к файлу получает тот пользова-тель, который имеет соответствующие права.
3. Избыточность данных и отказоустойчивость. В Windows файловая система NTFS организована с помощью драйвера отказоустойчивого диска. Данные дублируются на несколько дисков, создают-ся зеркальные диски.
4. Сжатие данных.
5. Шифрование данных, хранимых на диске.
1. Множественные потоки данных. В NTFS файл – это набор атрибутов, причём данные – это один из атрибутов файла. В файле можно создавать несколько атрибутов данных.
myfile.dat: stream2
2. Имена в UNICODE. Это 16-разрядная кодировка символов. В FAT используется 8-рязрядная кодировка символов. В UNICODE 65536 символов. Имена файлов могут содержать до 255 симво-лов, и содержать несколько точек и пробелов.
3. Универсальное средство индексирования. NTFS позволяет индексировать атрибуты файла. В настоящий момент поддерживается индексирование по имени файла. В каждом каталоге файлы и каталоги расположены упорядоченно, что ускоряет поиск.
4. Переназначение плохих кластеров. Позволяет динамически помечать плохие кластеры.
Здесь мы рассмотрим структуру тома NTFS, включая способы разбиения дискового прост-ранства и его организации в кластеры, принципы хранения на диске реальных файловых данных и информации об атрибутах, а также поясним, как работает механизм сжатия данных в NTFS.
Структура NTFS начинается с тома. Том соответствует логическому разделу на диске и созда-ется при форматировании диска или его части под NTFS. Оснастка Disk Management (Управление дисками) консоли ММС также позволяет создать том RAID, охватывающий несколько дисков.
На диске может быть один или несколько томов. NTFS обрабатывает каждый том независимо от других. Три примера конфигурации 150-мегабайтного жесткого диска показаны на рисунке.
С: С:
С: (75 Мб) (60 Мб)
(150 Мб)
D: D:
(75 Мб) (90 Мб)
Том состоит из набора файлов и свободного пространства, оставшегося в данном разделе диска. В FAT том также содержит области, специально отформатированные для использования файловой системой. Но в томе NTFS все данные файловой системы вроде битовых карт, каталогов и даже начального загрузочного кода хранятся как обычные файлы.
Кластеры.
Размер кластера на томе NTFS, или кластерный множитель (cluster factor), устанавливается при форматировании тома командой format или в оснастке Disk Management. Размер кластера по умолчанию определяется размером тома, но всегда содержит целое число физических секторов с дискретностью N2 (т.е. 1 сектор, 2 сектора, 4 сектора, 8 секторов и так далее). Кластерный множитель выражается числом байт в кластере, например 512 байт, 1 Кб или 2 Кб.
Внутренне NTFS работает только с кластерами. (Однако NTFS инициирует низкоуровневые операции ввода-вывода на томе, выравнивая передаваемые данные по размеру сектора и подгоняя их объем под значение, кратное размеру секторов.) NTFS использует кластер как единицу выделения пространства для поддержания независимости от размера физического сектора. Это позволяет NTFS эффективно работать с очень большими дисками, используя кластеры большего размера, и поддерживать нестандартные диски с размером секторов, отличным от 512 байт. Применение больших кластеров на больших томах уменьшает фрагментацию и ускоряет выделение свободного пространства за счет небольшого проигрыша в эффективности использования дискового простран-ства. Команда format или оснастка Disk Management выбирает кластерный множитель в зависимости от размера тома, но Вы можете изменить это значение.
NTFS адресуется к конкретным местам на диске, используя логические номера кластеров (logical cluster numbers, LCN). Для этого все кластеры на томе просто нумеруются по порядку — от начала до конца. Для преобразования LCN в физический адрес на диске NTFS умножает LCN на кластерный множитель и получает байтовое смещение от начала тома, воспринимаемое интерфейсом драйвера диска. На данные внутри файла NTFS ссылается по виртуальным номерам кластеров (virtual cluster numbers, VCN), нумеруя кластеры, которые принадлежат конкретному файлу (от 0 до т). VCN не обязательно должны быть физически непрерывными.
В NTFS все данные, хранящиеся на томе, содержатся в файлах. Это относится и к структурам данных, используемым для поиска и выборки файлов, к начальному загрузочному коду и битовой карте, в которой регистрируется состояние пространства всего тома (метаданные NTFS). Хранение всех видов данных в файлах позволяет файловой системе легко находить и поддерживать данные, а каждый файл может быть защищен дескриптором защиты. Кроме того, при появлении плохих секторов на диске, NTFS может переместить файлы метаданных.
Главная таблица файлов (MFT) занимает центральное место в структуре NTFS-тома. MFT реализована как массив записей о файлах. Размер каждой записи фиксирован и равен 1 Кб. Логически MFT содержит по одной строке на каждый файл тома, включая строку для самой MFT. Кроме MFT на каждом томе NTFS имеется набор файлов метаданных с информацией, необходимой для реализации структуры файловой системы. Имена всех файлов метаданных NTFS начинаются со знака доллара ($), хотя эти знаки скрыты. Так, имя файла MFT –– $Mft. Остальные файлы NTFS-тома являются обычными файлами и каталогами. Обычно каждая запись MFT соответствует отдельному файлу. Но если у файла много атрибутов или он сильно фрагментирован, для него может понадобиться более одной записи. Тогда первая запись MFT, хранящая адреса других записей, называется базовой (base file record).
При первом обращении к тому NTFS должна смонтировать его, то есть считать с диска метаданные и сформировать внутренние структуры данных, необходимые для обработки обращений к файловой системе. Чтобы смонтировать том, NTFS ищет в загрузочном секторе физический адрес MFT на диске. Запись о самой MFT является первым элементом в этой таблице, вторая запись указывает на файл в середине диска ($MftMirr), который называется зеркальной копией MFT и содержит копию первых нескольких строк MFT. Если по каким-либо причинам считать часть MFT не удастся, для поиска файлов метаданных будет использована именно эта копия MFT.
Файл
$Mft – MFT
$MftMirr – зеркальная копия MFT
$LogFile – файл журнала
$Volume – файл тома
$AttrDef – таблица определения атрибутов
\ – корневой каталог
$Bitmap – файл распределения кластеров тома
$Boot – загрузочный сектор
$BadClus – файл плохих кластеров
$Secure – файл параметров защиты
$UpCase – сопоставление имён с буквами в верхнем регистре
$Extend – каталог расширенных метаданных
Не используется
…
…
Не используется
Пользовательские файлы и каталоги
Найдя запсиь для МFT, NTFS получает из её атрибута данных информацию о сопоставлении VCN и LCN и сохраняет ее в памяти. В каждой группе (run) хранится сопоставление VCN-LCN и длина этой группы – вот и вся информация, необходимая для того, чтобы найти LCN по VCN. Эта информация сообщает NTFS, где на диске искать группы, образующие МFT. Затем NTFS обраба-тывает записи MFT еще для нескольких файлов метаданных и открывает эти файлы. Наконец, NTFS выполняет операцию восстановления файловой системы и открывает остальные файлы метаданных. С этого момента пользователь может обращаться к данному дисковому тому.
В процессе работы системы NTFS ведет запись в другой важный файл метаданных - файл журнала с именем $LogFile. NTFS использует его для регистрации всех операций, влияющих на структуру тома NTFS, в том числе для регистрации создания файлов и выполнения любых команд вроде Copy, модифицирующих структуру каталогов. Файл журнала используется и при восстанов-лении тома NTFS после аварии системы.
Еще один элемент MFT зарезервирован для корневого каталога (также обозначаемого как «\»). Его запись содержит индекс файлов и каталогов, хранящихся в корне структуры каталогов NTFS. Когда NTFS впервые получает запрос на открытие файла, она начинает его поиск с записи корневого каталога. Открыв файл, NTFS сохраняет файловую ссылку MFT для этого файла и поэтому в следующий раз когда понадобится считать или записать тот же файл, сможет напрямую обратиться к его записи в MFT.
NTFS регистрирует распределение дискового пространства в файле битовой карты (bitmap file) с именем $Bitmap. Атрибут данных для файла битовой карты содержит битовую карту, каждый бит которой представляет кластер тома и сообщает, свободен кластер или выделен.
Файл защиты (security file) с именем $Secure хранит базу данных дескрипторов защиты, действующих в пределах тома. Дескрипторы защиты файлов и каталогов NTFS можно настраивать индивидуально, но для экономии места хранит настройки дескрипторов защиты в общем файле, который позволяет файлам и каталогам с одинаковыми параметрами защиты ссылаться на один и тот же дескриптор защиты. Такая оптимизация даст существенную экономию в большинстве сред, потому что в них целые деревья каталогов имеют одинаковые параметры защиты.
Другой системный файл, загрузочный (boot file), с именем $Boot хранит код начальной загрузки Windows 2000. Для успешного запуска системы код начальной загрузки должен находиться на диске в определенном месте. При форматировании команда format определяет это место в виде файла, создавая для него запись в MFT. При этом NTFS следует своим правилам, согласно которым все данные хранятся на диске в виде файлов. Загрузочный файл, как и файлы метаданных NTFS, может быть защищен индивидуальным дескриптором защиты, в такой модели «на диске есть только файлы» код начальной загрузки может быть изменен путем обычного файлового ввода-вывода, хотя загрузочный файл защищен от редактирования.
NTFS поддерживает файл плохих кластеров (bad-cluster file) с именем $BadClus, в котором регистрируются все сбойные участки дискового тома, и файл тома (volume file) с именем $Volume, который содержит имя тома, версию NTFS, под которую отформатирован том, и бит, устанавливае-мый при каком-либо повреждении диска. Если этот бит установлен, диск должен быть восстановлен утилитой Chkdsk. Файл сопоставления имен с буквами в верхнем регистре (uppercase file) с именем $UpCase включает таблицу трансляции букв между верхним и нижним регистрами. NTFS также поддерживает файл, содержащий таблицу определения атрибутов (attribute definition table), с именем $AttrDef; в нем определяютcя типы атрибутов, поддерживаемые томом, и указывается, являются ли они индексируемыми, следует ли их восстанавливать в ходе операции восстановления системы и т. д.
Некоторые файлы метаданных NTFS хранит в каталоге расширенных метаданных $Extend, в том числе помещая туда файл идентификаторов объектов ($ObjId), файл квот ($Quota), файл журнала регистрации изменений ($UsnJrnl) и файл точек повторного разбора ($Reparse). В этих файлах содержится информация, относящаяся к дополнительным возможностям NTFS. Файл идентификаторов объектов хранит идентификаторы объектов «файл», файл квот – значения квот и информацию о поведении томов, на которых используются квоты, файл точек повторного разбора – список файлов и каталогов, включающих данные точек повторного разбора, а в файле журнала изменений регистрируются изменения файлов и каталогов.
Файл на томе NTFS идентифицируется 64-битным значением, которое называется файловой ссылкой (file reference). Файловая ссылка состоит из номера файла и номера последовательности. Номер файла равен позиции его записи в MFT минус 1 (или позиции базовой записи в МFT минус 1, если файл требует несколько записей). Номер последовательности в файловой ссылке увеличивается на 1 при каждом повторном использовании позиции записи в MFT, что позволяет NTFS проверять внутреннюю целостность файловой системы. Файловую ссылку иллюстрирует рисунок.
63 47 0
Записи о файлах.
NTFS рассматривает файл не просто как хранилище текстовых или двоичных данных, а как совокупность пар атрибутов и их значений, одна из которых содержит данные файла (соответствую-щий атрибут называется наименованным атрибутом данных). Другие атрибуты включают имя файла, метку времени и, возможно, дополнительные именованные атрибуты данных. Запись MFT для не-большого файла показана на рисунке.
Главная таблица файлов
Стандартная
информация Имя файла Данные
Каждый атрибут файла хранится в файле как отдельный поток байтов. Строго говоря, NTFS читает и записывает не файлы, а потоки атрибутов. NTFS поддерживает следующие операции над атрибутами: создание, удаление, чтение (как диапазон байтов) и запись (как диапазон байтов). Сервисы чтения и записи обычно имеют дело с неименованным атрибутом данных. Однако вызыва-ющая программа может указать другой атрибут данных, используя синтаксис именованных потоков данных.
В таблице перечислены атрибуты для файлов на томах NTFS (не у каждого файла есть все эти атрибуты).
В таблице даны имена атрибутов, но на самом деле атрибуты соответствуют числовым кодам типов, используемым NTFS для упорядочения атрибутов в записи о файле. Файловые атрибуты в записи MFT размещаются в порядке возрастания числовых значений этих кодов. Некоторые типы атрибутов встречаются в записи дважды – например, если у файла несколько атрибутов данных или несколько имён.
Атрибут
Имя атрибута
Описание
Информация о томе
$VOLUME_
INFORMATION
$VOLUME_NAME
Эти атрибуты имеются только в файле метаданных $Volume. Они хранят версию и метку тома.
Стандартная
информация
$STANDART_
INFORMATION
Атрибуты файла «только для чтения», «архивный» и др., метки времени создания и последней модификации, число каталогов, ссылающихся на данный файл (счетчик жёстких связей).
Имя файла
$FILE_NAME
Имя файла в Unicode-символах. У файла может быть несколько атрибутов имени, например, если существует жёсткая связь с данным файлом или если для его длинного имени автоматически сгенерировано краткое имя, используемое программами MS–DOS и 16-разрядной Windows.
Дескриптор защиты
$SECURE_
DESCRIPTOR
Этот атрибут обеспечивает обратную совместимость с прежними версиями NTFS. Версия NTFS, реализованная в Windows 2000, хранит все дескрипторы защиты в файле метаданных $Secure для совместного использования файлами и каталогами с одинаковыми параметрами защиты. Прежние версии NTFS хранили закрытую информацию о дескрипторе защиты в каждом файле и каталоге.
Данные
$DATA
Содержимое файла. В NTFS файл имеет один неименованный атрибут данных, и, возможно, дополнительные именованные атрибуты данных, то есть в файле может быть несколько потоков данных. В каталоге нет атрибута данных по умолчанию, но могут присутствовать необязательные именованные атрибуты данных.
Корень индекса, выделенная
группа индексов и битовая карта индексов
$INDEX_ROOT,
$INDEX_
ALLOCATION,
$BITMAP
Эти атрибуты используются для выделения места под имена файлов и создания битовой карты индексов для больших каталогов (только каталогов).
Список атрибутов
$ATTRIBUTE_LIST
Список атрибутов, составляющих файл, и файловые ссылки на запись MFT, в которой находятся все атрибуты. Этот редко используемый атрибут присутствует, когда файл требует более одной записи MFT.
Идентификатор объекта
$OBJECT_ID
64-байтовый идентификатор файла или каталога. в котором младшие 16 байт (128 бит) уникальны для тома. Сервисы отслеживания связей назначают идентификаторы объектов ярлыкам оболочки и файлам – источникам OLE-связей. NTFS предоставляет API-функции, позволяющие открывать файлы и каталоги не по именам, а по идентификаторам.
Информация повторного разбора
$REPARSE_POINT
Этот атрибут хранит данные точки повторного разбора, сопоставленной с файлом; присутствует в точках соединения и монтирования.
Расширенные атрибуты
$EA, $EA_
INFORMATION
Расширенные атрибуты, иногда используемые для обратной совместимости с приложениями OS/2.
Информация
EFS
$LOGGED_
UTILITY_STREAM
В этом атрибуте EFS хранит данные, используемые для управления шифрованием файла, например шифрованную версию ключа, необходимого для расшифровки файла, и список пользователей, имеющих право на доступ к этому файлу, Слово logged в имени атрибута означает, что изменения этого атрибута регистрируются в файле журнала тома.
Каждый атрибут в записи о файле идентифицируется кодом типа атрибута, имеет значение и необязательное имя. Значение атрибута представляет собой байтовый поток. Так, значением атрибута $FILE_NAME является имя файла, значением атрибута $DATA – произвольный набор байтов, сохранённых пользователем в файле.
У большинства атрибутов нет имени, хотя у $DATA и атрибутов, связанных с индексом, они обычно есть. Имена позволяют различать атрибуты файла, относящиеся к одному типу. Например, в файле с именованным потоком данных есть два атрибута $DATA: неименованный атрибут $DATA, хранящий неименованный по умолчанию поток данных, и именованный атрибут $DATA с именем дополнительного потока данных.