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

Отмена применяется ко всем транзакциям, порядковый номер которых меньше либо равен порядковому номеру записи отмены.
Рассмотрим пример журнала из файловой системы. Для просмотра его содержимого можно запустить программу 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.
Еще по теме Структуры данных журнала:
- Структуры данных
- Структуры данных
- Структуры данных
- Структуры данных
- Атрибуты и структуры данных индексов
- Структуры данных i386
- Структуры данных Sparc
- 14.1. ЗАДАЧИ И СТРУКТУРА. ИСТОЧНИКИ ДАННЫХ
- Структуры данных FAT
- Структуры данных NTFS
- Структуры данных Ext2 и Ext3
- Структуры данных UFS1 и UFS2
- Структура основных данных стартового маркетингового анализа
-
Информационная безопасность -
Правовая информатика -
Управление IT-проектами -
Философия информатики и информации -
-
Топливно-энергетический комплекс -
Безопасность жизнедеятельности -
Бизнес. Деньги. Финансы -
Биология -
География -
Геология -
Гуманитарные дисциплины -
Информатика -
История. Археология. Этнография -
Книги по менеджменту и маркетингу -
Культурология и искусствоведение -
Медицинские дисциплины -
Междисциплинарные материалы -
Недвижимость -
Паранаука, альтернативные теории -
Педагогика -
Политология -
Право -
Психология -
Религия -
Социология -
Транспорт -
Философия -
Философы -
Экология и природопользование -
Экономика -