Структура суперблока приведена в табл. 16.2.
Таблица
16.2.
Структура суперблока
Название поля |
Тип |
Комментарий |
s_inodes_count |
ULONG |
Число индексных дескрипторов в файловой системе |
s_blocks_count |
ULONG |
Число блоков в файловой системе |
s_r_blocks_count |
ULONG |
Число блоков, зарезервированных для суперпользователя |
s_free_blocks_count |
ULONG |
Счетчик числа свободных блоков |
s_free_inodes_count |
ULONG |
Счетчик числа свободных индексных дескрипторов
|
s_first_data_block |
ULONG |
Первый блок, который содержит данные. В зависимости от размера блока, это поле может быть равно 0 или 1 |
s_log_block_size |
ULONG |
Индикатор размера логического блока: 0 = 1 Кб; 1 = 2 Кб; 2 = 4 Кб |
s_log_frag_size |
LONG |
Индикатор размера фрагментов (кажется, понятие фрагмента в настоящее время не используется) |
s_blocks_per_group |
ULONG |
Число блоков в каждой группе блоков |
s_frags_per_group |
ULONG |
Число фрагментов в каждой группе блоков |
s_inodes_per_group |
ULONG |
Число индексных дескрипторов (inodes) в каждой группе блоков |
s_mtime |
ULONG |
Время, когда в последний раз была смонтирована файловая система |
s_wtime |
ULONG |
Время, когда в последний раз производилась запись в файловую систему |
s_mnt_count |
USHORT |
Счетчик числа монтирований файловой системы. Если этот счетчик достигает значения, указанного в следующем поле ( s_max_mnt_count ), файловая система должна быть проверена (это делается при перезапуске), а счетчик обнуляется |
s_max_mnt_count |
SHORT |
Число, определяющее, сколько раз может быть смонтирована файловая система |
s_magic |
USHORT |
"Магическое число" (0xEF53), указывающее, что файловая система принадлежит к типу ex2fs
|
s_state |
USHORT |
Флаги, указывающее текущее состояние файловой системы (является ли она чистой (clean) и т.п.) |
s_errors |
USHORT |
Флаги, задающие процедуры обработки сообщений об ошибках (что делать, если найдены ошибки) |
s_pad |
USHORT |
Заполнение |
s_lastcheck |
ULONG |
Время последней проверки файловой системы |
s_checkinterval |
ULONG |
Максимальный период времени между проверками файловой системы |
s_creator_os |
ULONG |
Указание на тип ОС, в которой создана файловая система |
s_rev_level |
ULONG |
Версия (revision level) файловой системы |
s_reserved |
ULONG[235] |
Заполнение до 1024 байт |
Вслед за суперблоком расположено описание группы блоков (Group Descriptors). Это описание представляет собой массив, имеющий структуру, приведенную в табл. 16.3.
Таблица
16.3.
Структура описания группы блоков
Название поля |
Тип |
Назначение |
bg_block_bitmap |
ULONG |
Адрес блока, содержащего битовую карту блоков (block bitmap) данной группы |
bg_inode_bitmap |
ULONG |
Адрес блока, содержащего битовую карту индексных дескрипторов (inode bitmap) данной группы |
bg_inode_table |
ULONG |
Адрес блока, содержащего таблицу индексных дескрипторов (inode table) данной группы |
bg_free_blocks_count |
USHORT |
Счетчик числа свободных блоков в данной группе |
bg_free_inodes_count |
USHORT |
Число свободных индексных дескрипторов в данной группе |
bg_used_dirs_count |
USHORT |
Число индексных дескрипторов в данной группе, которые являются каталогами |
bg_pad |
USHORT |
Заполнение |
bg_reserved |
ULONG[3] |
Заполнение |
Размер описания группы блоков можно вычислить как
(размер_группы_блоков_в_ext2 * число_групп) / размер_блока
при необходимости округляем.
Информация, которая хранится в описании группы, используется для того, чтобы найти битовые карты блоков и индексных дескрипторов, а также таблицу индексных дескрипторов. Не забывайте, что блоки и группы блоков нумеруются, начиная с 1.
Битовая карта блоков (block bitmap) - это структура, каждый бит которой показывает, отведен ли соответствующий ему блок какому-либо файлу. Если бит равен 1, то блок занят. Эта карта служит для поиска свободных блоков в тех случаях, когда надо выделить место под файл, Битовая карта блоков занимает число блоков, равное ( число_блоков_в_группе / 8) / размер_блока (при необходимости округляем).
Битовая карта индексных дескрипторов выполняет аналогичную функцию по отношению к таблице индексных дескрипторов: показывает, какие именно дескрипторы заняты.
Следующая область в структуре группы блоков служит для хранения таблицы индексных дескрипторов файлов. Структура самого индексного дескриптора подробнее рассматривается ниже.
И, наконец, все оставшееся место в группе блоков отводится для хранения собственно файлов.