Перевод статьи:

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


Автор: Дмитрий Михайлов
Перевод: Чернориз Виталий Анатольевич

Источник: digit-life.com


Биогр.   Реферат   Библиотека   Ссылки   Отчет



ДонНТУ







Портал магистров

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



Часть 1. Физическая структура NTFS


Начнем с общих фактов. Теоретически, NTFS раздел может быть почти любого размера. Лимит, безусловно, существует, но я не буду заострять на этом внимания, поскольку его будет более чем достаточно на следующие сотни лет при любых темпах развития вычислительной техники. А что же на практике? Почти то же самое. Максимальный размер раздела NTFS сегодня ограничен лишь размерами самих жестких дисков. Вероятно, при попытке установки на раздел с NT4 могут возникнуть некоторые проблемы, если какая-либо из его частей будет удалена более чем на 8 Гбайт от физического начала диска, но эта проблема относится только к загрузке раздела.

Способ инсталляции NT4.0 на пустой диск довольно оригинален и может привести к неправильной оценке возможностей NTFS. Если вы используете инсталляционную программу, которой хотите отформатировать диск в NTFS, то максимальный размер, предложенный вам, составит только 4 Гбайта. Почему же так мало, если размер раздела NTFS не ограничен? Ответ следующий – установка просто не знает данной файловой системы. Программа установки форматирует этот диск в обычный FAT, максимальный размер которого в NT составляет 4 Гбайта (при использовании не совсем стандартного огромного кластера 64 Кб), а NT устанавливается в этот FAT. В ходе первой загрузки операционной системы (на этапе установки), раздел быстро преобразуются в NTFS, это реализовано так, что пользователь ничего не замечает, кроме странного "ограничения" на размер NTFS во время установки.

Обзор структуры разделов

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

NTFS раздел символически разделен на две части. Первые 12% раздела предназначены для так называемой MFT зоны - пространства, которое содержит метафайл MFT. Любая запись данных в эту область невозможна. MFT-область всегда необходимо держать пустой и не допускать разделения наиболее важного служебного файла (MFT). Остальные 88% диска представляют собой обычное пространство для хранения файлов.

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

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

Файловая система NTFS является выдающимся достижением структуризации: каждый компонент системы является файлом - даже системная информация. Наиболее важный файл в NTFS называется MFT или главной таблицей файлов (Master File Table). Он расположен в MFT области и представляет собой централизованный каталог всех остальных файлов диска, и себя в том числе. MFT делится на записи фиксированного размера (обычно 1 Кбайт), и каждая запись соответствует своему файлу. Первые 16 файлов служебные, и они недоступны для операционной системы. Эти файлы называются метафайлами, самым первым среди которых является MFT. Эти первые 16 элементов MFT являются лишь частью диска, имеющей фиксированную позицию Интересно, что вторая копия первых 3 записей, для надежности (они очень важны) хранится в самой середине диска. Остальные MFT-файлы могут быть сохранены также как любые другие файлы в любом месте диска. Вполне возможно восстановление их позиции, используя в качестве основы первый элемент MFT.

Метафайлы

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

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



Файлы и потоки

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

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

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

Существует интересный случай с файлом данных. Каждый файл на NTFS имеет довольно абстрактное устройство - у него нет данных, у него есть потоки. Один из потоков имеет привычный для нас смысл –данных файла. Однако большинство атрибутов файла также потоки! Таким образом, мы видим, что обязательным для файла является только номер в MFT, а остальное – необязательно. Данное обобщение может использоваться для создания довольно удобных вещей - например, можно "прикрепить" еще один поток в файл, имеющий отчет о каких-либо данных в нём - например, информация об авторе и содержании файла, как это было в Windows 2000 (наиболее правильная закладка в свойствах файла, доступная из проводника). Интересно, что эти дополнительные потоки не видны стандартными средствами: наблюдаемый размер файла включает только размер основного потока, содержащего традиционные данные. Вполне возможно, например, иметь файл нулевой длинны, после удаления которого освобождается 1 Гбайт пространства только потому, что некоторые программы или технология прикрепила дополнительных поток (альтернативные данные) гигабайтного размер. Но на самом деле на момент потоки практически не используются, поэтому мы можем не бояться таких ситуаций, хотя они и являются гипотетически возможными. Просто имейте в виду, что файл в NTFS гораздо более глубокая и более глобальная концепция, чем можно себе представить, только наблюдая каталоги на диске. Ну и, наконец: имя файла может содержать любые символы, включая полный набор национальных алфавитов, поскольку данные содержатся в Unicode - 16-битное представление которых дает 65535 разных символов. Максимальная длина имени файла 255 символов.

Каталоги

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

Важно понять, что для поиска одного файла среди 1000, например, для FAT должно быть сделано около 500 паросочетаний (вероятнее всего файл будет найден на середине поиска), а системе, основывающейся на дереве - всего около 10 (2 ^ 10 = 10^2). Экономия времени поиска на лицо. Не думайте, что в традиционных системах (FAT) все настолько неухожено: во-первых, поддержание бинарных деревьев списка файлов является довольно сложным, а во-вторых - даже FAT в современной системе (Windows2000 или Windows98) использует аналогичную оптимизацию поиска. Это просто еще один факт, донесённый до вашего ведома. Желательно также объяснить широко распространенную ошибку (с которой я столкнулся совершенно недавно), при добавлении файла в каталог, дерево является более сложным, чем линейный каталог. Эти операции вполне сопоставимы по времени. Чтобы добавить файл в каталог, необходимо сначала убедиться, что файл с таким именем ещё там не присутствует, иначе тогда мы будем иметь некоторые проблемы в линейной системе с поиском файлов, описанные выше. Эти проблемы решаются простым файлом дополнением в каталоге.

Какую информацию можно узнать, прочитав только файл каталога? Ту, которая даётся командой dir. Для элементарной навигации по диску нет необходимости идти в MFT для каждого файла, нужно просто читать наиболее распространенную информацию о файлах из файлов директорий. Основной каталог диска - корень – ничем не отличается от обычных каталогов, кроме специальной ссылки на него из начала метафайла MFT.