Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
366_Operatsionnye_sistemy_UP_2005.doc
Скачиваний:
105
Добавлен:
03.11.2018
Размер:
1.52 Mб
Скачать

8.5.2. Файловая система типа ntfs

Система NTFS (New Technology File System – файловая система новой технологии) представляет собой новую сложную файловую систему, разработанную специально для Windows NT и перене­сенную в Windows 2000. Эта фай­ловая система не является попыткой улучшить старую файловую систему MS-DOS.

Длина имени файла в системе NTFS ограничена 255 символами, полная длина пути ограничивается 32 767 символами. Файл в системе NTFS – это не просто линейная последовательность байтов, как файлы в системах FAT-32 и UNIX. Вместо этого файл состоит из множества атрибутов, каждый из которых представляется в виде потока байтов. Большинство файлов имеет несколько коротких потоков, таких как имя файла и его 64-битовый идентификатор, плюс один длинный (неименованный) поток с данными. Однако у файла может быть и несколько длинных потоков данных. У каждого потока своя длина. Каждый поток может блокировать­ся независимо от остальных потоков. Максимальная длина потока составляет 16 экзабайт (2 в степени 64 байт). Для отслеживания местонахождения процесса в каждом потоке используются 64-разрядные файловые указатели.

Вызовы функций Win32 API для управления файлами и каталогами в первом приближении подобны соответствующим им в UNIX, но у функций Win32 API больше параметров и другая модель безопасности. Процедура откры­тия файла возвращает дескриптор файла, который затем может использоваться для чтения этого файла или записи в файл. Для графических приложений заранее не определены указатели в файлах. Стандартные потоки ввода, вывода и сообщений об ошибках при необходимости должны открываться явно. Однако в консольном режиме они открываются заранее. Интерфейс Win32 также содержит ряд допол­нительных вызовов, отсутствующих в системе UNIX.

Каждый том NTFS (то есть дисковый раздел) содержит файлы, каталоги, битовые массивы и другие структуры данных. Каждый том организован как линейная последовательность блоков (кластеров по терминологии Microsoft). Размер блока фиксирован для каждого тома и варьируется в пределах от 512 байт до 64 Кбайт, в зависимости от размера тома. Для большинства дисков NTFS используются блоки размером в 4 Кбайт как компромисс между большими блоками (для эф­фективности операций чтения/записи) и маленькими блоками (для уменьшения потерь дискового пространства на внутреннюю фрагментацию). Обращение к бло­кам осуществляется по их смещению от начала тома, для которого используются 64-разрядные числа.

Главной структурой данных в каждом томе является главная файловая табли­ца MFT (Master File Table), представляющая собой линейную последовательность записей фиксированного (1 Кбайт) размера. Каждая запись MFT описывает один файл или один каталог. В ней содержатся атрибуты файла, такие как его имя и временные штампы, а также список дисковых адресов, указывающих на располо­жение блоков файла. Если файл очень большой, то иногда бывает необходимо ис­пользовать две и более записей главной файловой таблицы, чтобы вместить спи­сок всех блоков файла. В этом случае первая запись MFT, называемая базовой записью, указывает на другие записи MFT.

Сама главная файловая таблица представляет собой файл и, как и любой файл, может располагаться в любом месте тома, тем самым устраняется проблема дефект­ных секторов на первой дорожке дискового раздела. Кроме того, этот файл может при необходимости возрастать до максимального размера в 248 записей.

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

Каждая запись MFT состоит из последовательности пар (заголовок атрибута, значение). Каждый атрибут начинается с заголовка, идентифицирующего этот атрибут и сообщающе­го длину значения, так как некоторые атрибуты, например имя файла или данные, могут иметь переменную длину. Если значение атрибута достаточно короткое, что­бы поместиться в запись MFT, оно помещается туда. Если же это значение слиш­ком длинное, оно располагается в другом месте диска, а в запись MFT помещается указатель на него. Первые 16 записей MFT зарезервированы для файлов метаданных NTFS. Каждая запись описывает нормальный файл, у которого есть атрибуты и блоки данных, как у любого файла. У каждого такого файла есть имя, начинающееся с символа доллара, указывающего на то, что это файл мета­данных. Первая запись описывает сам файл MFT. В частности, она содержит ин­формацию о расположении блоков файла MFT, что позволяет системе найти файл MFT. Очевидно, чтобы найти всю остальную информацию о файловой системе, у операционной системы Windows 2000 должен быть некий способ нахождения первого блока файла MFT. Номер первого блока файла MFT содержится в загру­зочном блоке, куда он помещается при установке системы.

Запись 1 представляет собой дубликат первой части файла MFT. Эта инфор­мация является настолько ценной, что наличие второй копии может быть необхо­димо на случай, если один из первых блоков главной файловой таблицы вдруг ста­нет дефектным. Запись 2 представляет собой журнал. Когда в файловой системе производятся структурные изменения, такие как добавление нового каталога или удаление существующего каталога, информация о предстоящей операции реги­стрируется в журнале. Таким образом, увеличивается вероятность корректного восстановления файловой системы в случае сбоя во время выполнения операции. Изменения атрибутов файлов также регистрируются здесь. В этом журнале не регистрируются только изменения данных пользователя. В записи 3 содержится информация о томе, например его размер, метка и версия.

Как уже отмечалось, каждая запись MFT содержит последо-вательность пар (заголовок атрибута, значение). Файл $AttrDef является тем местом, в котором определяются атрибуты. Информация об этом файле хранится в записи 4 табли­цы MFT. В следующей записи содержатся данные о корневом каталоге, который сам представляет собой файл и может произвольно увеличиваться в размерах. Он описывается записью 5 главной файловой таблицы.

Свободное место на диске учитывается с помощью битового массива. Битовый массив сам является файлом, и его атрибуты и дисковые адреса хранятся в запи­си 6 таблицы MFT. Следующая запись таблицы MFT указывает на файл начальной загрузки. Запись 8 используется для того, чтобы связать вместе все дефектные блоки и гарантировать, что они никогда не встретятся в файлах. Запись 9 содер­жит информацию о защите. Запись 10 используется для преобразования регистра. Наконец, запись 11 представляет собой каталог, содержащий раз­личные файлы для дисковых квот, идентификаторов объектов, точек повторного анализа и т. д. Последние четыре записи MFT зарезервированы на будущее.

Каждая запись MFT состоит из заголовка записи, за которым следует после­довательность пар (заголовок атрибута, значение). Заголовок записи содержит: магическое число, используемое для проверки действительности записи; поряд­ковый номер, обновляемый каждый раз, когда запись используется для нового файла; счетчик обращений к файлу; действительное количество байт, использу­емых в записи; идентификатор (индекс, порядковый номер) базовой записи (используемый только для записей расширения), а также другие различные поля. Следом за заголовком записи располагается заголовок первого атрибута, за кото­рым идет значение первого атрибута, потом заголовок второго атрибута, значение второго атрибута и т. д.

В файловой системе NTFS определено 13 атрибутов, которые могут появ­ляться в записях MFT. Все записи таблицы MFT состоят из последовательности заголовков атрибутов, каждый из которых иден­тифицирует следующий за ним атрибут, а также содержит длину и расположе­ние поля значения вместе с разнообразными флагами и прочей информацией. Как правило, значения атрибутов располагаются непосредственно за заголовками, но если длина значения слишком велика, чтобы поместиться в запись таблицы MFT, она может быть помещена в отдельный блок диска. Такой атрибут называ­ется нерезидентным атрибутом. Например, таким атрибутом является атрибут данных. Некоторые атрибуты, такие как атрибуты имени, могут повторяться, но все атрибуты должны располагаться в записи MFT в фиксированном поряд­ке. Длина заголовков резидентных атрибутов 24 байт, заголовки для нерезидент­ных атрибутов длиннее, так как они содержат информацию о месте расположения атрибута.

Стандартное информационное поле содержит сведения о владельце файла, ин­формацию о защите, временные штампы (необходимые для стандарта POSIX), счет­чик жестких связей, бит «только чтение», архивный бит и т. д. Это поле имеет фик­сированную длину, и оно всегда присутствует.

В операционной системе Windows NT 4.0 информация о защите файла могла содержать­ся в атрибуте файла, но в Windows 2000 эти данные хранятся в отдельном файле, что позволяет нескольким файлам совместно пользоваться общими описателями защиты. Список атрибутов нужен на случай, если атрибуты не помещаются в за­пись MFT. Каждая запись в списке содержит 48-разрядный индекс в таблице MFT, указывающий на запись расширения, а также 16-разрядный порядковый номер, позволяющий проверить соответствие записи расширения и базовой записи.

Атрибут «идентификатор объекта» задает файлу уникальный номер. Иногда он используется внутри системы. Точка повторного анализа велит процедуре, анализирующей имя файла, выполнить специальные действия. Этот механизм применя­ется для монтирования устройств и символьных ссылок. Два следующих атрибу­та используются только для идентификации тома. Еще три атрибута используют­ся для реализации каталогов. Небольшие каталоги представляют собой простые списки файлов, но большие каталоги реализуются в виде деревьев. Поток дан­ных утилиты регистрации используется шифрующей файловой системой.

Имя потока данных, если оно присутствует, располагается в заголов­ке атрибута данных. Следом за этим заголовком располагается либо список дисковых ад­ресов, определяющий положение файла на диске, либо сам файл (для небольших файлов длиной в несколько сотен байтов). Метод по­мещения самого содержимого файла в запись MFT называется непосредственным файлом.

Для увеличения эффективности дисковые блоки файлам назначаются по воз­можности в виде серий последовательных блоков (сегментов файла). Например, если первый логический блок файла помещается в блоке 20 на диске, тогда систе­ма будет стараться выделить для второго блока этого файла блок 21, для третье­го – блок 22 и т. д. Один из способов выделения файлам таких серий блоков за­ключается в том, чтобы предоставлять файлам сразу по несколько блоков.

Блоки в файле описываются последовательностью записей, каждая из которых описывает последовательность логически непрерывных блоков. Непрерывный файл описывается всего одной записью. К этой категории относятся файлы, за­писываемые за одну операцию от начала до конца. Файл с одной «дыркой» (на­пример файл, для которого определены только блоки с 0 по 49 и с 60 по 79), будет описываться двумя записями. Такой файл может быть создан, если сначала запи­сать в него первые 50 блоков, затем переместить указатель в файле на логический блок 60 и записать еще 20 блоков. Когда из такого файла читается «дырка», все отсутствующие байты оказываются нулями.

Каждая запись начинается с заголовка, определяющего смещение первого бло­ка в файле. Затем располагается смещение первого блока, не покрываемого пер­вой записью. Следом за каждым заголовком располагаются пары, в которых содержатся дисковые адреса и длины серий блоков. Эти дисковые адреса представляют собой смещение блока от начала дискового раздела. Длина серии – это количество бло­ков в серии. В записи серии может содержаться любое необходимое количество пар.

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

Запись MFT для небольшого каталога со­держит несколько каталоговых записей, каждая из которых описывает файл или каталог. Фиксированная часть содержит индекс записи MFT файла, длину имени файла, а также другие разнообразные поля и флаги. Поиск файла в каталоге по имени состоит в последовательном переборе всех имен файлов. Для больших каталогов используется другой формат. Вместо того чтобы линей­но перечислять файлы, используется дерево, обеспечивающее поиск в алфа­витном порядке и упрощающее добавление в каталог новых имен в соответству­ющие места.

Помимо обычных файлов и каталогов, файловая система NTFS поддерживает жесткие связи, подобные используемым в UNIX, а также символьные ссылки при помощи механизма, называемого точками повторного анализа. Файл или каталог может быть помечен как точка повторного анализа, и с ним может быть ассоци­ирован блок данных. Когда во время анализа имени файла встречается такой файл или каталог, срабатывает обработка исключения и интерпретируется блок данных. Блок может выполнять различные действия, включая переадресацию поиска, ссы­лаясь на другую часть дерева каталогов или даже на другой дисковый раздел. Этот механизм используется для поддержки как символьных ссылок, так и монтиров­ки файловых систем.

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

Сжатие данных файла происходит следующим образом. Когда файловая сис­тема NTFS записывает на диск файл, помеченный для сжатия, она изучает первые 16 логических блоков файла, независимо от того, сколько сегментов на диске они занимают. Затем к этим блокам применяется алгоритм сжатия. Если полученные на выходе блоки могут поместиться в 15 или менее блоков, то сжатые данные за­писываются на диск, предпочтительно в виде одного сегмента. Если получить вы­игрыш хотя бы в один блок не удается, то данные 16 блоков так и записываются в несжатом виде. Затем весь алгоритм повторяется для следующих 16 блоков и т. д.

В операционной системе Windows 2000 предусмотрена возможность шифрования файлов. Чтобы использовать шифрование в операционной системе Windows 2000, нужно пометить каталог как зашифрованный, в результате чего будут зашифрованы все файлы в этом каталоге, а все новые файлы, перемещен­ные в этот каталог или созданные в нем, также будут зашифрованы. Само шифро­вание и дешифрование выполняется не файловой системой NTFS, а специальным драйвером EPS (Encrypting File System – шифрующая файловая система), разме­щающимся между NTFS и пользовательским процессом. Таким образом, приклад­ная программа не знает о шифровании, а сама файловая система NTFS только частично вовлечена в этот процесс.