Целью файловой системы NTFS является следующее

ФАЙЛОВАЯ СИСТЕМА

 

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

В традиционной многоуровневой системе построения операционных систем с устройствами (дисками) непосредственно взаимодействует часть ОС, называемая системой ввода-вывода, основу которой составляют драйверы устройств. Задача системы ввода-вывода: скрыть особенности работы с дисками и предоставить в распоряжение более высокоуровневого компонента ОС - файловой системы - используемое дисковое пространство в виде непрерывной последовательности блоков фиксированного размера. Файловая система располагается соответственно между системой ввода-вывода и прикладной программой. В ОС Windows файловая система интегрирована в систему ввода-вывода, построенную в виде набора разнообразных драйверов, и также реализована в виде драйвера, например, драйвера NTFS или драйвера FAT (Рис. 1.).

 

Рис. 1.

 



Файловая система NTFS

Сегодня файловая система NTFS (New Technology File System – файловая система новой технологии) используется на большом количестве самых различных компьютеров в мире. Так, файловая система NTFS сейчас является одной из лучших файловых систем в мире. Достаточно сказать, что практически на всех компьютерах Microsoft семейства Windows NT установлена одна из лучших и наиболее сложных на сегодняшний день файловых систем – NTFS.

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

Файловая система NTFS является реляционной базой данных, которая весьма сложна по своему архитектурному строению.

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

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

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

Файловая система NTFS представляет собой выдающееся достижение структуризации: каждый элемент системы представляет собой файл - даже служебная информация. Самый главный файл на NTFS называется MFT, или Master File Table - главная таблица файлов. Именно он размещается в MFT зоне и представляет собой обычный файл, содержащий до 248 записей размером 1 Кб каждая. MFT – это централизованный каталог всех остальных файлов диска, своеобразная база данных, хранящая информацию обо всех файлах тома - их именах, атрибутах, способе и порядке размещения на диске (каталог также является файлом особого типа со списком принадлежащих ему файлов и подкаталогов внутри). Важно подчеркнуть, что в MFT присутствуют все файлы, находящиеся во всех подкаталогах тома, поэтому для восстановления диска наличия $MTF-файла будет вполне достаточно..

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

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

На слайде показана упрощенная структура MFT

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

Третья запись MFT - файл регистрации (109 file); используется для восстановления файлов.

Записи с 12 по 15 помечены как используемые, но в действительности же они пусты (как нетрудно догадаться, это задел на будущее).

Записи с 16 по 23 не задействованы и честно помечены как неиспользуемые.

Записи, начиная с 16-й, предназначены для файлов пользователей. (По другим источникам - начиная с 24-й записи, располагаются пользовательские файлы и каталоги.) Каждая запись MFT описывает один файл или один каталог. В ней содержатся атрибуты файла, такие как его имя и временные штампы, а также список дисковых адресов, указывающих на расположение блоков (кластеров) файла. Для больших файлов требуется несколько записей, первая из которых называется базовой  и указывает на другие записи MFT. Таблица MFT может располагаться в любом месте диска.

Часть файла, размещаемая в записи MFT целиком, называется резидентной частью, а остальные части – нерезидентными. Адресная информация об отрезках, содержащих нерезидентные части файла, размещается в атрибутах резидентной части.

Чаще данные файла все же не помещаются в записи MFT. Рассмотрим данный вариант несколько подробнее. В этом случае вслед за заголовком в записи размещается список дисковых блоков файла (Рис. 4).


Рис. 4.  Запись MFT для 10-блочного файла, состоящего из четырех фрагментов (серий)

Рассмотрим, как решается задача приведения в соответствие номера блока в файле (LCN) номеру блока на диске (VCN). Для этого блоки диска представляются в виде совокупности серий, каждая из которых является непрерывной последовательностью блоков. Например, на Рис. 5 показано отображение 10-блочного файла, блоки которого размещаются в 9, 10, 25, 26, 27, 63, 85, 86, 87 и 88-м блоках диска.

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

 




Метафайлы

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

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

Таблица 1

Номер записи Системный файл Имя файла Назначение файла
0 Главная таблица файлов $MFT Сам MFT / Содержит полный список файлов тома
1 Копия главной таблицы файлов $MFTМirr Копия первых 3 записей MFT, размещенная посередине диска 
2 Файл журнала $LogFile Файл поддержки журналирования / список транзакций, который используется для восстановления файловой системы после сбоев
3 Том $Volume Служебная информация - метка тома, версия файловой системы и другая информация о томе
4 Таблица определения атрибутов $AttrDef Список стандартных атрибутов файлов на томе / Таблица имен, номеров и описаний атрибутов
5 Индекс корневого каталога $. Корневой каталог
6 Битовая карта кластеров $Bitmap Карта свободного места тома / Разметка использованных кластеров тома
7 Загрузочный сектор раздела $Boot Загрузочный сектор (если раздел загрузочный) / Адрес загрузочного сектора раздела
8 Файл дефектных кластеров $BadClus Файл, содержащий список всех обнаруженных на томе плохих кластеров
9 Таблица квот (описатели защиты для файлов) $Quota Файл, в котором записаны права пользователей на использование дискового пространства (начал работать лишь в NT5) / Квоты используемого пространства на диске для каждого пользователя
10 Таблица преобразования регистра символов $Upcase файл – таблица соответствия заглавных и прописных букв имен файлов на текущем томе. Нужен, в основном, потому, что в NTFS имена файлов записываются в Unicode, что составляет 65 тысяч различных символов, искать большие и малые эквиваленты которых очень нетривиально.
11-15 Зарезервированы для будущего использования    
16 Первый файл пользователя    


Кластеры

Обычно диски разбиты на блоки (секторы) размером - 512 б. Однако удобнее оперировать блоками более крупного размера - кластерами (cluster). Размер кластера равен размеру сектора, умноженному на кластерный множитель (claster factor), и может быть установлен во время операции форматирования диска. По умолчанию это значение равно 4 Кб и может быть изменено. Альтернативные значения размера кластера можно, например, извлечь из справочной информации команды format.

NTFS поддерживает размеры 512, 1024, 2048, 4096, 8192, 16КБ, 32КБ, 64K. FAT поддерживает размеры 512, 1024, 2048, 4096, 8192, 16КБ, 32КБ, 64КБ, (128КБ, 256КБ для размера сектора > 512 Байт).

Размер кластера, которые в дальнейшем также будут называться блоками диска, играет немаловажную роль. Небольшой размер блока будет приводить к тому, что каждый файл будет содержать много блоков и читаться медленно. Большие блоки обеспечивают более высокую скорость обмена с диском, но из-за внутренней фрагментации (каждый файл занимает целое число блоков, и в среднем половина последнего блока пропадает) снижается процент полезного дискового пространства. Специально проведенные исследования показали, что оптимальным является компромиссный размер блока, лежащий в диапазоне от 1-го до 8 Кб.

Весь том NTFS состоит из последовательности кластеров, что отличает эту файловую систему от FAT16, FAT 32, где на кластеры делилась только область данных. Порядковый номер кластера в томе NTFS называется логическим номером кластера (Logical Cluster Number, LCN). Файл NTFS также состоит из последовательности кластеров, при этом порядковый номер кластера внутри файла называется виртуальным номером кластера (Virtual Cluster Number, VCN).

Система различает кластеры диска (volume claster) и кластеры диска, принадлежащие файлу (logical claster). Для них поддерживается разная нумерация, соответственно VCN и LCN.

Базовая единица распределения дискового пространства для файловой системы NTFS - непрерывная область кластеров, называемая серией или отрезком. В качестве адреса серии NTFS использует логический номер его первого кластера, а также количество кластеров в серии k, то есть пара (LCN, k). Таким образом, часть файла, помещенная в серию и начинающаяся с виртуального кластера VCN, характеризуется адресом, состоящим из трёх чисел: (VCN, LCN, k).

Структура тома NTFS показана на Рис. 5. Загрузочный блок тома NTFS располагается в начале тома, а его копия – в середине тома. Загрузочный блок содержит стандартный блок параметров BIOS, количество блоков в томе, а также начальный логический номер кластера основной копии MFT зеркальную копию MFT.

 

Загрузочный сектор
0
1
2
3
15
Системный файл 1
Системный файл 2
Системный файл n
Копия MFT (первые три записи)
Файл N – 1
Копия загрузочного файла
MFT
Файл M
MFT
 

Рис. 5. Структура тома NTFS.

Далее располагается первый отрезок MFT, содержащий 16 стандартных, создаваемых при форматировании записей о системных файлах NTFS. Назначение этих файлов описано в таблице 1.



Устранение ограничений

В NTFS значительно – до 2^64 байт (16 экзабайт или 18 446 744 073 709 551 616 байт) – увеличен допустимый раздел файлов и томов. В NTFS для решения проблемы фиксированного размера сектора снова применена концепция кластеров, ранее использованная в файловой системе FAT. Это было сделано для улучшения аппаратной независимости операционной системы Windows NT при ее использовании с жесткими дисками, изготовленными по другой технологии. Размер кластера определяется кратным числом единичных блоков жесткого диска. Кроме того, для задания имен файлов используется кодировка Юникод и наряду с длинными именами обеспечена поддержка формата 8.3.

NTFS лучше всего подходит для использования с томами размером более 400 МБ. С увеличением размера тома производительность файловой системы NTFS не падает, как у FAT.

Благодаря способности к восстановлению в NTFS отсутствует необходимость использования каких-либо программ восстановления диска.

Файл в системе NTFS

Файл в системе NTFS – это не просто линейная последовательность байтов, как файлы в системах FAT32 и UNIX. Вместо этого файл состоит из множества атрибутов, каждый из которых представляется в виде потока байтов.

Итак, у системы есть файлы - и ничего кроме файлов. Что включает в себя это понятие на NTFS?

  • Прежде всего, обязательный элемент - запись в MFT. В этом месте хранится вся информация о файле, за исключением собственно данных: имя файла, размер, положение на диске отдельных фрагментов, и т.д. Если для информации не хватает одной записи MFT, то используются несколько, причем не обязательно подряд.
  • Опциональный элемент - потоки данных файла. Может показаться странным определение "опциональный", но, тем не менее, ничего странного тут нет. Во-первых, файл может не иметь данных - в таком случае на него не расходуется свободное место самого диска. Во-вторых, файл может иметь не очень большой размер. Тогда идет в ход довольно удачное решение: данные файла хранятся прямо в MFT, в оставшемся от основных данных месте в пределах одной записи MFT. Файлы, занимающие сотни байт, обычно не имеют своего "физического" воплощения в основной файловой области - все данные такого файла хранятся в одном месте - в MFT.
  • Довольно интересно обстоит дело и с данными файла. Каждый файл на NTFS, в общем-то, имеет несколько абстрактное строение - у него нет как таковых данных, а есть потоки (streams). Один из потоков и носит привычный нам смысл - данные файла. Но большинство атрибутов файла - тоже потоки!

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

Данная абстракция может использоваться для создания довольно удобных вещей - например, файлу можно "прилепить" еще один поток, записав в него любые данные - например, информацию об авторе и содержании файла, как это сделано в Windows 2000 (самая правая закладка в свойствах файла, просматриваемых из проводника). Интересно, что эти дополнительные потоки не видны стандартными средствами: наблюдаемый размер файла - это лишь размер основного потока, который содержит традиционные данные. Можно, к примеру, иметь файл нулевой длинны, при стирании которого освободится 1 Гбайт свободного места - просто потому, что какая-нибудь хитрая программа или технология прилепила в нему дополнительный поток (альтернативные данные) гигабайтового размера.

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

Максимальная длина потока составляет 264 байт. Чтобы получить представление о том, насколько велик поток в 264 байт, представьте, что поток записан в двоичном виде, где каждый символ 0 и 1 занимает 1 мм. В этом случае листинг длиной 264 мм займет 15 световых лет. Для отслеживания местонахождения процесса в каждом потоке используется 64-разрядные файловые указатели. Максимальный размер потока составляет около 18,4 экзабайт (264 байт составит 16 Эбайт ровно или 18 446 744 073 709 551 616 байт).

 

Обратимся теперь к записи файла MFT:

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

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

· За заголовком записи располагается заголовок первого атрибута, а далее значение этого атрибута.

· Затем идет заголовок второго атрибута и т.д.

Если атрибут достаточно велик, то он помещается в отдельном файле (нерезидентный атрибут). Интересно, что если данных в файле не много, то они наоборот хранятся в записи файла MFT. В таблице 2 перечислены атрибуты.

Таблица 2.. Атрибуты, используемые в записях MFT.

Атрибут Описание
Стандартная информация (информационный атрибут) Сведения о владельце, информация о защите, счетчик жестких связей, битовые атрибуты (только для чтения, архивный и т.д.).
Имя файла Имя файла в кодировке Unicode.
Описатель защиты Теперь этот атрибут устарел. Теперь используется атрибут $EXTENDEDSECURE.
Список атрибутов Расположение дополнительных записей MFT. Используется, если атрибуты не помещаются в записи.
Идентификатор объекта 64-разрядный идентификатор файла, уникальный для данного тома.
Точка повторной обработки Используется для создания иерархических хранилищ. Наличие этого атрибута предлагает процедуре, анализирующей имя файла выполнить дополнительные действия.
Название тома Используется в $VOLUME.
Информация о томе Версия тома (используется в $VOLUME).
Корневой индекс Используется для каталогов.
Размещение индекса Для очень больших каталогов, которые реализуются не в виде обычных списков, а в виде бинарных деревьев (B-дерев).
Битовый массив Используется для очень больших каталогов.
Поток данных утилиты регистрации Управляет регистрацией в файле $LOGFILE.
Данные Поток данных файла. Следом за заголовком этого атрибута следует список кластеров, где располагаются данные, либо сами данные, если их объем не превышает несколько сот байтов.

И так, файл в NTFS есть не что иное, как набор атрибутов. Атрибут представляется в виде потока байт. Как видим, один из атрибутов это данные, хранящиеся в файле или, как говорят поток данных. Файловая система допускает добавление файлу новых атрибутов, которые могут содержать какие-то дополнительные данные.

Номера дисковых кластеров файлов можно узнать при помощи утилиты nfi.exe (NTFS File Sectors Information Util), входящей в состав ресурсов Windows.

В файловой системе NTFS применено множеств интересных технологических решений.

- небольшой файл целиком помещается в записи файла MFT.

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

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

Номера блоков
20-24 70-73
Блоки диска

 

Рис. 6. Пример записи информации о расположении файла, состоящего всего из девяти кластеров.

 

На Рис. 6 мы схематично изображена запись MFT для файла, состоящего всего из 9 кластеров. После заголовка записи, в которой указываются смещения первого кластера в файле и кластера, не охватываемого данной записью, идут две пары чисел, в которых указываются последовательности непрерывно идущих кластеров. Такие пары называют еще сериями. Как видим, в нашем случае файл состоит из двух непрерывных цепочек и задается двумя сериями. Первая серия блоков располагается в блоках диска с 20 по 24, вторая – с 70 по 73. Каждая серия записывается в записи MFT в виде пары (дисковый адрес, количество блоков). Число таких серий зависит от того, насколько удачно процедура предоставления дискового пространства сумела найти место для хранения файла при его создании. Заметим в этой связи, что числовые значения, определяющие количество кластеров и смещение кластера являются в операционной системе NTFS 64-битными.

Что будет, если файл фрагментирован так, что все его цепочки нельзя описать в одной записи файла MFT? В этом случае используются несколько записей MFT. Причем они не обязаны иметь номера отличающиеся друг от друга на 1. Чтобы связать их друг с другом используется так называемая базовая запись. В первой записи MFT, описывающей данный файл, она (базовая запись) идет перед записью с описанием кластерных цепочек. Она также имеет заголовок, после которого перечислены номера записей MFT, в которых содержится информация о размещении данных файла на диске. Все остальные записи MFT имеют ту же структуру, которая изображена на Рис. 6. Может возникнуть вопрос: а что если базовая запись не сможет поместиться в одой записи MFT? В этом случае ее помещают в отдельный файл, т.е. в терминологии NTFS делают не резидентной.

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

Подобный подход обеспечивает очень быстрый доступ к файлам.

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

 


Каталоги в NTFS

Директория или каталог - это файл, имеющий вид таблицы и хранящий ссылки входящих в него файлов или каталогов. Основная задача файлов-директорий - поддержка иерархической древовидной структуры файловой системы. Файл каталога поделен на блоки, каждый из которых содержит имя файла, базовые атрибуты и ссылку на элемент MFT, который уже предоставляет полную информацию об элементе каталога.

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

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

Рис. 7. MFT запись для небольшого каталога

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

Рис. 8. Небольшой каталог полностью помещается в записи MFT.

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

Внутренняя структура каталога представляет собой бинарное дерево. Вот что это означает: для поиска файла с данным именем в линейном каталоге, таком, например, как у FAT-а, операционной системе приходится просматривать все элементы каталога, пока она не найдет нужный. Бинарное же дерево располагает имена файлов таким образом, чтобы поиск файла осуществлялся более быстрым способом - с помощью получения двухзначных ответов на вопросы о положении файла. Вопрос, на который бинарное дерево способно дать ответ, таков: в какой группе, относительно данного элемента, находится искомое имя - выше или ниже? Мы начинаем с такого вопроса к среднему элементу, и каждый ответ сужает зону поиска в среднем в два раза. Файлы, скажем, просто отсортированы по алфавиту, и ответ на вопрос осуществляется очевидным способом - сравнением начальных букв. Область поиска, суженная в два раза, начинает исследоваться аналогичным образом, начиная опять же со среднего элемента (Рис. 9).

Рис. 9. Поиск файла в каталоге.

Поиск файла по имени

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

При поиске файла вначале при помощи механизма символьных ссылок в пространстве имен объектов решается задача трансляции имени диска "в стиле DOS" или буквы диска во внутренние имена устройств Windows. Для этого библиотечный вызов, содержащий имя файла в качестве параметра, передается библиотеке kernel32.dll и перед именем помещается название каталога именованных ресурсов "\??\" в пространстве имен менеджера объектов. В результате "F:\tmp\MyFile.txt" преобразуется в "\??\F:\tmp\MyFile.txt". Далее в каталоге \??\ ищется символьное имя "F:", которое является ссылкой на объект-раздел жесткого диска, например, "\Device\Harddisk\Volume5". Далее находится таблица MFT этого раздела, затем осуществляется навигация по каталогам и отыскивается искомый файл (Рис. 10).

Рис. 10. Процесс поиска файла по имени

Для поиска файлов в каталоге применяются функции FindFirstFile и FindNextFile.



Совместный доступ к файлу

Пользователи часто нуждаются в разделении файлов и совместном доступе к ним.

Операция открытия файла имеет следствием создание объекта "открытый файл". Специфика объекта "открытый файл" состоит в том, что он содержит лишь уникальные данные (например, указатель текущей позиции), тогда как собственно файл - совместно используемые данные. Поэтому, если два раза осуществить операцию открытия одного и того же файла, то система создаст два объекта "файл". Данная ситуация проиллюстрирована Рис.11 для случая одновременного открытия файла потоками разных процессов.


Рис. 11. Организация совместного доступа к файлу

Очевидно, что потоки должны синхронизировать доступ к совместно используемым файлам или каталогам, чтобы получить предсказуемый результат. Между двумя операциями read одного потока другой поток может модифицировать данные, что для многих приложений неприемлемо. ОС Windows предлагает стандартное решение данной проблемы на уровне пользователя - предоставить возможность одному из потоков захватить часть файла между двумя записями для монопольного доступа. Для этого используются Win32-функции LockFile и UnlockFile.




Hадежность файловой системы

Поскольку разрушение файловой системы зачастую более опасно, чем разрушение компьютера, файловые системы должны разрабатываться с учетом подобной возможности. Сохранность информации может быть обеспечена за счет ее избыточности (резервное копирование, зеркалирование, образование RAID массивов). Файловые системы современных ОС содержат специальные средства для поддержки собственной целостности и непротиворечивости.

ФАЙЛОВАЯ СИСТЕМА

 

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

В традиционной многоуровневой системе построения операционных систем с устройствами (дисками) непосредственно взаимодействует часть ОС, называемая системой ввода-вывода, основу которой составляют драйверы устройств. Задача системы ввода-вывода: скрыть особенности работы с дисками и предоставить в распоряжение более высокоуровневого компонента ОС - файловой системы - используемое дисковое пространство в виде непрерывной последовательности блоков фиксированного размера. Файловая система располагается соответственно между системой ввода-вывода и прикладной программой. В ОС Windows файловая система интегрирована в систему ввода-вывода, построенную в виде набора разнообразных драйверов, и также реализована в виде драйвера, например, драйвера NTFS или драйвера FAT (Рис. 1.).

 

Рис. 1.

 



Файловая система NTFS

Сегодня файловая система NTFS (New Technology File System – файловая система новой технологии) используется на большом количестве самых различных компьютеров в мире. Так, файловая система NTFS сейчас является одной из лучших файловых систем в мире. Достаточно сказать, что практически на всех компьютерах Microsoft семейства Windows NT установлена одна из лучших и наиболее сложных на сегодняшний день файловых систем – NTFS.

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

Файловая система NTFS является реляционной базой данных, которая весьма сложна по своему архитектурному строению.

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

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

Целью файловой системы NTFS является следующее.

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

· Предоставление платформы дополнительной функциональности.

· Поддержка требований POSIX.

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

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

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

NTFS также включает возможности безопасности, требуемые для файловых серверов и высококачественных персональных компьютеров в корпоративной среде. NTFS поддерживает управление доступом к данным и привилегии владельца, что является важным для целостности корпоративных данных. В то время как каталогам, разделяемым при помощи Windows NT Seгver, назначаются специфические разрешения, файлам и каталогам NTFS могут назначаться разрешения вне зависимости, разделены они или нет. NTFS - единственная файловая система в Windows NT, которая позволяет назначить разрешения для отдельных файлов.

 

Главным и ведущим структурным разделом в данной программе является том, который совпадает с разделом. Данная файловая система поддерживает тома, которые состоят из нескольких разделов (Рис. 2).

 

Рис. 2. Обычный (слева) и разряженный (справа) тома.

 

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

Как и любая другая система, NTFS делит все полезное место на кластеры - блоки данных, используемые единовременно. NTFS поддерживает почти любые размеры кластеров - от 512 байт до 64 Кбайт, неким стандартом же считается кластер размером 4 Кбайт.

Диск NTFS условно делится на две части (Рис. 3). Первые 12,5% от ёмкости диска отводятся под так называемую MFT зону - пространство, в которое растет метафайл MFT по мере создания новых пользовательских файлов/подкаталогов. Таким образом, чем больше файлов содержаться на дисковом томе, тем больше размер MTF. Запись каких-либо данных в эту область невозможна. MFT-зона всегда держится пустой - это делается для того, чтобы самый главный, служебный файл (MFT) не фрагментировался при своем росте. Остальные 88% диска представляют собой обычное пространство для хранения файлов.

Рис. 3. Cтруктура дискового тома под NTFS.

 

Когда $MFT-файл достигает границ MFT-зоны, в ходе своего последующего роста он неизбежно фрагментируется, вызывая обвальное падение производительности файловой системы, причем подавляющее большинство дефрагментаторов $MFT-файл не обрабатывают! Но, как бы там ни было, заполнять дисковый том более чем на 88% его емкости категорически не рекомендуется!

 

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


Главная файловая таблица MFT


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

Файловая система NTFS представляет собой выдающееся достижение структуризации: каждый элемент системы представляет собой файл - даже служебная информация. Самый главный файл на NTFS называется MFT, или Master File Table - главная таблица файлов. Именно он размещается в MFT зоне и представляет собой обычный файл, содержащий до 248 записей размером 1 Кб каждая. MFT – это централизованный каталог всех остальных файлов диска, своеобразная база данных, хранящая информацию обо всех файлах тома - их именах, атрибутах, способе и порядке размещения на диске (каталог также является файлом особого типа со списком принадлежащих ему файлов и подкаталогов внутри). Важно подчеркнуть, что в MFT присутствуют все файлы, находящиеся во всех подкаталогах тома, поэтому для восстановления диска наличия $MTF-файла будет вполне достаточно..

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

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

На слайде показана упрощенная структура MFT

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

Третья запись MFT - файл регистрации (109 file); используется для восстановления файлов.

Записи с 12 по 15 помечены как используемые, но в действительности же они пусты (как нетрудно догадаться, это задел на будущее).

Записи с 16 по 23 не задействованы и честно помечены как неиспользуемые.

Записи, начиная с 16-й, предназначены для файлов пользователей. (По другим источникам - начиная с 24-й записи, располагаются пользовательские файлы и каталоги.) Каждая запись MFT описывает один файл или один каталог. В ней содержатся атрибуты файла, такие как его имя и временные штампы, а также список дисковых адресов, указывающих на расположение блоков (кластеров) файла. Для больших файлов требуется несколько записей, первая из которых называется базовой  и указывает на другие записи MFT. Таблица MFT может располагаться в любом месте диска.

Часть файла, размещаемая в записи MFT целиком, называется резидентной частью, а остальные части – нерезидентными. Адресная информация об отрезках, содержащих нерезидентные части файла, размещается в атрибутах резидентной части.

Чаще данные файла все же не помещаются в записи MFT. Рассмотрим данный вариант несколько подробнее. В этом случае вслед за заголовком в записи размещается список дисковых блоков файла (Рис. 4).


Рис. 4.  Запись MFT для 10-блочного файла, состоящего из четырех фрагментов (серий)

Рассмотрим, как решается задача приведения в соответствие номера блока в файле (LCN) номеру блока на диске (VCN). Для этого блоки диска представляются в виде совокупности серий, каждая из которых является непрерывной последовательностью блоков. Например, на Рис. 5 показано отображение 10-блочного файла, блоки которого размещаются в 9, 10, 25, 26, 27, 63, 85, 86, 87 и 88-м блоках диска.

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

 




Метафайлы

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

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

Таблица 1

Номер записи Системный файл Имя файла Назначение файла
0 Главная таблица файлов $MFT Сам MFT / Содержит полный список файлов тома
1 Копия главной таблицы файлов $MFTМirr Копия первых 3 записей MFT, размещенная посередине диска 
2 Файл журнала $LogFile Файл поддержки журналирования / список транзакций, который используется для восстановления файловой системы после сбоев
3 Том $Volume Служебная информация - метка тома, версия файловой системы и другая информация о томе
4 Таблица определения атрибутов $AttrDef Список стандартных атрибутов файлов на томе / Таблица имен, номеров и описаний атрибутов
5 Индекс корневого каталога $. Корневой каталог
6 Битовая карта кластеров $Bitmap Карта свободного места тома / Разметка использованных кластеров тома
7 Загрузочный сектор раздела $Boot Загрузочный сектор (если раздел загрузочный) / Адрес загрузочного сектора раздела
8 Файл дефектных кластеров $BadClus Файл, содержащий список всех обнаруженных на томе плохих кластеров
9 Таблица квот (описатели защиты для файлов) $Quota Файл, в котором записаны права пользователей на использование дискового пространства (начал работать лишь в NT5) / Квоты используемого пространства на диске для каждого пользователя
10 Таблица преобразования регистра символов $Upcase файл – таблица соответствия заглавных и прописных букв имен файлов на текущем томе. Нужен, в основном, потому, что в NTFS имена файлов записываются в Unicode, что составляет 65 тысяч различных символов, искать большие и малые эквиваленты которых очень нетривиально.
11-15 Зарезервированы для будущего использования    
16 Первый файл пользователя    


Кластеры

Обычно диски разбиты на блоки (секторы) размером - 512 б. Однако удобнее оперировать блоками более крупного размера - кластерами (cluster). Размер кластера равен размеру сектора, умноженному на кластерный множитель (claster factor), и может быть установлен во время операции форматирования диска. По умолчанию это значение равно 4 Кб и может быть изменено. Альтернативные значения размера кластера можно, например, извлечь из справочной информации команды format.

NTFS поддерживает размеры 512, 1024, 2048, 4096, 8192, 16КБ, 32КБ, 64K. FAT поддерживает размеры 512, 1024, 2048, 4096, 8192, 16КБ, 32КБ, 64КБ, (128КБ, 256КБ для размера сектора > 512 Байт).

Размер кластера, которые в дальнейшем также будут называться блоками диска, играет немаловажную роль. Небольшой размер блока будет приводить к тому, что каждый файл будет содержать много блоков и читаться медленно. Большие блоки обеспечивают более высокую скорость обмена с диском, но из-за внутренней фрагментации (каждый файл занимает целое число блоков, и в среднем половина последнего блока пропадает) снижается процент полезного дискового пространства. Специально проведенные исследования показали, что оптимальным является компромиссный размер блока, лежащий в диапазоне от 1-го до 8 Кб.

Весь том NTFS состоит из последовательности кластеров, что отличает эту файловую систему от FAT16, FAT 32, где на кластеры делилась только область данных. Порядковый номер кластера в томе NTFS называется логическим номером кластера (Logical Cluster Number, LCN). Файл NTFS также состоит из последовательности кластеров, при этом порядковый номер кластера внутри файла называется виртуальным номером кластера (Virtual Cluster Number, VCN).

Система различает кластеры диска (volume claster) и кластеры диска, принадлежащие файлу (logical claster). Для них поддерживается разная нумерация, соответственно VCN и LCN.

Базовая единица распределения дискового пространства для файловой системы NTFS - непрерывная область кластеров, называемая серией или отрезком. В качестве адреса серии NTFS использует логический номер его первого кластера, а также количество кластеров в серии k, то есть пара (LCN, k). Таким образом, часть файла, помещенная в серию и начинающаяся с виртуального кластера VCN, характеризуется адресом, состоящим из трёх чисел: (VCN, LCN, k).

Структура тома NTFS показана на Рис. 5. Загрузочный блок тома NTFS располагается в начале тома, а его копия – в середине тома. Загрузочный блок содержит стандартный блок параметров BIOS, количество блоков в томе, а также начальный логический номер кластера основной копии MFT зеркальную копию MFT.

 

Загрузочный сектор
0
1
2
3
15
Системный файл 1
Системный файл 2
Системный файл n
Копия MFT (первые три записи)
Файл N – 1
Копия загрузочного файла
MFT
Файл M
MFT
 

Рис. 5. Структура тома NTFS.

Далее располагается первый отрезок MFT, содержащий 16 стандартных, создаваемых при форматировании записей о системных файлах NTFS. Назначение этих файлов описано в таблице 1.



Устранение ограничений

В NTFS значительно – до 2^64 байт (16 экзабайт или 18 446 744 073 709 551 616 байт) – увеличен допустимый раздел файлов и томов. В NTFS для решения проблемы фиксированного размера сектора снова применена концепция кластеров, ранее использованная в файловой системе FAT. Это было сделано для улучшения аппаратной независимости операционной системы Windows NT при ее использовании с жесткими дисками, изготовленными по другой технологии. Размер кластера определяется кратным числом единичных блоков жесткого диска. Кроме того, для задания имен файлов используется кодировка Юникод и наряду с длинными именами обеспечена поддержка формата 8.3.

NTFS лучше всего подходит для использования с томами размером более 400 МБ. С увеличением размера тома производительность файловой системы NTFS не падает, как у FAT.

Благодаря способности к восстановлению в NTFS отсутствует необходимость использования каких-либо программ восстановления диска.

Дата: 2018-11-18, просмотров: 229.