Вслед за суперблоком расположено описание группы блоков (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) / размер_блока (при необходимости округляем).
Битовая карта индексных дескрипторов выполняет аналогичную функцию по отношению к таблице индексных дескрипторов: показывает, какие именно дескрипторы заняты.
Следующая область в структуре группы блоков служит для хранения таблицы индексных дескрипторов файлов. Структура самого индексного дескриптора подробнее рассматривается ниже в разд. 16.3.
И, наконец, все оставшееся место в группе блоков отводится для хранения собственно файлов.
16.3. Индексные дескрипторы файлов
Каждому файлу на диске соответствует один и только один индексный дескриптор файла, который идентифицируется своим порядковым номером - индексом файла. Это означает, что число файлов, которые могут быть созданы в файловой системе, ограничено числом индексных дескрипторов, которое либо явно задается при создании файловой системы, либо вычисляется исходя из физического объема дискового раздела.
Строение индексного дескриптора файла приведено в табл. 16.4.
Таблица 16.4. Структура индексного дескриптора
Название поля Тип Описание i_mode USHORT Тип и права доступа к данному файлу i_uid USHORT Идентификатор владельца файла (Owner Uid) i_size ULONG Размер файла в байтах i_atime ULONG Время последнего обращения к файлу (Access time) i_ctime ULONG Время создания файла i_mtime ULONG Время последней модификации файла i_dtime ULONG Время удаления файла i_gid USHORT Идентификатор группы (GID) i_link_scount USHORT Счетчик числа связей (Links count) i_blocks ULONG Число блоков, занимаемых файлом i_flags ULONG Флаги файла (File flags) i_reserved1 ULONG Зарезервировано для ОС i_block ULONG[15] Указатели на блоки, в которых записаны данные файла (это поле подробно описано в разд. 16.4) i_version ULONG Версия файла (для NFS) i_file_acl ULONG ACL файла i_dir_acl ULONG ACL каталога i_faddr ULONG Адрес фрагмента (Fragment address) i_frag UCHAR Номер фрагмента (Fragment number) i_fsize UCHAR Размер фрагмента (Fragment size) i_pad1 USHORT Заполнение i_reserved2 ULONG[2] ЗарезервированоПоле типа и прав доступа к файлу представляет собой двухбайтовое слово, каждый бит которого служит флагом, индицирующим отношение файла к определенному типу или установку одного конкретного права на файл.
Таблица 16.5. Структура поля, задающего тип и права доступа
Идентификатор Значение Назначение флага (поля) S_IFMT F000 Маска для типа файла S_IFSOCK A000 Доменное гнездо (socket) S_IFLNK C000 Символическая ссылка S_IFREG 8000 Обычный (regular) файл S_IFBLK 6000 Блок-ориентированное устройство S_IFDIR 4000 Каталог S_IFCHR 2000 Байт-ориентированное (символьное) устройство S_IFIFO 1000 Именованный канал (fifo) S_ISUID 0800 SUID - бит смены владельца S_ISGID 0400 SGID - бит смены группы S_ISVTX 0200 Бит сохранения задачи (sticky bit) S_IRWXU 01C0 Маска прав владельца файла S_IRUSR 0100 Право на чтение S_IWUSR 0080 Право на запись S_IXUSR 0040 Право на выполнение S_IRWXG 0038 Маска прав группы S_IRGRP 0020 Право на чтение S_IWGRP 0010 Право на запись S_IXGRP 0008 Право на выполнение S_IRWXO 0007 Маска прав остальных пользователей S_IROTH 0004 Право на чтение S_IWOTH 0002 Право на запись S_IXOTH 0001 Право на выполнение