Суперблок
Суперблок является начальной точкой файловой системы. Он имеет размер 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 |
|
4А |
FA |
68 |
40 |
OB |
00 |
27 |
00 |
|
73 |
94 |
59 |
40 |
00 |
4Е |
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). Аналогичным путем прочтем некоторые иные числа:
-
Число блоков в файловой системе 00 1С 00 00h = 1835008, т.е. на каждый файл зарезервировано около 2 блоков или 8 кБ (часть блоков расходуется для размещения копий суперблоков, описателей групп блоков, битовых карт, таблиц inode).
-
Для администратора зарезервировано 1666Fh = 91759 блоков. Это около 10% всего дискового пространства.
>- На диске в данном логическом разделе свободно 1347F0h = 1263600 блоков или 4935,93 Мбайт.
-
Размер логического блока 1000h = 4096 байт.
-
В каждой группе - 8000h = 32768 блоков и 4020h = 16416 индексных дескрипторов. Таким образом, для каждой группы блоков выделено по 128 Мб дискового пространства, на котором можно разместить 16416 файлов. Резервные суперблоки в случае повреждения первого можно найти в 32768, 65534 и последующих логических блоках.
Вслед за суперблоком, в логическом блоке со следующим номером расположено описание группы блоков (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. Дамп описателя группы блоков
