Восстановление данных. Практическое руководство
Шрифт:
Длина файловой записи хранится в двух полях. Тридцатидвухразрядное поле реального размера (real size), находящееся по смещению
16-разрядное поле флагов, находящееся по смещению
64-разрядное поле, находящееся по смещению
Основные поля заголовка файловой записи описаны в табл. 6.3. Остальные поля заголовка файловой записи не столь важны, и поэтому здесь они не рассматриваются. При необходимости обращайтесь к документации "Linux-NTFS Project".
Таблица 6.3. Структура заголовка файловой записи (FILE Record)
Смещение | Размер (байт) | ОС | Описание |
---|---|---|---|
00h | 4 | Любая | Сигнатура FILE |
04h | 2 | Любая | Смещение номера последовательности обновления (update sequence number) |
06h | 2 | Любая | Размер (в словах) номера последовательности обновления и массива обновления (Update Sequence Number & Array), условно S |
08h | 8 | Любая | Номер последовательности файла транзакций ( $LogFile Sequence Number или LSN) |
10h | 2 | Любая | Номер последовательности (sequence number) |
12h | 2 | Любая | Счетчик жестких ссылок (hard link) |
14h | 2 | Любая | Смещение первого атрибута |
16h | 2 | Любая | Флаги |
Значение | Описание | ||
0x00 | Файловая запись не используется | ||
0x01 | Файловая запись используется и описывает файл | ||
0x02 | Файловая запись используется и описывает каталог | ||
0x04 | За справками обращайтесь к Биллу Гейтсу — вероятно, только он это знает | ||
0x08 | За справками обращайтесь к Биллу Гейтсу — вероятно, только он это знает | ||
18h | 4 | Любая | Реальный размер (real size) файловой записи |
1Ch | 4 | Любая | Выделенный размер (allocated size) файловой записи |
20h | 8 | Любая | Ссылка (file reference) на базовую файловую запись (base FILE record) или ноль, если данная файловая запись является базовой |
28h | 2 | Любая | Идентификатор следующего атрибута (next attribute ID) |
2Ah | 2 | Windows XP | Используется для выравнивания |
2Ch | 4 | Windows XP | Индекс
|
2 | Любая | Номер последовательности обновления (update sequence number) | |
2 S – 2 | Любая | Массив последовательности обновления (update sequence array) |
Последовательность обновления
Будучи очень важными компонентами файловой системы,
В конец каждого из секторов, слагающих файловую запись (
Основное назначение последовательностей обновления — защита от "обрыва записи". Если в процессе записи сектора на диск исчезнет питающее напряжение, может случиться так, что часть файловой записи будет записана успешно, а другая часть — сохранит прежнее содержимое (файловая запись, как мы помним, обычно состоит из двух секторов). После восстановления питания драйвер файловой системы не может уверенно определить, была ли файловая запись записана целиком. Вот тут-то последовательности обновления и выручают! При каждой перезаписи сектора последовательность обновления увеличивается на единицу. Потому, если произошел обрыв записи, значение последовательности обновления, находящейся в заголовке файловой записи, не совпадет с последовательностью обновления, расположенной в конце сектора.
Оригинальное содержимое, расположенное "под" последовательностью обновления, хранится в специальном массиве обновления (update sequence array), расположенном в заголовке файловой записи непосредственно за концом смещения последовательности обновления (update sequence number). Для восстановления файловой записи в исходный вид необходимо извлечь из заголовка указатель на смещение последовательности обновления (он хранится по смещению 04h байт от начала заголовка) и сверить лежащее по этому адресу 16-байтное значение с последним словом каждого из секторов, слагающих файловую запись (
По смещению
Первое слово массива последовательности обновления соответствует последнему слову первого сектора файловой записи или индексной записи. Второе — последнему слову второго сектора и т.д. Для восстановления сектора в исходный вид необходимо вернуть все элементы массива последовательности обновления на их законные места (естественно, модифицируется не сам сектор, а его копия в памяти).
Чтобы проиллюстрировать сказанное выше, рассмотрим пример, приведенный в листинге 6.2.
Листинг 6.2. Оригинальная файловая запись до восстановления