Восстановление данных - страница 58

Шрифт
Интервал

стр.

(allocated size), находящееся по смещению >1Ch байт от начала сектора, содержит действительный размер файловой записи в байтах, округленный по размеру сектора. Документация Linux-NTFS Project (версия 0.4) утверждает, что выделенный размер должен быть кратен размеру кластера, но на практике это не так. Например, на моей машине длина поля выделенного размера равна четверти кластера.

16-разрядное поле флагов, находящееся по смещению >16h байт от начала сектора, в подавляющем большинстве случаев принимает одно из следующих трех значений: >00h — данная файловая запись не используется или ассоциированный с ней файл или каталог удален, >01h — файловая запись используется и описывает файл, >02h — файловая запись используется и описывает каталог.

64-разрядное поле, находящееся по смещению >20h байт от начала сектора, содержит индекс базовой файловой записи. Для первой файловой записи это поле всегда равно нулю, а для всех последующих, расширенных записей — индексу первой файловой записи. Расширенные файловые записи могут находиться в любых областях MFT, не обязательно расположенных рядом с основной записью. Следовательно, необходим какой-то механизм, обеспечивающий быстрый поиск расширенных файловых записей, принадлежащих данному файлу (просматривать всю MFT было бы слишком нерационально). Этот механизм существует, и основан он на ведении списков атрибутов (>$ATTRIBUTE_LIST). Список атрибутов представляет собой специальный атрибут, добавляемый к первой файловой записи и содержащий индексы расширенных записей. Формат списка атрибутов будет подробно описан далее в этой главе.

Основные поля заголовка файловой записи описаны в табл. 6.3. Остальные поля заголовка файловой записи не столь важны, и поэтому здесь они не рассматриваются. При необходимости обращайтесь к документации "Linux-NTFS Project".


Таблица 6.3. Структура заголовка файловой записи (FILE Record)

СмещениеРазмер (байт)ОСОписание
>00h4ЛюбаяСигнатура >FILE
>04h2ЛюбаяСмещение номера последовательности обновления (update sequence number)
>06h2ЛюбаяРазмер (в словах) номера последовательности обновления и массива обновления (Update Sequence Number & Array), условно >S
>08h8ЛюбаяНомер последовательности файла транзакций (>$LogFile Sequence Number или LSN)
>10h2ЛюбаяНомер последовательности (sequence number)
>12h2ЛюбаяСчетчик жестких ссылок (hard link)
>14h2ЛюбаяСмещение первого атрибута
>16h2ЛюбаяФлаги
ЗначениеОписание
>0x00Файловая запись не используется
>0x01Файловая запись используется и описывает файл
>0x02Файловая запись используется и описывает каталог
>0x04За справками обращайтесь к Биллу Гейтсу — вероятно, только он это знает
>0x08За справками обращайтесь к Биллу Гейтсу — вероятно, только он это знает
>18h4ЛюбаяРеальный размер (real size) файловой записи
>1Ch4ЛюбаяВыделенный размер (allocated size) файловой записи
>20h8ЛюбаяСсылка (file reference) на базовую файловую запись (base FILE record) или ноль, если данная файловая запись является базовой
>28h2ЛюбаяИдентификатор следующего атрибута (next attribute ID)
>2Ah2Windows XPИспользуется для выравнивания
>2Ch4Windows XPИндекс данной файловой записи (number of this MFT record)
2ЛюбаяНомер последовательности обновления (update sequence number)
2>S-2ЛюбаяМассив последовательности обновления (update sequence array)

Последовательность обновления

Будучи очень важными компонентами файловой системы, >$MFT, >INDEX и >$LogFile нуждаются в механизме контроля целостности своего содержимого. Традиционно для этого используются коды обнаружения и коррекции ошибок (ECC/EDC codes). Однако на тот момент, когда проектировалась NTFS, процессоры были не настолько быстрыми, как теперь, и расчет корректирующих кодов занимал значительное время, существенно снижающее производительность файловой системы. Именно поэтому от использования корректирующих кодов пришлось отказаться. Вместо них разработчики NTFS применили так называемые последовательности обновления (update sequences), также называемые fix-ups.

В конец каждого из секторов, слагающих файловую запись (>INDEX Record, >RCRD Record или >RSTR Record), записывается специальный 16-байтный


стр.

Похожие книги