Суперблок

Суперблок является начальной точкой файловой системы. Он имеет размер 1024 байта, но реальной информацией заполнены только первые 80 байт -остальная часть суперблока и оставшееся пространство логического блока (при размере блока в 2 или 4 кБ) дополняются нулями. Наличие копий суперблока в каждой группе объясняется чрезвычайной важностью этого элемента файловой системы. Дубликаты супер блока используются при восстановлении файловой системы после сбоев. Тем не менее некоторые утилиты (например mount - утилита монтирования файловой системы) используют только первый экземпляр суперблока и при его повреждении сообщают об ошибке.

Информация, хранимая в суперблоке, используется для организации доступа к остальным данным на диске. В суперблоке определяется размер файловой системы, максимальное число файлов в разделе, объем свободного пространства и содержится информация о том, где искать незанятые участки. При запуске ОС суперблок считывается в память и все изменения файловой системы вначале находят отображение в копии суперблока, находящейся в оперативной памяти, и записываются на диск только периодически. Это позволяет повысить производительность системы, так как многие пользователи и процессы постоянно обновляют файлы. При выключении системы суперблок обязательно должен быть записан на диск, что не позволяет выключать компьютер простым выключением питания. Суперблок имеет следующую структуру (табл. 2.):

Таблица 2

Структура суперблока

Размер поля в байтах

Смещение байт

Назначение

4

0

Число индексных дескрипторов в файловой системе (возможное число файлов)

4

4h

Число блоков в файловой системе

4

8h

Число блоков, зарезервированных для нужд суперпользователя

4

Ch

Число свободных блоков

4

10h

Число свободных индексных дескрипторов

4

14h

Номер первого блока, содержащего данные (0 или 1)

4

18h

Индикатор размера логического блока: 0 = 1 Кб; 1 = 2 Кб; 2 = 4 Кб.

4

1Ch

Индикатор размера фрагментов (если фрагментация блоков предусмотрена)

4

20h

Число блоков в каждой группе блоков

4

24h

Число фрагментов в каждой группе блоков

4

28h

Число индексных дескрипторов в каждой группе блоков

4

2Ch

Время последнего монтирования файловой системы (в секундах с 1 января 1970 года)

4

30h

Время последней записи в файловую систему

2

34h

Число монтирований файловой системы. Если этот счетчик достигает значения, указанного в следующем поле, файловая система при перезапуске проверяется, а счетчик обнуляется.

2

36h

Предельное число монтирований файловой системы

2

38h

"Магическое число" (0xEF53), указывающее, что файловая система принадлежит к ex2fs или ext3fs

2

3Ah

Флаги, указывающие текущее состояние файловой системы.

2

3Ch

Флаги, задающие процедуры обработки сообщений об ошибках

2

3Eh

Заполнение

4

40h

Время последней проверки файловой системы

4

44h

Максимальный период времени между проверками файловой системы

4

48h

Указание на тип операционной системы, в которой создана файловая система

4

4Ch

Версия файловой системы

944

50h

Заполнение до 1024 байт

В листинге 6 показано, как выглядит суперблок при выводе информации с помощью редактора Linux Disk Editor (синтаксис команд редактора приведен далее по тексту и в прил. 2).

0x00000400 0x00000410 0x00000420 0x00000430 0x00000440

01 23 4567

00 07 0Е 00 00 00 1С 00

D8

31

ОС

00

00

00

00

00

00

80

00

00

00

80

00

00

FA

68

40

OB

00

27

00

73

94

59

40

00

ED

00

89ABCDEF

6F 66 01 00 FO 47 13 00

02

00

00

00

02

00

00

00

20

40

00

00

4A

FA

68

40

53

EF

01

00

01

00

00

00

00

00

00

00

01

00

00

00

.1.

J.h@ s.Y@

N.

of

@

S.

.G. .

J.h@

Листинг 6. Содержимое первых 80 (50h) байт суперблока

Подчеркиванием выделены слова и двойные слова, поименованные в таблице. Шестнадцатеричные числа в приводимых здесь и далее дампах памяти представлены в перевернутом формате (т.е. читаются в обратном порядке, справа налево). Так, первые четыре байта представляют двойное слово 00 0Е 07 00h. Воспользовавшись любым из калькуляторов, доступных в консоли или графической оболочки (следует порекомендовать калькулятор be), получаем десятичный эквивалент в 919296 файлов (inode). Аналогичным путем прочтем некоторые иные числа:

>- На диске в данном логическом разделе свободно 1347F0h = 1263600 блоков или 4935,93 Мбайт.

Вслед за суперблоком, в логическом блоке со следующим номером расположено описание группы блоков (Group Descriptors) размером 32 байта. Оно представляет собой массив со следующей структурой:

Таблица 3 Структура описателя группы блоков

Размер поля в байтах

Смещение байт

Назначение

4

0

Адрес блока, содержащего битовую карту блоков (block bitmap) данной группы

4

4h

Адрес блока, содержащего битовую карту индексных дескрипторов (inode bitmap) данной группы

4

8h

Адрес блока, содержащего таблицу индексных дескрипторов (inode table) данной группы

2

Ch

Число свободных блоков в данной группе

Окончание табл. 3

2

Eh

Число свободных индексных дескрипторов в данной группе

2

10h

Число индексных дескрипторов в данной группе, которые являются каталогами

14

12h

Заполнение

Информация, хранимая в описании группы, позволяет найти битовые карты блоков и индексных дескрипторов, а также таблицу индексных дескрипторов.

0 12345 67 8 9ABCDEF

0x00001000 02 00 00 00 03 00 00 00 : 04 00 00 00 09 1А 14 40 @

0x00001010 02 00 00 00 00 00 00 00 : 00 00 00 00 00 00 00 00

Листинг 7. Дамп описателя группы блоков