1. Физическая структура NTFS
2. Структура раздела - общий взгляд
3. MFT и его структура
4. Метафайлы
5. Файлы и потоки
6. Каталоги
7. Журналирование
8. Сжатие
9. Безопасность
10. Hard Links
11. Symbolic Links (NT5)
12. Шифрование (NT5)
Начнем с общих фактов. Раздел NTFS,теоретически, может быть почти какогоугодно размера. Предел, конечно, есть, но ядаже не буду указывать его, так как его сзапасом хватит на последующие сто летразвития вычислительной техники - при любыхтемпах роста. Как обстоит с этим дело напрактике? Почти так же. Максимальный размерраздела NTFS в данный момент ограничен лишьразмерами жестких дисков. NT4, правда, будетиспытывать проблемы при попытке установкина раздел, если хоть какая-нибудь его частьотступает более чем на 8 Гб от физическогоначала диска, но эта проблема касается лишьзагрузочного раздела.
Лирическое отступление. Метод инсталляции NT4.0 на пустой диск довольно оригинален и может навести на неправильные мысли о возможностях NTFS. Если вы укажете программе установки, что желаете отформатировать диск в NTFS, максимальный размер, который она вам предложит, будет всего 4 Гб. Почему так мало, если размер раздела NTFS на самом деле практически неограничен? Дело в том, что установочная секция просто не знает этой файловой системы :) Программа установки форматирует этот диск в обычный FAT, максимальный размер которого в NT составляет 4 Гбайт (с использованием не совсем стандартного огромного кластера 64 Кбайта), и на этот FAT устанавливает NT. А вот уже в процессе первой загрузки самой операционной системы (еще в установочной фазе) производится быстрое преобразование раздела в NTFS; так что пользователь ничего и не замечает, кроме странного "ограничения" на размер NTFS при установке. :)
Как и любая другая система, NTFS делит всеполезное место на кластеры - блоки данных,используемые единовременно. NTFSподдерживает почти любые размеры кластеров- от 512 байт до 64 Кбайт, неким стандартом жесчитается кластер размером 4 Кбайт. Никакиханомалий кластерной структуры NTFS не имеет,поэтому на эту, в общем-то, довольнобанальную тему, сказать особо нечего.
Диск NTFS условно делится на две части.Первые 12% диска отводятся под такназываемую MFT зону - пространство, в котороерастет метафайл MFT (об этом ниже). Записькаких-либо данных в эту область невозможна.MFT-зона всегда держится пустой - этоделается для того, чтобы самый главный,служебный файл (MFT) не фрагментировался присвоем росте. Остальные 88% дискапредставляют собой обычное пространстводля хранения файлов.

Свободное место диска, однако, включает всебя всё физически свободное место -незаполненные куски MFT-зоны туда тожевключаются. Механизм использования MFT-зонытаков: когда файлы уже нельзя записывать вобычное пространство, MFT-зона простосокращается (в текущих версияхоперационных систем ровно в два раза),освобождая таким образом место для записифайлов. При освобождении места в обычнойобласти MFT зона может снова расширится. Приэтом не исключена ситуация, когда в этойзоне остались и обычные файлы: никакойаномалии тут нет. Что ж, система стараласьоставить её свободной, но ничего неполучилось. Жизнь продолжается... МетафайлMFT все-таки может фрагментироваться, хотьэто и было бы нежелательно.
Файловая система NTFS представляет собойвыдающееся достижение структуризации: каждыйэлемент системы представляет собой файл -даже служебная информация. Самый главныйфайл на NTFS называется MFT, или Master File Table -общая таблица файлов. Именно он размещаетсяв MFT зоне и представляет собойцентрализованный каталог всех остальныхфайлов диска, и, как не парадоксально, себясамого. MFT поделен на записи фиксированногоразмера (обычно 1 Кбайт), и каждая записьсоответствует какому либо файлу (в общемсмысле этого слова). Первые 16 файлов носятслужебный характер и недоступныоперационной системе - они называютсяметафайлами, причем самый первый метафайл -сам MFT. Эти первые 16 элементов MFT -единственная часть диска, имеющаяфиксированное положение. Интересно, чтовторая копия первых трех записей, длянадежности (они очень важны) хранится ровнопосередине диска. Остальной MFT-файл можетрасполагаться, как и любой другой файл, впроизвольных местах диска - восстановитьего положение можно с помощью его самого,"зацепившись" за самую основу - запервый элемент MFT.
Первые 16 файлов NTFS (метафайлы) носятслужебный характер. Каждый из них отвечаетза какой-либо аспект работы системы.Преимущество настолько модульного подходазаключается в поразительной гибкости -например, на FAT-е физическое повреждение всамой области FAT фатально дляфункционирования всего диска, а NTFS можетсместить, даже фрагментировать по диску,все свои служебные области, обойдя любыенеисправности поверхности - кроме первых 16элементов MFT.
Метафайлы находятся корневом каталоге NTFSдиска - они начинаются с символа имени"$", хотя получить какую-либоинформацию о них стандартными средствамисложно. Любопытно, что и для этих файловуказан вполне реальный размер - можноузнать, например, сколько операционнаясистема тратит на каталогизацию всеговашего диска, посмотрев размер файла $MFT. Вследующей таблице приведены используемые вданный момент метафайлы и их назначение.
| $MFT |
сам MFT |
| $MFTmirr |
копия первых 16 записей MFT, размещенная посередине диска |
| $LogFile |
файл поддержки журналирования (см. ниже) |
| $Volume |
служебная информация - метка тома, версия файловой системы, т.д. |
| $AttrDef |
список стандартных атрибутов файлов на томе |
| $. |
корневой каталог |
| $Bitmap |
карта свободного места тома |
| $Boot |
загрузочный сектор (если раздел загрузочный) |
| $Quota |
файл, в котором записаны права пользователей на использование дискового пространства (начал работать лишь в NT5) |
| $Upcase |
файл - таблица соответствия заглавных и прописных букв в имен файлов на текущем томе. Нужен в основном потому, что в NTFS имена файлов записываются в Unicode, что составляет 65 тысяч различных символов, искать большие и малые эквиваленты которых очень нетривиально. |
Итак, у системы есть файлы - и ничего кромефайлов. Что включает в себя это понятие наNTFS?
-
Прежде всего, обязательный элемент - запись в MFT, ведь, как было сказано ранее, все файлы диска упоминаются в MFT. В этом месте хранится вся информация о файле, за исключением собственно данных. Имя файла, размер, положение на диске отдельных фрагментов, и т.д. Если для информации не хватает одной записи MFT, то используются несколько, причем не обязательно подряд.
-
Опциональный элемент - потоки данных файла. Может показаться странным определение "опциональный", но, тем не менее, ничего странного тут нет. Во-первых, файл может не иметь данных - в таком случае на него не расходуется свободное место самого диска. Во-вторых, файл может иметь не очень большой размер. Тогда идет в ход довольно удачное решение: данные файла хранятся прямо в MFT, в оставшемся от основных данных месте в пределах одной записи MFT. Файлы, занимающие сотни байт, обычно не имеют своего "физического" воплощения в основной файловой области - все данные такого файла хранятся в одном месте - в MFT.
Довольно интересно обстоит дело и сданными файла. Каждый файл на NTFS, в общем-то,имеет несколько абстрактное строение - унего нет как таковых данных, а есть потоки (streams).Один из потоков и носит привычный нам смысл- данные файла. Но большинство атрибутовфайла - тоже потоки! Таким образом,получается, что базовая сущность у файлатолько одна - номер в MFT, а всё остальноеопционально. Данная абстракция можетиспользоваться для создания довольноудобных вещей - например, файлу можно "прилепить"еще один поток, записав в него любые данные -например, информацию об авторе и содержаниифайла, как это сделано в Windows 2000 (самаяправая закладка в свойствах файла,просматриваемых из проводника). Интересно,что эти дополнительные потоки не видныстандартными средствами: наблюдаемыйразмер файла - это лишь размер основногопотока, который содержит традиционныеданные. Можно, к примеру, иметь файл нулевойдлинны, при стирании которого освободится 1Гбайт свободного места - просто потому, чтокакая-нибудь хитрая программа илитехнология прилепила в нему дополнительныйпоток (альтернативные данные)гигабайтового размера. Но на самом деле втекущий момент потоки практически неиспользуются, так что опасаться подобныхситуаций не следует, хотя гипотетически онивозможны. Просто имейте в виду, что файл наNTFS - это более глубокое и глобальное понятие,чем можно себе вообразить простопросматривая каталоги диска. Ну инапоследок: имя файла может содержать любыесимволы, включая полый набор национальныхалфавитов, так как данные представлены вUnicode - 16-битном представлении, которое дает65535 разных символов. Максимальная длинаимени файла - 255 символов.
Каталог на NTFS представляет собойспецифический файл, хранящий ссылки надругие файлы и каталоги, создаваяиерархическое строение данных на диске.Файл каталога поделен на блоки, каждый изкоторых содержит имя файла, базовыеатрибуты и ссылку на элемент MFT, который ужепредоставляет полную информацию обэлементе каталога. Внутренняя структуракаталога представляет собой бинарноедерево. Вот что это означает: для поискафайла с данным именем в линейном каталоге,таком, например, как у FAT-а, операционнойсистеме приходится просматривать всеэлементы каталога, пока она не найдетнужный. Бинарное же дерево располагаетимена файлов таким образом, чтобы поискфайла осуществлялся более быстрым способом- с помощью получения двухзначных ответовна вопросы о положении файла. Вопрос, накоторый бинарное дерево способно датьответ, таков: в какой группе, относительноданного элемента, находится искомое имя -выше или ниже? Мы начинаем с такого вопросак среднему элементу, и каждый ответ сужаетзону поиска в среднем в два раза. Файлы,скажем, просто отсортированы по алфавиту, иответ на вопрос осуществляется очевиднымспособом - сравнением начальных букв.Область поиска, суженная в два раза,начинает исследоваться аналогичнымобразом, начиная опять же со среднегоэлемента.

Вывод - для поиска одного файла среди 1000,например, FAT придется осуществить в среднем500 сравнений (наиболее вероятно, что файлбудет найден на середине поиска), а системена основе дерева - всего около 10-ти (2^10 = 1024).Экономия времени поиска налицо. Не стоит,однако думать, что в традиционных системах (FAT)всё так запущено: во-первых, поддержаниесписка файлов в виде бинарного деревадовольно трудоемко, а во-вторых - даже FAT висполнении современной системы (Windows2000 илиWindows98) использует сходную оптимизациюпоиска. Это просто еще один факт в вашукопилку знаний. Хочется также развеятьраспространенное заблуждение (которое ясам разделял совсем еще недавно) о том, чтодобавлять файл в каталог в виде дереватруднее, чем в линейный каталог: этодостаточно сравнимые по времени операции -дело в том, что для того, чтобы добавить файлв каталог, нужно сначала убедится, что файлас таким именем там еще нет :) - и вот тут-то влинейной системе у нас будут трудности споиском файла, описанные выше, которые слихвой компенсируют саму простотудобавления файла в каталог.
Какую информацию можно получить, простопрочитав файл каталога? Ровно то, что выдаеткоманда dir. Для выполнения простейшейнавигации по диску не нужно лазить в MFT закаждым файлом, надо лишь читать самую общуюинформацию о файлах из файлов каталогов.Главный каталог диска - корневой - ничем неотличается об обычных каталогов, кромеспециальной ссылки на него из началаметафайла MFT.
NTFS - отказоустойчивая система, котораявполне может привести себя в корректноесостояние при практически любых реальныхсбоях. Любая современная файловая системаоснована на таком понятии, как транзакция- действие, совершаемое целиком и корректноили не совершаемое вообще. У NTFS просто небывает промежуточных (ошибочных илинекорректных) состояний - квант измененияданных не может быть поделен на до и послесбоя, принося разрушения и путаницу - онлибо совершен, либо отменен.
Пример 1: осуществляетсязапись данных на диск. Вдруг выясняется, чтов то место, куда мы только что решилизаписать очередную порцию данных, писать неудалось - физическое повреждениеповерхности. Поведение NTFS в этом случаедовольно логично: транзакция записиоткатывается целиком - система осознает,что запись не произведена. Место помечаетсякак сбойное, а данные записываются в другоеместо - начинается новая транзакция.
Пример 2: более сложныйслучай - идет запись данных на диск. Вдруг,бах - отключается питание и системаперезагружается. На какой фазеостановилась запись, где есть данные, а гдечушь? На помощь приходит другой механизмсистемы - журнал транзакций. Дело в том, чтосистема, осознав свое желание писать надиск, пометила в метафайле $LogFile это своесостояние. При перезагрузке это файлизучается на предмет наличия незавершенныхтранзакций, которые были прерваны аварией ирезультат которых непредсказуем - все этитранзакции отменяются: место, в котороеосуществлялась запись, помечается сновакак свободное, индексы и элементы MFTприводятся в с состояние, в котором они былидо сбоя, и система в целом остаетсястабильна. Ну а если ошибка произошла призаписи в журнал? Тоже ничего страшного:транзакция либо еще и не начиналась (идеттолько попытка записать намерения еёпроизвести), либо уже закончилась - то естьидет попытка записать, что транзакция насамом деле уже выполнена. В последнемслучае при следующей загрузке система самавполне разберется, что на самом деле всё итак записано корректно, и не обратитвнимания на "незаконченную"транзакцию.
И все-таки помните, что журналирование - неабсолютная панацея, а лишь средствосущественно сократить число ошибок и сбоевсистемы. Вряд ли рядовой пользователь NTFSхоть когда-нибудь заметит ошибку системыили вынужден будет запускать chkdsk - опытпоказывает, что NTFS восстанавливается вполностью корректное состояние даже присбоях в очень загруженные дисковойактивностью моменты. Вы можете дажеоптимизировать диск и в самый разгар этогопроцесса нажать reset - вероятность потерьданных даже в этом случае будет очень низка.Важно понимать, однако, что системавосстановления NTFS гарантируеткорректность файловой системы, ане ваших данных. Если вы производили записьна диск и получили аварию - ваши данныемогут и не записаться. Чудес не бывает.
Файлы NTFS имеют один довольно полезныйатрибут - "сжатый". Дело в том, что NTFSимеет встроенную поддержку сжатия дисков -то, для чего раньше приходилосьиспользовать Stacker или DoubleSpace. Любой файл иликаталог в индивидуальном порядке можетхранится на диске в сжатом виде - этотпроцесс совершенно прозрачен дляприложений. Сжатие файлов имеет оченьвысокую скорость и только одно большоеотрицательное свойство - огромнаявиртуальная фрагментация сжатых файлов,которая, правда, никому особо не мешает.Сжатие осуществляется блоками по 16кластеров и использует так называемые "виртуальныекластеры" - опять же предельно гибкоерешение, позволяющее добиться интересныхэффектов - например, половина файла можетбыть сжата, а половина - нет. Это достигаетсяблагодаря тому, что хранение информации окомпрессированности определенныхфрагментов очень похоже на обычнуюфрагментацию файлов: например, типичнаязапись физической раскладки для реального,несжатого, файла:
кластеры файла с 1 по 43-й хранятся в кластерах диска начиная с 400-го
кластеры файла с 44 по 52-й хранятся в кластерах диска начиная с 8530-го
...
Физическая раскладка типичного сжатогофайла:
кластеры файла с 1 по 9-й хранятся в кластерах диска начиная с 400-го
кластеры файла с 10 по 16-й нигде не хранятся
кластеры файла с 17 по 18-й хранятся в кластерах диска начиная с 409-го
кластеры файла с 19 по 36-й нигде не хранятся
....

Видно, что сжатый файл имеет "виртуальные"кластеры, реальной информации в которых нет.Как только система видит такие виртуальныекластеры, она тут же понимает, что данныепредыдущего блока, кратного 16-ти, должныбыть разжаты, а получившиеся данные как раззаполнят виртуальные кластеры - вот, по сути,и весь алгоритм.
NTFS содержит множество средствразграничения прав объектов - есть мнение,что это самая совершенная файловая системаиз всех ныне существующих. В теории это, безсомнения, так, но в текущих реализациях, ксожалению, система прав достаточно далекаот идеала и представляет собой хоть ижесткий, но не всегда логичный наборхарактеристик. Права, назначаемые любомуобъекту и однозначно соблюдаемые системой,эволюционируют - крупные изменения идополнения прав осуществлялись уженесколько раз и к Windows 2000 все-таки они пришлик достаточно разумному набору.
Права файловой системы NTFS неразрывносвязаны с самой системой - то есть они,вообще говоря, необязательны к соблюдениюдругой системой, если ей дать физическийдоступ к диску. Для предотвращенияфизического доступа в Windows2000 (NT5) всё жеввели стандартную возможность - об этом см.ниже. Система прав в своем текущемсостоянии достаточно сложна, и я сомневаюсь,что смогу сказать широкому читателю что-нибудьинтересное и полезное ему в обычной жизни.Если вас интересует эта тема - вы найдетемножество книг по сетевой архитектуре NT, вкоторых это описано более чем подробно.
На этом описание строение файловойсистемы можно закончить, осталось описатьлишь некоторое количество простопрактичных или оригинальных вещей.
Эта штука была в NTFS с незапамятных времен,но использовалась очень редко - и тем неменее: Hard Link - это когда один и тот же файлимеет два имени (несколько указателей файла-каталогаили разных каталогов указывают на одну и туже MFT запись). Допустим, один и тот же файлимеет имена 1.txt и 2.txt: если пользовательсотрет файл 1, останется файл 2. Если сотрет 2- останется файл 1, то есть оба имени, смомента создания, совершенно равноправны.Файл физически стирается лишь тогда, когдабудет удалено его последнее имя.
Гораздо более практичная возможность,позволяющая делать виртуальные каталоги -ровно так же, как и виртуальные дискикомандой subst в DOSе. Применения достаточноразнообразны: во-первых, упрощение системыкаталогов. Если вам не нравится каталогDocuments and settingsAdministratorDocuments, вы можетеприлинковать его в корневой каталог -система будет по прежнему общаться скаталогом с дремучим путем, а вы - с гораздоболее коротким именем, полностью емуэквивалентным. Для создания таких связейможно воспользоваться программой junction (junction.zip(15 Kb), 36 кб), которую написал известныйспециалист Mark Russinovich (http://www.sysinternals.com).Программа работает только в NT5 (Windows 2000), каки сама возможность. Для удаления связиможно воспользоваться стандартнойкомандой rd. ВНИМАНИЕ: Попытка удалениясвязи с помощью проводника или другихфайловых менеджеров, не понимающихвиртуальную природу каталога (например, FAR),приведет к удалению данных, на которыессылается ссылка! Будьте осторожны.
Полезная возможность для людей, которыебеспокоятся за свои секреты - каждый файлили каталог может также быть зашифрован,что не даст возможность прочесть его другойинсталляцией NT. В сочетании со стандартными практически непрошибаемым паролем назагрузку самой системы, эта возможностьобеспечивает достаточную для большинстваприменений безопасность избранных вамиважных данных.