Структура файловой системы




Реализация файловой системы NTFS

Каждый том NTFS (например, дисковый раздел) содержит файлы, каталоги, битовые

массивы и другие структуры данных. Каждый том организован как линейная после-

довательность блоков (которые в терминологии компании Microsoft называются кла-

стерами), причем размер блоков для каждого тома фиксирован (в зависимости от раз-

мера тома он может изменяться от 512 байт до 64 Кбайт).

С сылки на блоки делаются с использованием

смещения от начала тома (при помощи 64-битных чисел).

Главная структура данных каждого тома — это MFT (Master File Table — главная табли-

ца файлов), которая является линейной последовательностью записей фиксированного

размера (1 Кбайт). Каждая запись MFT описывает один файл или один каталог. Она

содержит атрибуты файла (такие, как его имя и временная метка), а также список

дисковых адресов (где расположены его блоки). Если файл очень большой, то иногда

приходится использовать две или более записи MFT (чтобы разместить в них список

всех блоков). В этом случае первая запись в MFT, называемая основной записью (base

record), указывает на дополнительные записи в MFT.

Б итовый

массив отслеживает свободные элементы MFT.

Сама MFT также является файлом и в качестве такового может быть размещена в лю-

бом месте тома (таким образом устраняется проблема наличия дефектных секторов

на первой дорожке). Более того, при необходимости этот файл может расти (до мак-

симального размера в 248 записей).

К аждая запись MFT состоит из последовательности пар

(заголовок атрибута — значение). Каждый атрибут начинается с заголовка, рассказы-

вающего о том, что это за атрибут и какую длину имеет его значение. Некоторые зна-

чения атрибутов (такие, как имя файла и его данные) имеют переменную длину. Если

значение атрибута достаточно короткое для того, чтобы уместиться в записи MFT, то

оно помещается именно туда. Если же значение слишком длинное, то оно размещается

на диске, а в запись MFT помещается указатель на него. Это делает систему NTFS очень

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

Первые 16 записей MFT резервируются для файлов метаданных NTFS (см. рис. 11.24).

Каждая из этих записей описывает нормальный файл, который имеет атрибуты и бло-

ки данных (как и любой другой файл). Каждый из этих файлов имеет имя, которое

начинается со знака доллара (чтобы обозначить его как файл метаданных). Первая

запись описывает сам файл MFT. В частности, в ней говорится, где находятся блоки

файла MFT (чтобы система могла найти файл MFT). Очевидно, что Windows нужен

способ нахождения первого блока файла MFT, чтобы найти остальную информацию по

ф айловой системе. Windows смотрит в загрузочном блоке — именно туда записывается

адрес первого блока файла MFT при форматировании тома.

Запись 1 является дубликатом начала файла MFT.

В торая запись — файл журнала. Когда

в файловой системе происходят структурные изменения (такие, как добавление нового

или удаление существующего каталога), то такое действие журналируется здесь до его

выполнения (чтобы повысить вероятность корректного восстановления в случае сбоя

во время операции, например такого, как отказ системы). Здесь также журналируются

изменения в файловых атрибутах. Фактически не журналируются здесь только из-

менения в пользовательских данных. Запись 3 содержит информацию о томе (такую,

как его размер, метка и версия).

А трибуты определяются в файле $AttrDef. Информация об

этом файле содержится в MFT (в записи 4). Затем идет корневой каталог, который сам

является файлом и может расти до произвольного размера. Он описывается записью

номер 5 в MFT.

Свободное пространство тома отслеживается при помощи битового массива. Сам би-

товый массив — тоже файл, его атрибуты и дисковые адреса даны в записи 6 в MFT.

С ледующая запись MFT указывает на файл начального загрузчика. Запись 8 исполь-

зуется для того, чтобы связать вместе все плохие блоки (чтобы обеспечить невозмож-

ность их использования для файлов). Запись 9 содержит информацию безопасности.

Запись 10 используется для установления соответствия регистра. Для латинских букв

A — Z соответствие регистра очевидно

О днако соответствие регистров для других языков н е столь

очевидно, поэтому данный файл рассказывает, как это сделать. И наконец, запись 11 —

это каталог, содержащий различные файлы для таких вещей, как дисковые квоты,

идентификаторы объектов, точки повторной обработки и т. д. Последние четыре записи

MFT зарезервированы для использования в будущем.

Каждая запись MFT состоит из заголовка записи, за которым следуют пары «заголо-

вок атрибута — значение». Заголовок записи содержит системный код, используемый

для проверки достоверности, последовательный номер (обновляемый каждый раз,

когда запись используется для нового файла), счетчик количества ссылок на файл,

фактическое количество использованных в записи байтов, идентификатор (индекс,

порядковый номер) основной записи (используется только для записей расширения),

а также некоторые другие поля.

NTFS определяет 13 атрибутов, которые могут появиться в записях MFT. Они пере-

числены в табл. 11.16. Каждый заголовок атрибута идентифицирует атрибут и содер-

жит длину и местоположение поля значения, а также разнообразные флаги и прочую

информацию. Обычно значения атрибутов следуют непосредственно за своими заго-

ловками атрибутов, но если значение слишком длинное для того, чтобы поместиться

в запись MFT, то оно может быть размещено в отдельных дисковых блоках. Такой атри-

бут называется нерезидентным атрибутом (nonresident attribute). Очевидно, что таким

атрибутом является атрибут данных. Некоторые атрибуты (такие, как имя) могут

Таблица 11.16. Используемые в записях MFT атрибуты

Атрибут Описание

Standard

information

Биты флагов, временные метки и т. д.

File name Имя файла в Unicode, может повторяться для имени MS-DOS

Security descriptor Устарел. Информация безопасности теперь находится в $Extend$Secure

Attribute list Местоположение дополнительных записей MFT (при необходимости)

Object ID Уникальный для данного тома 64-битный идентификатор файла

Reparse point Используется для монтирования и символических ссылок

Volume name Название данного тома (используется только в $Volume)

Volume information Версия тома (используется только в $Volume)

Index root Используется для каталогов

Index allocation Используется для очень больших каталогов

Bitmap Используется для очень больших каталогов

Logged utility stream Управляет журналированием в $LogFile

Data Данные потока, могут повторяться

п овторяться, но все атрибуты должны присутствовать в записи MFT в определенном

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

дентных атрибутов длиннее (поскольку они содержат информацию о том, где нужно

искать атрибут на диске).

Стандартное информационное поле содержит: сведения о владельце файла, информа-

цию безопасности, нужные для POSIX временные метки, количество жестких ссылок,

биты архивирования и «только для чтения» и т. д. Это поле имеет фиксированную дли-

ну и присутствует всегда. Имя файла — это строка переменной длины в коде Unicode.

Для того чтобы файлы с не соответствующими правилам MS-DOS именами могли

быть доступны старым 16-битным программам, они могут иметь короткие имена (short

name) по принятой в MS-DOS схеме 8 + 3. Если реальное имя файла соответствует

схеме именования в MS-DOS (8 + 3), то второе имя MS-DOS не нужно.

С писок атрибутов нужен в том случае, когда атрибуты не помещаются в запись MFT.

Из этого атрибута можно узнать, где искать записи расширения. Каждый элемент

списка содержит 48-битный индекс по MFT (который говорит о том, где находится

запись расширения) и 16-битный порядковый номер (для проверки того, что запись

расширения соответствует базовой записи).

Файлы NTFS имеют связанный с ними идентификатор, который подобен номеру

узла i-node в UNIX. Файлы можно открывать по идентификатору, но присваиваемый

файловой системой NTFS идентификатор не всегда можно использовать, поскольку

он основан на записи MFT и может измениться при перемещении записи для данного

файла (например, если файл восстанавливается из резервной копии). NTFS позволя-

ет использовать отдельный атрибут «идентификатор объекта», который может быть

установлен для файла и который нет необходимости изменять. Его можно сохранить

вместе с файлом (например, если он копируется на новый том).

Точка повторной обработки сообщает разбирающей имя файла процедуре о необходи-

мости сделать что-то особенное. Этот механизм используется для явного монтирования

файловых систем и для символических ссылок. Два атрибута тома используются только

для идентификации томов. Следующие три атрибута работают с реализацией катало-

гов. Маленькие каталоги — это просто списки файлов, а большие реализованы как де-

ревья В+. Атрибут logged utility stream используется шифрующей файловой системой.

п отоку (или потокам)

данных. Файл в NTFS имеет один (или несколько) связанных с ним потоков данных.

Именно здесь находится его полезное содержание. Поток данных по умолчанию

(default data stream) названия не имеет (например, dirpath\filename::$DATA), но аль-

тернативные потоки данных (alternate data stream) имеют имена, например: dirpath\

filename:streamname:$DATA.

Имя каждого потока (если оно имеется) находится в заголовке этого атрибута. Сле-

дом за заголовком идет либо список дисковых адресов (это содержащиеся в потоке

блоки), либо (для потоков всего в несколько сотен байтов, а таких много) сам поток.

Р азмещенные в записи MFT реальные данные потока называются непосредственным

файлом — immediate file



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-08-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: