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

         

Безопасность


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

Права файловой системы NTFS неразрывносвязаны с самой системой - то есть они,вообще говоря, необязательны к соблюдениюдругой системой, если ей дать физическийдоступ к диску. Для предотвращенияфизического доступа в Windows2000 (NT5) всё жеввели стандартную возможность - об этом см.ниже. Система прав в своем текущемсостоянии достаточно сложна, и я сомневаюсь,что смогу сказать широкому читателю что-нибудьинтересное и полезное ему в обычной жизни.Если вас интересует эта тема - вы найдетемножество книг по сетевой архитектуре NT, вкоторых это описано более чем подробно.

На этом описание строение файловойсистемы можно закончить, осталось описатьлишь некоторое количество простопрактичных или оригинальных вещей.



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


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

Лирическое отступление. Метод инсталляции NT4.0 на пустой диск довольно оригинален и может навести на неправильные мысли о возможностях NTFS. Если вы укажете программе установки, что желаете отформатировать диск в NTFS, максимальный размер, который она вам предложит, будет всего 4 Гб. Почему так мало, если размер раздела NTFS на самом деле практически неограничен? Дело в том, что установочная секция просто не знает этой файловой системы

Программа установки форматирует этот диск в обычный FAT, максимальный размер которого в NT составляет 4 Гбайт (с использованием не совсем стандартного огромного кластера 64 Кбайта), и на этот FAT устанавливает NT. А вот уже в процессе первой загрузки самой операционной системы (еще в установочной фазе) производится быстрое преобразование раздела в NTFS; так что пользователь ничего и не замечает, кроме странного "ограничения" на размер NTFS при установке.



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


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

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

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



Hard Links


Эта штука была в NTFS с незапамятных времен,но использовалась очень редко - и тем неменее: Hard Link - это когда один и тот же файлимеет два имени (несколько указателей файла-каталогаили разных каталогов указывают на одну и туже MFT запись). Допустим, один и тот же файлимеет имена 1.txt и 2.txt: если пользовательсотрет файл 1, останется файл 2. Если сотрет 2- останется файл 1, то есть оба имени, смомента создания, совершенно равноправны.Файл физически стирается лишь тогда, когдабудет удалено его последнее имя.



Каталоги




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

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

- и вот тут-то влинейной системе у нас будут трудности споиском файла, описанные выше, которые слихвой компенсируют саму простотудобавления файла в каталог.

Какую информацию можно получить, простопрочитав файл каталога? Ровно то, что выдаеткоманда dir. Для выполнения простейшейнавигации по диску не нужно лазить в 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 тысяч различных символов, искать большие и малые эквиваленты которых очень нетривиально.



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


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




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

Источник: Softodrom.ru, 05.02.2004

вверх

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



Структура раздела - общий взгляд


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

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

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




Гораздо более практичная возможность,позволяющая делать виртуальные каталоги -ровно так же, как и виртуальные дискикомандой subst в DOSе. Применения достаточноразнообразны: во-первых, упрощение системыкаталогов. Если вам не нравится каталогDocuments and settings\Administrator\Documents, вы можетеприлинковать его в корневой каталог -система будет по прежнему общаться скаталогом с дремучим путем, а вы - с гораздоболее коротким именем, полностью емуэквивалентным. Для создания таких связейможно воспользоваться программой junction (junction.zip(15 Kb), 36 кб), которую написал известныйспециалист Mark Russinovich (http://www.sysinternals.com/).Программа работает только в NT5 (Windows 2000), каки сама возможность. Для удалениясвязи можно воспользоваться стандартнойкомандой rd. ВНИМАНИЕ: Попытка удалениясвязи с помощью проводника или другихфайловых менеджеров, не понимающихвиртуальную природу каталога (например, FAR),приведет к удалению данных, на которыессылается ссылка! Будьте осторожны.



Сжатие


Файлы NTFS имеют один довольно полезныйатрибут - "сжатый". Дело в том, что NTFSимеет встроенную поддержку сжатия дисков -то, для чего раньше приходилосьиспользовать Stacker или DoubleSpace. Любой файл иликаталог в индивидуальном порядке можетхранится на диске в сжатом виде - этотпроцесс совершенно прозрачен дляприложений. Сжатие файлов имеет оченьвысокую скорость и только одно большоеотрицательное свойство - огромнаявиртуальная фрагментация сжатых файлов,которая, правда, никому особо не мешает.Сжатие осуществляется блоками по 16кластеров и использует так называемые "виртуальныекластеры" - опять же предельно гибкоерешение, позволяющее добиться интересныхэффектов - например, половина файла можетбыть сжата, а половина - нет. Это достигаетсяблагодаря тому, что хранение информации окомпрессированности определенныхфрагментов очень похоже на обычнуюфрагментацию файлов: например, типичнаязапись физической раскладки для реального,несжатого, файла:

кластеры файла с 1 по 43-й хранятся в кластерах диска начиная с 400-го
кластеры файла с 44 по 52-й хранятся в кластерах диска начиная с 8530-го
...

Физическая раскладка типичного сжатогофайла:

кластеры файла с 1 по 9-й хранятся в кластерах диска начиная с 400-го
кластеры файла с 10 по 16-й нигде не хранятся
кластеры файла с 17 по 18-й хранятся в кластерах диска начиная с 409-го
кластеры файла с 19 по 36-й нигде не хранятся
....

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



Журналирование


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

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

Пример 2: более сложныйслучай - идет запись данных на диск. Вдруг,бах - отключается питание и системаперезагружается. На какой фазеостановилась запись, где есть данные, а гдечушь? На помощь приходит другой механизмсистемы - журнал транзакций. Дело в том, чтосистема, осознав свое желание писать надиск, пометила в метафайле $LogFile это своесостояние. При перезагрузке это файлизучается на предмет наличия незавершенныхтранзакций, которые были прерваны аварией ирезультат которых непредсказуем - все этитранзакции отменяются: место, в котороеосуществлялась запись, помечается сновакак свободное, индексы и элементы MFTприводятся в с состояние, в котором они былидо сбоя, и система в целом остаетсястабильна. Ну а если ошибка произошла призаписи в журнал? Тоже ничего страшного:транзакция либо еще и не начиналась (идеттолько попытка записать намерения еёпроизвести), либо уже закончилась - то естьидет попытка записать, что транзакция насамом деле уже выполнена. В последнемслучае при следующей загрузке система самавполне разберется, что на самом деле всё итак записано корректно, и не обратитвнимания на "незаконченную"транзакцию.

И все-таки помните, что журналирование - неабсолютная панацея, а лишь средствосущественно сократить число ошибок и сбоевсистемы. Вряд ли рядовой пользователь NTFSхоть когда-нибудь заметит ошибку системыили вынужден будет запускать chkdsk - опытпоказывает, что NTFS восстанавливается вполностью корректное состояние даже присбоях в очень загруженные дисковойактивностью моменты. Вы можете дажеоптимизировать диск и в самый разгар этогопроцесса нажать reset - вероятность потерьданных даже в этом случае будет очень низка.Важно понимать, однако, что системавосстановления NTFS гарантируеткорректность файловой системы, ане ваших данных. Если вы производили записьна диск и получили аварию - ваши данныемогут и не записаться. Чудес не бывает.