Диск NTFSусловно делится на две части. Первые 12% диска отводятся под так называемую MFTзону - пространство, в которое растет метафайл MFT(об этом ниже). Запись каких- либо данных в эту область невозможна. MFT-зона всегда держится пустой - это делается для того, чтобы самый главный, служебный файл (MFT) не фрагментировался при своем росте. Остальные 88% диска представляют собой обычное пространство для хранения файлов.
— MFTКопия первых записей MFT
Свободное место диска, однако, включает в себя всё физически свободное место - незаполненные куски MFT-зоны туда тоже включаются. Механизм использования MFT- зоны таков: когда файлы уже нельзя записывать в обычное пространство, MFT-зона просто сокращается (в текущих версиях операционных систем ровно в два раза), освобождая таким образом место для записи файлов. При освобождении места в обычной области MFTзона может снова расширится. При этом не исключена ситуация, когда в этой зоне остались и обычные файлы: никакой аномалии тут нет. Что ж, система старалась оставить её свободной, но ничего не получилось. Жизнь продолжается... Метафайл MFTвсе-таки может фрагментироваться, хоть это и было бы нежелательно.
MFTи его структура
Файловая 'система NTFSпредставляет собой выдающееся достижение структуризации: каждый элемент системы представляет собой файл - даже служебная информация. Самый главный файл на NTFSназывается MFT, или MasterFileTable- общая таблица файлов. Именно он размещается в MFTзоне и представляет собой централизованный каталог всех остальных файлов диска, и, как не парадоксально, себя самого. MFTподелен на записи фиксированного размера (обычно 1 Кбайт), и каждая запись соответствует какому либо файлу (в общем смысле этого слова). Первые 16 файлов носят служебный характер и недоступны операционной системе - они называются метафайлами, причем самый первый метафайл - сам MFT. Эти первые 16 элементов MFT- единственная часть диска, имеющая фиксированное положение. Интересно, что вторая копия первых трех записей, для надежности - они очень важны - хранится ровно посередине диска. Остальной MFT-файл может располагаться, как и любой другой файл, в произвольных местах диска - восстановить его положение можно с помощью его самого, "зацепившись" за самую основу - за первый элемент MFT.
Журнал про вам не
NTFS- отказоустойчивая система, которая вполне может привести себя в корректное состояние при практически любых сбоях. Любая современная файловая система основана на таком понятии, как транзакция - действие, совершаемое целиком и корректно или не совершаемое вообще. У NTFSпросто не бывает промежуточных (ошибочных или некорректных) состояний - квант изменения данных не может быть поделен на до и после сбоя, принося разрушения и путаницу - он либо совершен, либо отменен.
Пример 1: осуществляется запись данных на диск. Вдруг выясняется, что в то место, куда мы только что решили записать очередную порцию данных, писать не удалось - физическое повреждение поверхности. Поведение NTFSв этом случае довольно логично: транзакция записи откатывается целиком - запись не производится. Место помечается как сбойное, а данные записываются в другое место - начинается новая транзакция.
Пример 2: более сложный случай - идет запись данных на диск. Вдруг, бах - отключается питание и система перезагружается. На какой фазе остановилась запись, где есть данные, а где данные не корректны? На помощь приходит другой механизм системы - журнал транзакций. Система отмечает в метафайле SLogFileсвое состояние и при перезагрузке это файл проверяется на предмет наличия незавершенных транзакций, которые были прерваны из-за аварии и результат, которых непредсказуем. Все эти транзакции отменяются: место, в которое осуществлялась запись, помечается снова как свободное, индексы и элементы 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 кластеров ---------------- ►
виртуальные
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
9|10|11|12|13[14|15|1б[17|18
физические кластеры (на диске)
Видно, что сжатый файл имеет "виртуальные" кластеры, реальной информации в которых нет. Как только система видит такие виртуальные кластеры, она тут же понимает, что данные предыдущего блока кратного 16-ти, должны быть разжаты, а получившиеся данные как раз заполнят виртуальные кластеры - вот, по сути, и весь алгоритм.
Безопасность
NTFSсодержит множество средств разграничения прав объектов - есть мнение, что это самая совершенная файловая система из всех ныне существующих. В теории это, без сомнения, так, но в текущих реализациях, к сожалению, система прав достаточно далека от идеала и представляет собой хоть и жесткий, но не всегда логичный набор характеристик. Права, назначаемые любому объекту и однозначно соблюдаемые системой, эволюционируют - крупные изменения и дополнения прав осуществлялись уже несколько раз и к Windows2000 все-таки они пришли к достаточно разумному набору.
Права файловой системы NTFSнеразрывно связаны с самой системой - то есть они, вообще говоря, необязательны к соблюдению другой системой, если ей дать физический доступ к диску. Для предотвращения физического доступа в Windows2000 всё же ввели стандартную возможность - об этом см. ниже. Система прав в своем текущем состоянии достаточно сложна, и я сомневаюсь, что смогу сказать широкому читателю что-нибудь интересное и полезное ему в обычной жизни. Если вас интересует эта тема - вы найдете множество книг по сетевой архитектуре NT, в которых это описано более чем подробно.
На этом описание строение файловой системы можно закончить, осталось описать лишь некоторое количество просто практичных или оригинальных вещей.
HardLinks
Эта штука была в NTFSс незапамятных времен, но использовалась очень редко - и тем не менее: HardLink- это когда один и тот же файл имеет два имени (несколько указателей файла-каталога или разных каталогов указывают на одну и ту же MFTзапись). Допустим, один и тот же файл имеет именаl.txtи 2.txt: если пользователь сотрет файл 1, останется файл 2. Если сотрет 2 - останется файл 1, то есть оба имени, с момента создания, совершенно равноправны. Файл физически стирается лишь тогда, когда будет удалено его последнее имя.
SymbolicLinks (NT5)
Гораздо более практичная возможность, позволяющая делать виртуальные каталоги - ровно гак же, как и виртуальные диски командой substв DOSe. Применения достаточно разнообразны: во-первых, упрощение системы каталогов. Если вам не нравится каталог Documentsandsettings\Administrator\Documents, вы можете прилинковать его в корневой каталог - система будет по прежнему общаться с каталогом с дремучим путем, а вы - с гораздо более коротким именем, полностью ему эквивалентным. Для создания гаких связей можно воспользоваться программой junction, которую написал известный специалистMarkRussinovich (http://www.sysinternals.com/). Программа работает только в Windows2000. как и сама возможность.