Подготовка жесткого диска к работе с файловой системой NTFS.
При форматировании тома под NTFS создаются таблица MFT (Master File Table – главная файловая таблица) и метаданные. Каждый занятый сектор тома NTFS принадлежит файлу. Даже метаданные файловой системы являются частью файла. NTFS рассматривает каждый файл или каталог как набор атрибутов. Том NTFS условно делится на две части (см. рис.1). Первые 12% диска отводятся под так называемую MFT зону - пространство, в которое растет метафайл $MFT (это делается для того, чтобы самый главный, служебный файл (MFT) не фрагментировался при своем росте). Остальные 88% диска представляют собой обычное пространство для хранения файлов.
Рис. 1. Использование пространства жесткого диска под том NTFS
Свободное место диска, однако, включает в себя всё физически свободное место в том числе и незаполненные части MFT-зоны. Самый главный файл на томе NTFS - файл $MFT размещается в MFT-зоне и представляет собой централизованный источник информации о размещении всех остальных файлов диска и самого себя. $MFT поделен на записи фиксированного размера (обычно 1 Кбайт), и каждая запись соответствует какому либо файлу (в обобщенном смысле) или хранит сам файл (небольшой).
NTFS включает несколько системных файлов (метафайлов), которые скрыты от просмотра на томе. Системные файлы используются только файловой системой для хранения метаданных и поддержания работы файловой системы. Системные файлы записываются на том утилитой Format. Метаданные представляют собой файлы, которые NTFS использует для реализации структуры файловой системы. NTFS резервирует для метаданных первые 16 записей в $MFT. Эти первые 16 файлов носят служебный характер недоступные операционной системе - называются метафайлами (см. табл. 1). Остальные записи файла $MFT описывают файлы и каталоги. Самый первый метафайл - сам $MFT. Эти первые 16 записей $MFT - единственная часть диска, имеющая фиксированное положение. Вторая копия этих же 16 записей, для надежности хранится в центральной зоне диска в виде файла $MFTMirr.
Таблица 1. Системные файлы NTFS
Метафайлы (первые 16 файлов NTFS) носят служебный характер. Каждый из них отвечает за какую-либо часть работы системы. NTFS может сместить, даже фрагментировать по диску, все свои служебные области (для обхода любых неисправностей поверхности) кроме первых 16 элементов MFT. Метафайлы находятся корневом каталоге NTFS диска их имена начинаются с символа "$". Получить какую-либо информацию о них стандартными средствами сложно. Для этих файлов указан реальный размер и можно узнать, например, сколько операционная система тратит на каталогизацию всего диска, посмотрев размер файла $MFT.
Любой том NTFS содержит загрузочный сектор. Главная загрузочная запись жесткого диска (МВR – Master Boot Record) не зависит от конкретной операционной системы, но загрузочный сектор раздела определяется конкретной операционной системой и используемой файловой системой. Загрузочный сектор начинается с нулевого сектора раздела, он может занимать до 16 секторов и состоит из двух частей:
- блок параметров BIOS содержит сведения о структуре тома и структурах файловой системы;
- код программы, которая распознает используемую операционную систему и, используя ее, загружает в память файл Ntldr (загрузчик операционной системы), который «знает» как найти системные файлы для загрузки операционной системы (загрузочный раздел, который содержит файлы операционной системы Windows, может совпадать с системным разделом, но может находиться и в другом разделе того же жесткого диска или даже на другом жестком диске).
Для каждого каталога и файла на томе NTFS в файле $MFT создается соответствующая запись. $MFT также содержит отдельную запись (с номером 0) о самом $MFT. NTFS использует записи $MFT для описания соответствующих им файлов. Обычно каждый файл определяется одной записью. Если же файл имеет большое количество атрибутов или сильно фрагментирован, может понадобиться больше записей. В этом случае первая запись файла (базовая) содержит ссылку на следующую. Небольшой файл (до 1 500 байт) целиком хранится в записи MFT (см. рис.2). Возможность восстановления файлов из поврежденных разделов NTFS во многом определяется целостностью таблицы MFT и ее копии. В таблице MFT имена файлов хранятся в кодировке Unicode.
Рис. 2. Структура записи файла $MFT определяющей небольшой файл или каталог
Подобный подход обеспечивает очень быстрый доступ к файлам. Нулевая запись таблицы описывает непосредственно главную файловую таблицу. За ней следует зеркальная запись (mirror record) $MFT. При искажении первой записи $MFT файловая система считывает эту запись, чтобы найти метафайлы.
Местоположение начальных кластеров файла $MFT и зеркального файла $MFTMirr записаны в полях BPB сектора начальной загрузки. Семнадцатая и последующие записи главной файловой таблицы определяют собственно файлы и каталоги на томе. В NTFS поиск файла производится только для непосредственного его использования. Записи каталога помещены внутри главной файловой таблицы так же, как записи файла. Вместо данных каталоги содержат индексную информацию. Небольшие записи каталогов находятся полностью внутри структуры записи $MFT. Большие каталоги организованы в B-tree (эффективный способ адресации - бинарное дерево B-tree), имея записи с указателями на внешние кластеры, содержащие элементы каталога, которые не могли быть записаны внутри структуры записи $MFT.
Для проведения работ диск подключили к компьютеру вторым жестким диском. Операционная система присвоила данному диску номер один (см. рис. 3). Сама операционная система загрузилась в оперативную память с жесткого диска с номером ноль.
Рис. 3. Отображение состояния нового диска программой управления дисками из меню управления компьютером
Обычно новый диск из магазина содержит во всех байтах блоков данных всех секторов код 00h. В этом конкретном случае начальный физический сектор жесткого содержал информацию (см. рис. 4). Содержимое блока данных начального сектора HDD (и сам этот сектор) часто называют MasterBoot-Sector или сокращенно MBS. Обычно блок данных этого сектора содержит программу загрузчика операционной системы (IPL 1), таблицу разбиения диска на части (таблицу разделов – Partition Table) и кодовую последовательность для секторов, содержащих программы выполняемые процессором до загрузки в оперативную память главного файла ядра операционной системы (сигнатуру или иначе подпись 55ААh).
Программа IPL 1 начинается в блоке данных MBS с нулевого адреса и может занимать пространство до байта c адресом 1BEh. Первые два байта блока данных сектора содержат код 33 C0 (шестнадцатеричная система счисления), который для процессора является машинным кодом команды XOR AX,AX (ассемблер). На рис. 4 в правой части рисунка можно увидеть тексты сообщений программы IPL 1, которые могут появиться на экране монитора при выполнении процессором данной программы (сообщения об ошибках). С адреса байта 1BE в блоке данных сектора записаны 64 байта нулей. Этот место отведено для записи таблицы разделов. Как видим таблица разделов отсутствует на рис. 4 (об этом нам сообщила программы управления дисками из меню управления компьютером: «диск 1 размером 111,79 ГБ не распределен»). За областью таблицы разделов с адреса 1FE мы видим два байта сигнатуры с кодами 55h и ААh.
Рис. 4. Отображение программой NtExplorer содержимого блока данных сектора LBA 0 жесткого диска в шестнадцатеричной системе счисления.
Для использования физического пространства жесткого диска операционной системой создадим таблицу разделов и логический том программами мастера создания разделов. Сообщения программы отображены последовательно на рисунках (см. рис. 5а по рис. 5е).
После создания таблицы разделов выполнили логическое форматирование физического пространства жесткого диска, т.е. создали файловую систему NTFS (сообщения см. рис. 6).
Рис. 6. Отображение процесса форматирования нового диска программой управления дисками из меню управления компьютером
По окончании логического форматирования на жестком диске был создан системная часть раздела занимающая 67,9 МБ (на диске занято 71 237 632 байта). Для пользователя объем свободного пространства равна 119 960 240 128 байт или 111 ГБ (см. рис. 7).
Рис. 7. Отображение состояния логического диска G: «Новый том» программой свойства жесткого диска.
Описание байтов четырех элементов таблицы разделов показано на рис. 8. Логический том «Новый том» начинается с сектора LBA 63 и занимает 234 436 482 физических секторов (см. рис. 9). Сектор LBA 63 является начальным сектором логического диска и его английское название Boot Sector. Нумерация логических секторов начинается с цифры 0.
Рис. 8. Описание программой NtExplorer таблицы
разделов в MBS(сектор LBA 0 жесткого диска)
Рис. 9. Описание программой NtExplorer раздела физического диска на котором создан логический том с файловой системой NTFS
Два способа отображения начального сектора логического диска (Boot sector) программой NtExplorer показано на рисунках 10, 11, 12, 13. Логический диск «G:», обозначенный по умолчанию меткой (Label) «Новый том» имеет размер (Size) 234 436 480 секторов. На данном пространстве жесткого диска установлена файловая система NTFS с размером кластера по умолчанию равным 8 секторам (см. рис. 10, 11). Описание программой NtExplorer состояния логического тома созданного на жестком диске см. на рис. 12. Нумерация кластеров в данной файловой системе начинается с цифры 0. Системная информация раздела NTFS содержится в системных файлах (метафайлах), которые недоступны и невидимы для пользователей. После загрузочного сектора (Boot Sector) системная часть логического диска – метафайлы (Boot Sector тоже является частью метафайла $BOOT) - размещается с логического сектора 1(см. рис. 13). Системная часть логического диска содержащая корневой каталог (тоже метафайл) показана на рисунке 14. На рисунке 15 показано описание записей метафайла $MFT программой NtExplorer.
Подготовленный жесткий диск установили пользователю в ноутбук вместо старого. Осталось только установить операционную систему.
Рис. 10. Описание программой NtExplorer содержимого байтов блока параметров BIOS (BPB) сектора LBA 63 жесткого диска (Boot Sector - начальный сектор 0 логического тома жесткого диска). Здесь мы видим и номер начального кластера файла $MFT, который является основой хранения информации в виде файлов NTFS
(1 st MFT claster: x000C0000 786432).
Рис. 11. Отображение программой NtExplorer сектора LBA 3F (63) жесткого диска в шестнадцатеричной системе счисления (Boot Sector - начальный сектор 0 логического тома жесткого диска).
Рис. 12. Описание программой NtExplorer состояния логического тома созданного на жестком диске.
Рис. 13. Отображение программой NtExplorer логического сектора 1 (в шестнадцатеричной системе счисления).
Рис. 14. Описание программой NtExplorer корневого каталога логического тома с файловой системой NTFS
(можно видеть из строки « . x5[x5] DIR …», что пятая запись файла $MFT определяет файл корневого каталога с именем «.»).
Рис. 15. Описание программой NtExplorer записей метафайла $MFT, запись с номером 0 определяет сам метафайл $MFT. Как видим, каждая запись определяет свой метафайл или файл и занимает 1024 байта т.е. два сектора (например, запись определяющая метафайл $MFTMirr занимает секторы 00600002 и 00600003).