Выделение дискового пространства




Модель отслеживания дисковых блоков состоит в том, что они выделяются последо-

вательными участками, насколько это возможно. О дним из способов достижения непрерывности этих участков

является выделение дискового пространства по несколько блоков за один раз.

Б локи потока описываются последовательностью записей, каждая их которых опи-

сывает последовательность логически смежных блоков. Для потока без пропусков

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

записаны по порядку с начала и до конца.

Ф айлы с пропусками называются разреженными файлами (sparse files).

Каждая запись начинается с заголовка, в котором дается смещение первого блока

потока. Затем идет смещение первого не описанного данной записью блока.

З а заголовком записи следует одна или несколько пар (в каждой даются дисковый

адрес и длина участка). Дисковый адрес — это смещение дискового блока от начала

раздела, длина участка — это количество блоков в участке. В записи участка может

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

участков и девяти блоков показано на рис. 11.25.

и споль-

зуются две или более записи MFT. На рис. 11.26 мы видим файл, основная запись

которого находится в записи 102 в MFT. Он имеет слишком много (для одной записи

MFT) участков, поэтому вычисляется количество нужных записей расширения (на-

пример, две) и их индексы помещаются в основную запись. Остальная часть записи

используется для первых k участков данных.

Рис. 11.26. Файл, которому требуется три записи MFT для хранения всех его участков

Обратите внимание

Е сли нужно очень много записей MFT, то появляется проблема: может не хватить ме-

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

решение: список записей расширения MFT делается нерезидентным, то есть хранится

в других дисковых блоках (вместо основной записи MFT). В этом случае он может

увеличиваться настолько, насколько это нужно.

Элемент MFT для небольшого каталога показан на рис. 11.27. Запись содержит не-

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

или каталог. Каждый элемент содержит структуру фиксированной длины, за которой

следует имя файла (переменной длины). Фиксированная часть содержит индекс эле-

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

поля и флаги. Поиск элемента каталога состоит из опроса всех имен файлов по очереди.

Большие каталоги используют другой формат. Вместо линейного перечисления файлов

используется дерево В+ (чтобы сделать возможным алфавитный поиск и облегчить

вставку новых имен в нужное место каталога).

В дополнение к обычным файлам и каталогам NTFS поддерживает и жесткие ссылки

(в UNIX-смысле), а также символические ссылки (с использованием механизма под

названием точка повторной обработки — reparse points). NTFS поддерживает помет-

ку файла или каталога как точки повторной обработки и ассоциирование с ней блока

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

рация заканчивается неудачей и диспетчеру объектов возвращается этот блок данных.

Диспетчер объектов может интерпретировать данные как представляющие альтерна-

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

ввода-вывода. Этот механизм используется для поддержки как символических ссылок,

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

часть иерархии каталогов или даже в другой раздел диска.

NTFS поддерживает прозрачное сжатие файлов. Файл может создаваться в сжатом

режиме, а это означает, что NTFS пытается автоматически сжать блоки при их записи

на диск и автоматически распаковывает их при чтении обратно. Те процессы, которые

читают или пишут сжатые файлы, совершенно не в курсе того факта, что происходит

сжатие или распаковка.

Сжатие работает следующим образом. Когда NTFS пишет файл (помеченный как сжа-

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

того, сколько участков они занимают. Затем запускает по ним алгоритм сжатия. Если

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

ваются на диск (по возможности — одним участком). Если сжатые данные по-прежнему

занимают 16 блоков, то эти 16 блоков записываются в несжатом виде. Затем исследуются

блоки 16–31, чтобы узнать, можно ли их сжать до размера 15 блоков (или менее), и т. д.

На рис. 11.28, а показан файл, в котором первые 16 блоков успешно сжались до 8 бло-

ков, вторые 16 блоков не сжались, а третьи 16 блоков также сжались на 50 %. Эти три

части были записаны как три участка и сохранены в записи MFT. «Отсутствующие»

блоки хранятся в элементе MFT с дисковым адресом 0 (рис. 11.28, б). Здесь за заго-

л овком (0, 48) следует пять пар: две для первого (сжатого) участка, одна для несжатого

участка и две для последнего (сжатого) участка.

К огда файл считывается обратно, NTFS должна знать, какие участки сжаты, а какие —

нет. Она может определить это по дисковым адресам. Дисковый адрес 0 указывает

на то, что это последняя часть 16 сжатых блоков. Дисковый блок 0 не может исполь-

зоваться для хранения данных (во избежание неоднозначности). Поскольку блок 0

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

невозможно.

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

NTFS поддерживает два механизма, при помощи которых программы могут обнаружить

изменения в файлах и каталогах. Первый — это операция NtNotifyChangeDirectoryFile,

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

в каталоге или подкаталоге. В результате ввода-вывода буфер заполняется списком

записей об изменениях. Если он очень маленький, записи теряются.

Второй механизм — это журнал изменений NTFS. NTFS содержит список всех записей

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

мы могут читать при помощи специальных операций управления файловой системой

( опция FSCTL_QUERY_USN_JOURNAL вызова NtFsControlFile). Файл журнала обычно

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

очень мала.



Поделиться:




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

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


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