Восстановление данных. Практическое руководство
Шрифт:
Атрибут полного имени файла хранит имя файла в соответствующем пространстве имен. Таких атрибутов у файла может быть и несколько (например, имя Win32
Структура атрибута полного имени приведена в табл. 6.9.
Таблица 6.9. Структура атрибута
Смещение | Размер | Описание |
---|---|---|
– - | Стандартный атрибутный заголовок (standard attribute header) | |
00h | 8 | Ссылка (file reference) на материнский каталог |
08h | 8 | C — время создания (creation) файла |
10h | 8 | A — время последнего изменения (altered) файла |
18h | 8 | M — время последнего изменения файловой записи (MFT changed) |
20h | 8 | R — время последнего чтения (read) файла |
28h | 8 | Выделенный размер (allocated size) файла |
30h | 8 | Реальный размер (real size) файла |
38h | 4 | Флаг (см. табл. 6.7) |
3Ch | 4 | Используется HPFS |
40h | 1 | Длина имени в символах — L |
41h | 1 | Пространство имен файла (filename namespace) |
42h | 2L | Имя файла в формате UNICODE без завершающего нуля |
Списки отрезков
Тела нерезидентных атрибутов хранятся на диске в одной или нескольких кластерных цепочках, называемых отрезками (runs). Отрезком называется последовательность смежных кластеров, характеризующаяся номером начального кластера и длиной. Совокупность отрезков называется списком (run-list или data run).
Внутренний формат представления списков не то, чтобы сложен, но простым его тоже на назовешь. Для экономии места длина отрезка и номер начального кластера хранятся в полях переменной длины. Если размер отрезка умещается в байт (т.е. его значение не превышает 255), то он займет один байт. По аналогии, если размер отрезка требует для своего представления двойного слова, то он займет двойное слово.
Сами же поля размеров хранятся в 4-битных ячейках, называемых нибблами (nibble) или полубайтами. Шестнадцатеричная система счисления позволяет легко переводить байты в нибблы и наоборот. Младший ниббл равен (
Список отрезков представляет собой массив структур, каждая из которых описывает характеристики "своего" отрезка. Структура элемента списка отрезков показана в табл. 6.10. В конце списка находится завершающий ноль. Первый байт структуры состоит из двух нибблов: младший задает длину поля начального кластера отрезка (условно обозначаемого буквой
Таблица 6.10. Структура одного элемента списка отрезков
Смещение в нибблах | Размер в нибблах | Описание |
---|---|---|
0 | 1 | Размер поля длины ( L ) |
1 | 1 | Размер поля начального кластера ( S ) |
2 | 2* L | Количество кластеров в отрезке |
2+2* L | 2* S | Номер начального кластера отрезка |
Покажем, как с этим работать на практике. Предположим, что мы имеем следующий список отрезков, соответствующий нормальному не фрагментированному файлу (что может быть проще!):
Начнем с первого байта —
Рассмотрим более сложный пример фрагментированного файла со следующим списком отрезков:
Таким образом, подопытный файл состоит из трех отрезков, разбросанных по диску в следующем живописном порядке:
Начиная с версии 3.0, NTFS поддерживает разреженные (sparse) атрибуты, т.е. такие атрибуты, которые не записывают на диск кластеры, содержащие одни нули. При этом поле номера начального кластера отрезка может быть равным нулю, что означает, что данному отрезку не выделен никакой кластер. Поле длины содержит количество кластеров, заполненных нулями. Их не нужно считывать с диска. Вы должны самостоятельно изготовить их в памяти. Между прочим, далеко не все дисковые доктора знают о существовании разреженных атрибутов (если атрибут разрежен, его флаг равен