Алгоритм - Учебный центр

Версия сайта для слабовидящих
Заполните форму ниже! Мы вам перезвоним!

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


Каталоги в разделе NTFS (ликбез).

Каталоги в разделе NTFS (ликбез).

 

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

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

Для поиска одного файла среди 1000, например, FAT придется осуществить в среднем 500 сравнений (наиболее вероятно, что файл будет найден на середине поиска), а в системе на основе дерева 12 сравнений (210 = 1024). Но поддержание списка файлов в виде бинарного дерева довольно трудоемко, а FAT в исполнении современной системы (Windows 2000 или Windows 98) тоже использует сходную оптимизацию поиска.

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

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

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

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

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

Таким образом, в файловой системе NTFS каждому файлу жестко соответствует номер записи в MFT, а всё остальное опционально. Так как символьные данные представлены в кодировке Unicode - 16-битном представлении, которое дает 65535 разных символов, имя файла может содержать любые символы, включая полый набор национальных алфавитов. Максимальная длина имени файла - 255 символов. Файлы отсортированы по алфавиту, и поиск осуществляется очевидным способом - сравнением начальных букв.

Каталог на NTFS представляет собой специфический файл, хранящий ссылки на другие файлы и каталоги, создавая иерархическое строение данных на диске. Он начинается с сигнатуры 49 4E 44 58 (INDX), что означает — мы видим начало индексного файла корневого каталога. С адреса 58h стандартно начинается последовательность каталожных блоков.

Файл каталога (рис. 1) поделен на блоки, каждый из которых содержит имя файла (имя файла находится в конце блока), базовые атрибуты и ссылку на запись (элемент) MFT (ссылка занимает первые 6 байтов блока), которая уже предоставляет полную информацию об порциях файла или каталога. Главный каталог диска - корневой - ничем не отличается об обычных каталогов, кроме специальной ссылки на него из начала метафайла $MFT (5 запись файла $MFT).

 

Рис. 1. Начало файла корневого каталога (в виде содержимого блоков данных секторов и в отображении утилитой NtExplorer).

Каждый блок каталога в первых 6-ти байтах содержит номер записи файла $MFT, которая определяет файл, а заканчивается каталожный блок - именем этого файла. Листая каталог находим каталожный блок с нужным нам именем, ссылку на элемент MFT, который уже предоставляет полную информацию об элементе каталога. Например, файл $BadClus определяет 8-я запись файла $MFT.

 

 

 


Лицензия