- •Глава 1
- •1.1.1 Восстанавливаемость
- •1.1.2 Защита от несанкционированного доступа
- •1.1.3 Избыточность данных и отказоустойчивость
- •1.1.4 Диски и файлы большого объема
- •1.2 Новые возможности ntfs
- •1.2.1 Множественные потоки данных
- •1.2.2 Имена в unicode
- •1.2.3 Универсальное средство индексации
- •1.2.4 Переназначение плохих кластеров
- •1.2.5 Поддержка posix
- •1.2.6 Сменные диски
- •Глава 2
- •2.1 Многоуровневая модель драйвера
- •2.2 Модели реляционной базы данных и обработки транзакций
- •2.3 Объектная модель
- •Глава 3
- •3.2 Структура на диске
- •3.3 Индексация имен файлов
- •3.4 Файлы метаданных ntfs и загрузочный файл
3.2 Структура на диске
Как было показано на предыдущих рисунках, ряды (файловые записи) MFT отвечают файлам на томе NTFS, а колонки — атрибутам файлов. Вся информация файла хранится в его атрибутах, и таким образом, ряды и колонки MFT описывают всю информацию, хранящуюся на томе NTFS. Размер файловых записей MFT для тома — минимум 1 Кбайт и максимум 4 Кбайт — определяется во время его форматирования.
Атрибуты файла в записях MFT расположены в порядке возрастания числовых значений кодов типа, причем некоторые типы атрибутов могут встречаться в записи более одного раза: например, если у файла есть несколько атрибутов данных или несколько имен. На рис. 3-5 показаны атрибуты, которые обязательны для каждого файла: атрибут стандартной информации, атрибут имени файла, атрибут дескриптора защиты и атрибут данных. В записи MFT могут встречаться и другие атрибуты, если они необходимы для данного файла.
Каждый атрибут в файловой записи имеет имя (необязательное) и значение. Имена используются в основном с атрибутами данных для идентификации второго или третьего потока данных в файле. Значение атрибута — это поток байтов, составляющих его. Например, значение атрибута $FILENAME — это имя файла; значение атрибута IDATA — это произвольный набор байтов, сохраненных пользователем в этом файле. Для маленького файла все его атрибуты и их значения (например, данные файла) умещаются в файловой записи. Если значение атрибута хранится непосредственно в MFT, он называется резидентным атрибутом (resident attribute). (На рис. 3-5 все атрибуты — резидентные.)
В начале каждого атрибута расположен стандартный заголовок, содержащий информацию о данном атрибуте, которую NTFS использует для стандартной обработки всех типов атрибутов. Заголовок, который всегда является резидентным, содержит информацию о том, является ли атрибут резидентным или нерезидентным. В случае резидентного атрибута заголовок содержит также сме-
ОСНОВЫ ФАЙЛОВОЙ
СИСТЕМЫ NTFS
Рис. 3-6 Заголовок и значение резидентного атрибута.
щение значения атрибута относительно заголовка и длину этого значения, как показано на рис. 3-6 для атрибута-имени файла.
Если значение атрибута хранится непосредственно в MFT, время, необходимое NTFS для доступа к нему, значительно сокращается. Вместо того, чтобы искать файл в таблице и затем считывать цепочку кластеров для поиска данных файла (как это делается, например, в файловой системе FAT), NTFS обращается к диску только один раз и немедленно считывает данные.
Атрибуты небольшого каталога, подобно атрибутам небольшого файла, могут быть резидентными в MFT, как показано на рис. 3-7. В случае небольшого каталога атрибут корня индекса содержит индекс файловых ссылок для файлов и подкаталогов.
Рис. 3-7. Файловая запись MR для небольшого каталога.
Конечно, многие файлы и каталоги не удается втиснуть в запись MFT — структуру данных размером 1, 2 или 4 Кбайт. Если некоторый атрибут, например, атрибут данных файла, слишком велик, чтобы поместиться в файловую запись MFT, то NTFS выделяет на диске область размером 2 Кбайт2, отделенную от MFT. В этой области, называемой отрезком (run), или экстентом (extent), хранится значение атрибута (например, данные файла). Если затем размер значения атрибута увеличивается (допустим, если пользователь дописывает к концу файла новые данные), то для дополнительных данных NTFS выделяет еще один отрезок Атрибуты, значения которых хранятся не в MFT, а в отрезках, называются нерезидентными атрибутами (nonresident attributes). ФС определяет, является ли данный атрибут резидентным или нерезидентным; способ размещения данных прозрачен для программы, осуществляющей доступ к ним.
4 Кбайт, если размер кластера равен 4 Кбайт.
Рис. 3-в. Файловая запись MFT для большого файла с двумя отрезками данных.
В случае нерезидентного атрибута, такого, каким должен быть атрибут данных большого файла, его заголовок содержит информацию, необходимую NTFS для поиска значения атрибута на диске. На рис. 3-8 изображен нерезидентный атрибут данных, хранящийся в двух отрезках.
Только те из стандартных атрибутов, размер которых может возрастать, бывают нерезидентными. Для файла такие атрибуты — это дескриптор защиты, данные, список атрибутов (не показан на рис. 3-8) и расширенные атрибуты HPFS. Атрибуты стандартной информации и имени файла всегда резидентные.
Большой каталог также может иметь нерезидентные атрибуты (или части атрибутов), как показано на рис. 3-9. В этом примере в файловой записи MFT недостаточно места для хранения индекса файлов, составляющих этот большой каталог. Часть индекса хранится в атрибуте корня индекса, а его остаток находится в нерезидентных отрезках, называемых индексными буферами (index buffers). Атрибуты корня индекса, размещения индекса и битовой карты показаны здесь упрощенно (более подробно они описаны ниже). Атрибуты стандартной информации и имени файла всегда резидентные. Заголовок и, по крайней мере, часть значения атрибута корня индекса для каталогов также резидентные.
Рис.
3-9. Файловая
запись MFT для большого каталога с
нерезидентным индексом имен файлов.
Рис. 3-10. Виртуальные номера кластеров (VCN) для нерезидентного атрибута данных.
Если бы этот файл занимал более двух отрезков, то нумерация третьего отрезка начиналась бы с VCN 8. Как показано на рис. 3-11, заголовок атрибута данных содержит отображение VCN в LCN для обоих отрезков, что позволяет NTFS легко находить данные на диске.
Рис.
3-11. Отображение VCN-LCN для нерезидентного
атрибута данных.