В журнале регистрируются обновления метаданных, что позволяет ускорить восстановление системы после сбоев. В журнале ЕхЬЗ задействованы четыре структуры данных. Первая - суперблок журнала - находится в первом блоке. Остальные структуры данных предназначены для блока дескрипторов, закрепления и отмены. Каждая структура данных обладает сигнатурой, на основании которой обычные блоки журнала отличаются от административных блоков. Данные записываются в журнал с обратным порядком байтов; в этом они отличаются от других структур данных ЕхЬХ.

Все четыре структуры данных начинаются с однотипного заголовка, описанного в табл. 15.28.

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

Диапазон

Описание

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

0-3

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

Да

4-7

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

Да

8-11

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

Да

Тип блока является признаком, по которому различаются четыре структуры данных. Его значения перечислены в табл. 15.29.

Таблица 15.29. Значения поля типа в заголовках журнала

Значение

Описание

1

Блок дескрипторов

2

Блок закрепления

3

Суперблок, версия 1

4

Суперблок, версия 2

5

Блок отмены

По умолчанию первая версия журнала регистрирует все обновления данных, тогда как вторая регистрирует только обновления метаданных. При помощи параметра монтирования системы можно заставить вторую версию регистрировать все обновления данных. Суперблок состоит из полей, перечисленных в табл. 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

111110 журнала

Нет

Таблица 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

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

Нет

флаге 5АМЕ_ииЮ)

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

Таблица 15.33. Значения флагов в поле дескриптора записи

Флаг

Описание

0x01

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

0x02

Запись содержит тот же код ШЮ, что и предыдущая (БАМЕ_ииЮ)

0x04

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

0x08

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

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

Блок закрепления содержит только стандартный заголовок с типом блока и порядковым номером закрепляемой транзакции.

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

Таблица 15.34. Структура блока отмены в журнале

Диапазон

Описание

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

0-11

Стандартный заголовок (см. табл. 15.28)

Да

12-15

Размер данных в байтах

Да

16-РАЗМЕР

Список 4-байтовых адресов блоков файловой системы

Да

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

Рассмотрим пример журнала из файловой системы. Для просмотра его содержимого можно запустить программу icat для индексного узла 8:

# icat -f linux-ext3 /dev/hdb2 8 xxd

0000000: c03b 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..<

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. Мы уже видели, что записи журнала начинаются с блока 1. Первая транзакция находится в блоке 0, потому что файловая система была корректно демонтирована, а все ее транзакции завершены.

После монтирования файловой системы и создания файла в корневом каталоге суперблок содержит следующую информацию:

# icat -f linux-ext3 /dev/hdb2 8 xxd

0000000: c03b 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: c03b 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 OOOe ................

0000048: 0000 0002 0000 0005 0000 0002 0000 00a3 ................

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: c03b 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 OcOO 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.

Символическая ссылка | Криминалистический анализ файловых систем | Ufs1и ufs2: концепции и анализ


Криминалистический анализ файловых систем



Новости за месяц

  • Март
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс