Файловая система NTFS.
Файловая система NTFS.
Файловая система NTFS является сложной файловой системой, разработанной независимо от системы FAT. Она является, на мой взгляд одной из самых совершенных файловых систем, по этой причине я постараюсь изложить ее структуру достаточно подробно. Как и файловой системе FAT файлы в NTFS записываются в виде последовательности кластеров. Кластеры в файловой системе NTFS могут принимать размеры от 512 байт до 64 Кб. Стандартным значением длины кластера является размер 4 Кб. Главной структурой NTFS является файл MFT (Master File Table – главная файловая таблица). Надо сказать, что в NTFS нет вообще ничего, кроме файлов – это общая концепция. Имя файла ограничивается 255 символами, а максимальная длина пути не может превышать 32767 символов. Рассмотрим Рис. 1, где изображена общая схема размещения файловой системы NTFS на томе.
Рис. 1. Общая структура тома с NTFS. Для главного файла операционной системы NTFS MFT отводится область в начале раздела (в загрузочной записи раздела при установке помещается номер первого кластера файла MFT), но поскольку это тоже файл, в принципе он может располагаться где угодно. Для того чтобы не фрагментировать этот файл (хотя он может быть и фрагментирован), для него заранее отводится объем дискового пространства, составляющий 12% от общего объема раздела. При необходимости операционная система может увеличить или уменьшить эту область, а потом вернуть ее в исходное состояние. По своему смыслу она не является системной областью, поэтому включается в общий объем свободного пространства. Файл MFT содержит записи о каждом файле системы. Размер записи файла составляет 1 Кб. Если при описании файла одной записи не хватает, то используются другие записи. Первые 16 файлов, записи о которых располагаются в начале MFT, являются системными. Принято, что имена этих файлов начинаются с символа ‘$’. Ниже в таблице 1 мы представляем информацию об этих файлах. Обратите внимание, в первой (с номером 0) записи файла MFT располагается информация о нем самом. Согласитесь, что красивое решение, создающее определенный избыток информации, позволяющий в определенной ситуации восстановить файловую систему.
Таблица 1. Список метафайлов файловой системы NTFS.
В таблице 2 перечислены атрибуты. Таблица 2.. Атрибуты записей MFT.
И так, файл в NTFS есть ни что иное, как набор атрибутов. Атрибут представляется в виде потока байт. Как видим, один из атрибутов это данные, хранящиеся в файле или, как говорят поток данных. Файловая система допускает добавление файлу новых атрибутов, которые могут содержать какие-то дополнительные данные. В файловой системе NTFS применено множеств интересных технологических решений. Об одной технологии я уже упомянул: не большой файл целиком помещается в записи файла MFT. Еще один подход предполагает, что операционная система при записи файла старается осуществить операцию таким образом, чтобы было как можно больше цепочек кластеров (участков, где кластеры на диске следуют друг за другом). Группы кластеров файла описываются специальными структурами - записями, помещаемыми внутри записи MFT. Так файл, состоящий всего из одной цепочки кластеров, описывается всего одной такой записью. То же можно сказать о файле, состоящем из не большого числа цепочек. В записи цепочки кластеров описываются парой из двух значений: смещение кластера от начала и количество кластеров. В заголовке записи указывается смещение первого кластера от начала файла и смещение первого кластера, выходящего за рамки, описываемые данной записью.
Рис. 2. Пример записи информации о расположении файла, состоящего всего из девяти кластеров.
На Рис. 2 мы схематично изобразили запись MFT для файла, состоящего всего из 9 кластеров. После заголовка записи, в которой указываются смещения первого кластера в файле и кластера, не охватываемого данной записью, идут две пары чисел, в которых указываются последовательности непрерывно идущих кластеров. Первым элементом пары является смещение кластера от начала дискового пространства и количество кластеров в цепочке. Такие пары называют еще сериями. Как видим, в нашем случае файл состоит из двух непрерывных цепочек и задается двумя сериями. Заметим в этой связи, что числовые значения, определяющие количество кластеров и смещение кластера являются в операционной системе NTFS 64-битными. Что будет, если файл фрагментирован так, что все его цепочки нельзя описать в одной записи файла MFT? В этом случае используются несколько записей MFT. Причем они не обязаны иметь номера отличающиеся друг от друга на 1. Чтобы связать их друг с другом используется так называемая базовая запись. В первой записи MFT, описывающей данный файл, она (базовая запись) идет перед записью с описанием кластерных цепочек. Она также имеет заголовок, после которого перечислены номера записей MFT, в которых содержится информация о размещении данных файла на диске. Все остальные записи MFT имеют ту же структуру, которая изображена на Рис. 2. Может возникнуть вопрос: а что если базовая запись не сможет поместиться в одой записи MFT? В этом случае ее помещают в отдельный файл, т.е. в терминологии NTFS делают не резидентной. Рассмотрим еще некоторые особенности файловой системы NTFS. Каталоги в NTFS. Каталог в системе NTFS представляет собой специфический файл, хранящий ссылки на другие файлы и каталоги, создавая иерархическое строения файловой системы диска. Как и в случае с обычным файлом, если каталог не слишком велик, то он помещается в записи MFT. На Рис. 3 схематически показана запись MFT содержащая не большой каталог. Обратим внимание, что в информационном атрибуте содержится информация о корневом каталоге. Сами записи каталога содержат длину имени файла, некоторые другие его параметры, а самое главное содержат номер (индекс) записи MFT для данного файла, в которой содержится уже полная информация о файле. Для больших каталогов используется совсем другой формат хранения. Они строятся в виде бинарных деревьев, что обеспечивает быстрый поиск в алфавитном порядке и ускоряет добавление нового файла.
Рис. 3. Не большой каталог полностью помещается в записи MFT.
Сжатие файлов в NTFS. Система NTFS позволяет хранить файлы в сжатом виде. Механизм также весьма интересен и о нем следует сказать несколько слов. Сжатие осуществляется блоками, состоящими из 16 кластеров. При записи операционная система пытается сжать в начале первые 16 кластеров, затем следующие и т.д. Если сжать не удалось, то блок записывается как есть. Предположим, что сжимается блок из 16 кластеров. Пусть смещение первого кластера будет 50. Предположим, что сжать удалось на 25%, т.е. из 16 кластеров фактически осталось только 12. Для простоты предположим, что кластеры располагаются друг за другом, т.е. представляют цепочку. Сжатая цепочка кластеров в записи MFT будет представлена не одной парой чисел (50,16), а двумя парами (50,12) и (0,4). Вторая пара необходима, чтобы при чтении файла операционная система могла опознать, какая из цепочек была сжата. Механизм хранения сжатых файлов, как видите, весьма прост и встроен в саму файловую систему. Стандартным способом получения типа файловой системы в данном разделе является использование функции GetVolumeInformation. Мы не будем рассматривать эту функцию, заметим только, что седьмым парметром (из восьми) как раз и является буфер, куда после вызова функции и будет помещен тип файловой системы. Точки повторной обработки. Точка повторной обработки позволяют наращивать функциональность NTFS. Точки повторной обработки появились в версии файловой системе NTFS, предназначенной для операционной системы Windows 2000. Было предусмотрено несколько типов таких точек, в том числе: точки монтирования томов, подсоединения каталогов NTFS, управление иерархическими хранилищами данных (HSM - Hierarchical Storage Management). · Точки монтирования томов позволяют привязать том к каталогу не присваивая символьного обозначения этому тому. Можно таким образом под одной буквой объединить несколько томов. Например, если точка монтирования C:\TEMP и к ней подсоединен том D:, то все каталоги этого тома будут доступны через точку монтирования: C:\TEMP\ARH, C:\TEMP\PROGRAM и т.п. При попытке обращения, например к файлу C:\TEMP\PROGRAM\FC.EXE система обнаруживает точку монтирования для каталога TEMP связанную с томом D: и далее обращается уже к этому тому к каталогу PROGRAM. · Точки подсоединения каталогов очень похожи на точки повторного монтирования. Однако с помощью этого механизма подсоединяются не тома, а каталоги. В предыдущем примере можно подсоединить к каталогу TEMP каталог PROGRAM и аналогичным образом обратиться к файлу FC.EXE: C:\TEMP\PROGRAM\FC.EXE. · В системе HSM точки повторной обработки служат для миграции редко используемых файлов в резервное хранилище данных. При этом содержимое файла удаляется, а на его место помещается точка повторной обработки. В данных точки повторной обработки содержится информация, используемая системой HSM для поиска файла на архивном устройстве. При обращении к файлу система по точке повторной обработки определяет, что файл находиться в хранилище (и в каком). Запускается механизм перенесения файла из хранилища. После перемещения точка повторной обработки удаляется, а запрос к файлу автоматически повторяется. Если точка повторной обработки связана с файлом или каталогом, то NTFS создает для нее атрибут с именем $Reparse. В этом атрибуте хранятся код и данные точки повторной обработки. Поэтому NTFS без труда обнаруживает все точки повторной обработки на томе.
|