Структуры данных журнала


В журнале регистрируются обновления метаданных, что позволяет ускорить восстановление системы после сбоев. В журнале Ext3 задействованы четыре структуры данных. Первая — суперблок журнала — находится в первом блоке. Остальные структуры данных предназначены для блока дескрипторов, закрепления и отмены. Каждая структура данных обладает сигнатурой, на основании которой обычные блоки журнала отличаются от административных блоков. Данные записываются в журнал с обратным порядком байтов; в этом они отличаются от других структур данных ExtX.
Все четыре структуры данных начинаются с однотипного заголовка, описанного в табл. 15.28.

Таблица 15.28. Структура данных стандартного заголовка структур данных журнала

Диапазон

Описание

Необходимость

0—3

Сигнатура (0хС03В3998)

Да

4-7

Тип блока (см. табл. 15.29)

Да

8-11

Порядковый номер

Да


Тип блока является признаком, по которому различаются четыре структуры данных. Его значения перечислены в табл. 15.29.
Таблица 15.29. Значения поля типа в заголовках журнала
Значение              Описание Блок дескрипторов Блок закрепления Суперблок, версия              1 Суперблок, версия              2 Блок отмены
По умолчанию первая версия журнала регистрирует все обновления данных, тогда как вторая регистрирует только обновления метаданных. При помощи параметра монтирования системы можно заставить вторую версию регистрировать все обновления данных. Суперблок состоит из полей, перечисленных в табл. 15.30.
Таблица 15.30. Структуры данных суперблока журнала версии 1 и 2

Диапазон

Описание

Необходимость
/>0-11
Стандартный заголовок (см. табл. 15.28)

Да

12-15

Размер журнального блока

Да

16-19

Количество блоков в журнале

Да

20-23

Блок, с которого начинается фактическое

Да


содержимое журнала


24-27

Порядковый номер первой транзакции

Да

28-31

Блок первой транзакции

Да

32-35

Номер ошибки

Нет

В суперблоке версии 1 используются только первые 36 байт. В суперблоке вер-

:ии 2 также используются дополнительные поля, перечисленные в табл. 15.31.

Таблица 15.31. Дополнительные поля суперблока журнала версии 2

Диапазон

Описание

Необходимость

36-39

Совместимые функции

Нет

40-43

Несовместимые функции

Нет

44-47

Функции, совместимые только для чтения

Нет

48-63

UUID журнала

Нет



Таблица 15.31 (продолжение)

Диапазон

Описание

Необходимость

64-67

Количество файловых систем, использующих журнал

Нет

68-71

Местонахождение копии суперблока

Нет

72-75

Максимальное количество блоков журнала на транзакцию

Нет

76-79

Максимальное количество системных блоков на транзакцию

Нет

80-255

Не используется

Нет

256-1023

16-байтовые идентификаторы файловых систем, использующих журнал

Нет


На момент написания книги была доступна только возможность отмены. Она относится к категории несовместимых функций и представляется флагом 0x00000001.
Блок дескрипторов содержит стандартную структуру данных заголовка (см. табл. 15.28), которая занимает байты 0-11. Начиная с байта 12, следуют записи дескрипторов, поля которых описаны в табл. 15.32.
Таблица 15.32. Структуры данных записей блоков дескрипторов журнала

Диапазон

Описание

Необходимость

0-3

Блок файловой системы

Да

4-7

Флаги (см. табл. 15.33)

Да

8-23

UUID (не существует при установленном

Нет


флаге SAMEJJUID)



Каждая из этих записей определяет, какому блоку файловой системы соответствует данный блок журнала. Например, первый блок журнала после блока дескрипторов соответствует блоку файловой системы, описанному первой записью дескриптора. Значения поля флагов представлены в табл. 15.33.
Таблица 15.33. Значения флагов в поле дескриптора записи

Флаг

Описание

0x01

Специальная обработка блока журнала

0x02

Запись содержит тот же код UUID, что и предыдущая (SAMEJJUID)

0x04

Блок удален транзакцией (в настоящее время не используется)

0x08

Последняя запись в блоке дескрипторов


Флаг специальной обработки используется в ситуациях, когда блок файловой системы содержит четыре байта, совпадающие с сигнатурой заголовка. В таких ситуациях содержимое четырех байтов стирается перед записью в журнал.
Блок закрепления содержит только стандартный заголовок с типом блока и порядковым номером закрепляемой транзакции.
Блок отмены содержит стандартный заголовок и список блоков файловой системы, в которых отменяются изменения. Поля блока отмены перечислены в табл. 15.34.

alt="" />Стандартный заголовок (см. табл. 15.28) Размер данных в байтах Список 4-байтовых адресов блоков файловой системы



Отмена применяется ко всем транзакциям, порядковый номер которых меньше либо равен порядковому номеру записи отмены.

Рассмотрим пример журнала из файловой системы. Для просмотра его содержимого можно запустить программу icat для индексного узла 8: icat -f linux-ext3 /dev/hdb2 8 | xxd
0000000: сОЗЬ 3998 0000 0004 0000 0000 0000 0400              .;9
0000016:              0000 0400              0000              0001              0000              0126              0000              0000
0000032:              0000 0000              0000              0000              0000              0000              0000              0000
0000048:              a34c 4be5              c222              460b              b76f              d45b              518b              083c .LK.."F..o.[Q..lt;
0000064:              0000 0001              0000              0000              0000              0000              0000              0000
0000080: 0000 0001 0000 0000 0000 0000 0000 0000
Байты 0-3 содержат сигнатуру. Байты 4-7 показывают, что блок относится к типу 4, то есть представляет суперблок версии 2. Согласно байтам 8-11, порядковый номер равен 0, а байты 12-15 показывают что размер журнального блока равен 1024 байтам (0x0400). Размер журнала (байты 16-19) равен 1024 блокам, а его записи начинаются с блока журнала 1 (байты 20-23). Чтобы идентифицировать первую транзакцию в журнале, мы обращаемся к байтам 24-27 — порядковый номер транзакции равен 294 (0x0126), а байты 28-31 показывают, что запись находится в блоке 0. Мы уже видели, что записи журнала начинаются с блока Первая транзакция находится в блоке 0, потому что файловая система была корректно демонтирована, а все ее транзакции завершены.
После монтирования файловой системы и создания файла в корневом каталоге суперблок содержит следующую информацию: icat -f linux-ext3 /dev/hdb2 8 | xxd
0000000: сОЗЬ 3998 0000 0004 0000 0000 0000 0400              .:9
0000016: 0000 0400 0000 0001 0000 0127 0000 0001                            '
В отличие от предыдущего результата, порядковый номер увеличился до 295 (0x0124), а соответствующий блок журнала теперь стал равным 1, потому что в журнале появились действительные транзакции.
Перейдем к просмотру блока журнала 1. Не путайте его с блоком файловой системы 1; речь идет о блоке внутри файла журнала. Для просмотра его содержимого можно передать вывод icat программе dd с размером блока 1024 или же воспользоваться утилитой jcat из пакета TSK: jcat -f linux-ext3 /dev/hdb2 1 | xxd
0000000: сОЗЬ 3998 0000 0001 0000 0127 0000 0004              .:9
0000016: 0000 0000 0000 0000 0000 0000 0000 0000
0000032: 0000 0000 0000 0002 0000 0002 0000 000e
0000048: 0000 0002 0000 0005 0000 0002 0000 ООаЗ
0000064: 0000 0002 0000 0003 0000 000a 0000 0000
Поле типа (байты 4-7) показывает, что блок является блоком дескрипторов, а его порядковый номер равен 295 (0x0127). Первая запись дескриптора начинается
в байте 12 и относится к блоку 4 файловой системы. Поле флагов (байты 16-19) равно 0; это означает, что в следующих 16 байтах существует поле UUID. Запись показывает, что блок, следующий за блоком дескрипторов, соответствует блоку файловой системы 4. Блок 4 содержит битовую карту индексных узлов, а его содержимое было обновлено при выделении нового узла.
Вторая запись начинается с байта 36. Байты 36-39 показывают, что запись относится к блоку файловой системы 2, а содержимое поля флагов равно 2; следовательно, поле UUID в записи отсутствует. Таким образом, второй блок после блока дескрипторов относится к блоку файловой системы 2, в котором хранится таблица дескрипторов групп. Анализируя остальные данные блока, мы видим, что блок 14 был обновлен, потому что он находится в таблице индексных узлов и содержит индексный узел, выделенный новому файлу; обновление блока 5 объясняется тем, что этот блок содержал индексный узел корневого каталога; блок 163 был обновлен, потому что в нем хранятся записи корневого каталога; наконец, блок 4 содержит битовую карту блоков. Если бы в журнале также регистрировались обновления содержимого, то в нем появилась бы дополнительная запись для нового содержимого файла.
Таблица дескрипторов содержит 6 записей; проверим, содержится ли в блоке журнала 8 блок закрепления. Действительно, он здесь присутствует: jcat -f linux-ext3 /dev/hdb2 8 | xxd
0000000: сОЗЬ 3998 0000 0002 0000 0127 0000 0000              .;9              '
0000016: 0000 0000 0000 0000 0000 0000 0000 0000
Байты 4-7 показывают, что блок является блоком закрепления (0x02), а байты 8-11 — что ему назначен порядковый номер 295 (0x127). Наконец, из блока дескрипторов мы узнаем, что блок журнала 6 содержит информацию о блоке файловой системы для корневого каталога. При просмотре блока 6 мы видим обновленный блок с записью new-file.txt: jcat -f linux-ext3 /dev/hdb2 6 | xxd
0000000:              0200              0000              0c00              0100              2e00              0000              0200              0000
0000016:              OcOO              0200              2e2e              0000              ObOO              0000              e803              OcOO
0000032:              6e65              772d              6669              6c65              2e74              7874              OcOO              0000              new-file.txt....
[...]
Возможно, на основании этой информации вам удастся определить, какие файлы в последнее время создавались и удалялись в системе. Для просмотра содержимого журнала можно воспользоваться программой jls из пакета TSK. Вот как выглядит результат для предыдущего примера: jls -f linux-ext3 /dev/hdb2
JBlk              Description
0:              Superblock (seq: 0)
1:              Allocated Descriptor              Block (seq:              295)
2:              Allocated FS              Block              4
3:              Allocated FS              Block              3
4:              Allocated FS              Block              14
5:              Allocated FS              Block              5
6:              Allocated FS              Block              163
7:              Allocated FS              Block              3
8:              Allocated Commit Block (seq:              295)
9:              Unallocated FS Block              Unknown
[...]

Итоги
В этой главе были описаны структуры данных файловых систем Ext2 и Ext3. Количество основных структур данных невелико, и все они имеют четкую специализацию. Некоторые структуры данных и флаги, упоминавшиеся в главе, встречаются только в нестандартных системах. Структуры данных ExtX отчасти напоминают структуры UFS, которые будут рассматриваться далее, но они устроены чуть проще.
Библиография Ts’o, Theodore, and Stephen Tweedie. «Planned Extensions to the Linux Ext2/ Ext3 Filesystem». Proceedings of the 2002 Usenix Technical Conference FREENIX Track, 2002.
Также см. раздел «Библиография» главы 14.


<< | >>
Источник: Кэрриэ Б.. Криминалистический анализ файловых систем. 2007

Еще по теме Структуры данных журнала:

  1. Структуры данных
  2. Структуры данных
  3. Структуры данных
  4. Структуры данных
  5. Атрибуты и структуры данных индексов
  6. Структуры данных i386
  7. Структуры данных Sparc
  8. 14.1. ЗАДАЧИ И СТРУКТУРА. ИСТОЧНИКИ ДАННЫХ
  9. Структуры данных FAT
  10. Структуры данных NTFS
  11. Структуры данных Ext2 и Ext3
  12. Структуры данных UFS1 и UFS2
  13. Структура основных данных стартового маркетингового анализа