Назад в библиотеку

Источник: Донбасс будущего глазами молодых ученых: материалы научно-технической конференции для студентов, аспирантов и молодых ученых — 2025. — Донецк: ДонНТУ, 2025. (На момент создания сайта - не опубликован.)

УДК 004.451

ИССЛЕДОВАНИЕ СТРУКТУРЫ ГРУППОВЫХ ДЕСКРИПТОРОВ ФАЙЛОВОЙ СИСТЕМЫ EXT4

Шрамов Е.В., магистрант
Чередникова О.Ю., к.т.н., доцент кафедры КИ
ФГБОУ ВО «Донецкий национальный технический университет», г. Донецк
Кафедра компьютерной инженерии
Аннотация:
Шрамов Е.В., Чередникова О.Ю. Исследование структуры групповых дескрипторов файловой системы EXT4. В работе рассмотрено устройство файловой системы EXT4, выделена её основная структура, а также выполнено исследование состава групповых дескрипторов. Выполнен программный вывод состава нескольких групповых дескрипторов с помощью кроссплатформенного приложения.
Ключевые слова:
EXT4, файловая система, Linux, групповой дескриптор, суперблок, инод.
Annotation:
Research of the structure of EXT4 file system group descriptors. The paper considers the structure of the EXT4 file system, highlights its basic structure, and examines the composition of group descriptors. The composition of several group descriptors is programmatically derived using a cross-platform application.
Keywords:
EXT4, file system, Linux, group descriptor, superblock, inode.

Общая постановка проблемы и анализ последних исследований

В ходе работы специалистам в различных областях компьютерных технологий, связанных прямо или косвенно с исследованием или разработкой программного обеспечения для операционной системы Linux, часто приходится взаимодействовать c файловой системой EXT4, которая прочно укрепилась в статусе основной файловой системы (ФС) данной операционной системы. Несмотря на статус EXT4, как зрелой и широко распространенной файловой системы, ее внутренняя архитектура, в частности подсистема управления метаданными через механизм блочных групп, продолжает оставаться областью, требующей углубленного системного анализа. Ключевая проблема заключается в том, что целостность и производительность всей файловой системы критически зависят от корректности и доступности небольшого числа централизованных структур, среди которых групповые дескрипторы играют первоочередную роль. Конечно, анализ современных научных работ показывает явный сдвиг интереса в сторону разработки и оптимизации новых файловых систем, таких как ZFS и Btrfs, которые предлагают более продвинутые функции на уровне томов. Однако это не умаляет актуальности исследований ФС EXT4, особенно системными программистами, занимающимися разработкой файловых систем и утилит для них. Из этого следует, что исследование структуры групповых дескрипторов, как одной из самых ключевых составных данной ФС является крайне актуальным.

Обзор структуры файловой системы EXT4

EXT4 - это улучшенная версия файловой системы EXT3, которая была разработана для поддержки файлов больших размеров, повышения производительности и улучшения безопасности. Она является одной из самых стабильных и проверенных временем файловых систем в Linux [1].

Файловая система EXT4 организована по принципу блоковых групп (рисунок 1), что обеспечивает локализацию метаданных и данных для повышения производительности. Каждая блоковая группа содержит следующий набор структур:

Рисунок 1 - Структура группы данных в ФС EXT4

Ключевые инновации EXT4 включают экстенты для сокращения фрагментации, отложенное выделение для оптимизации записи и журналирование для обеспечения целостности. Архитектура поддерживает тома до 1 эксабайта, сохраняя совместимость с ext2/3, что делает её надежным решением для современных Linux-систем [2].

Состав группового дескриптора ФС EXT4

Групповой дескриптор в EXT4 - это структура метаданных (таблица 1), описывающая состояние и расположение ключевых элементов блоковой группы, включая указатели на битовые карты блоков и inode, таблицу inode, а также счетчики свободных ресурсов [3]. Каждый дескриптор служит "паспортом" своей блоковой группы, обеспечивая быстрый доступ к её метаданным и эффективное управление пространством.

Таблица 1 - Структура группового дескриптора
Смещение Размер, бит. Название Значение
/*00*/ 32 bg_block_bitmap_lo Блок битовой карты блоков
32 bg_inode_bitmap_lo Блок битовой карты inode
32 bg_inode_table_lo Блок таблицы inode
16 bg_free_blocks_count_lo Количество свободных блоков
16 bg_free_inodes_count_lo Количество свободных inode
/*10*/ 16 bg_used_dirs_count_lo Количество каталогов
16 bg_flags Флаги группы
16 bg_exclude_bitmap_lo Блок исключающей битовой карты для снимков
32 bg_block_bitmap_csum_lo Контрольная сумма битовой карты блоков
16 bg_inode_bitmap_csum_lo Контрольная сумма битовой карты inode
16 bg_itable_unused_lo Количество неиспользуемых inode
16 bg_checksum Контрольная сумма дескриптора
/*20*/ 16 bg_block_bitmap_hi Старшие биты блока битовой карты блоков
32 bg_inode_bitmap_hi Старшие биты блока битовой карты inode
32 bg_inode_table_hi Старшие биты блока таблицы inode
16 bg_free_blocks_count_hi Старшие биты счетчика свободных блоков
16 bg_free_inodes_count_hi Старшие биты счетчика свободных inode
/*30*/ 16 bg_used_dirs_count_hi Старшие биты счетчика каталогов
16 bg_itable_unused_hi Старшие биты счетчика неиспользуемых inode
32 bg_exclude_bitmap_hi Старшие биты исключающей битовой карты
16 bg_block_bitmap_csum_hi Старшие биты контрольной суммы бит. карты блоков
16 bg_inode_bitmap_csum_hi Старшие биты контрольной суммы бит. карты inode
32 bg_reserved Зарезервировано

Разработка приложения

Алгоритм разработки кроссплатформенного приложения на языке Python с использованием фреймворка PyQt для вывода информации о составе групповых дескрипторов в ФС EXT4 включает в себя следующие шаги:

  1. Установка необходимых кроссплатформенных библиотек PyQt5, PyQt5-tools, shutil -- для высокоуровневых операций над файлами, psutil - для получения данных о системе, в нашем случае о дисках, sys - для работы с системными функциями, а так же os - для взаимодействия с операционной системой, struct --для работы со структурами данных внутри ФС.
  2. Инициализация и сканирование системы. Создаем GUI с QListWidget для дисков, а так же с помощью метода list_disks() получаем список разделов через psutil.disk_partitions(). Считываем следующие данные: точки монтирования, тип ФС, размеры разделов через метод shutil.disk_usage().
  3. При выборе пользователем диска вызываем метод get_block_device() для поиска блочного устройства по точке монтирования через сравнивание точки монтирования выбранного раздела с данными psutil.disk_partitions(), при соответствии возвращаем соответствующее устройство (например, /dev/sda1).
  4. Читаем суперблок диска с ФС EXT4 с помощью метода sup_block_read(), в котором открываем устройство в бинарном режиме, позиционируемся на смещение 1024 байт, читаем 2048 байт, распаковываем структуру суперблока через struct.unpack() и выделяем ключевые поля : s_first_data_block , s_blocks_per_group , s_inodes_per_group , s_inode_size , block_size .
  5. Расчет позиции дескрипторов. Формула: descriptors_offset = (first_data_block + 1) * block_size.
  6. Чтение групповых дескрипторов. Методом read_group_descriptors() выполняем последовательное чтение всех дескрипторов, через позиционирование на вычисленное смещение, где в цикле читаем по 64 байта для каждой группы, используем int.from_bytes() для ручного разбора полей дескриптора. Количество групп рассчитывается в формуле groups_count = (total_blocks + blocks_per_group - 1) / blocks_per_group.
  7. Выполняем Разбор структуры дескриптора (рисунок 2).
    Рисунок 2 - Состав групповых дескрипторов

Поля структуры групповых дескрипторов показывают расположение и состояние метаданных в каждой блоковой группе. Адреса битовых карт блоков и инодов указывают на номера блоков, где хранятся соответствующие карты распределения. В группе 0 таблица инодов начинается с блока 1060. Счетчики свободных блоков и инодов отражают доступные ресурсы группы. Количество каталогов используется алгоритмами распределения для оптимизации размещения файлов. Флаги указывают на состояние инициализации структур группы. Контрольные суммы обеспечивают проверку целостности метаданных. Поле не используемых инодов помогает оптимизировать процедуры проверки файловой системы.

Заключение

Групповые дескрипторы являются структурным каркасом EXT4, обеспечивающим эффективное управление пространством через систему блоковых групп. Их двухуровневая структура с контрольными суммами гарантирует целостность данных, а дублирование критических элементов создает отказоустойчивую архитектуру, что делает EXT4 оптимальным решением для современных систем хранения данных. Дальнейшие шаги исследований и разработки приложения включают в себя продолжение изучения низкого уровня файловой системы EXT ОС Linux и дальнейшая разработка приложения для анализа данной ФС.

Список литературы

  1. Файловые системы BTRFS и EXT4: краткое знакомство и опыт использования [Электронный ресурс], Режим доступа: https://dzen.ru/a/ZE1HAmXTX1PMa8wQ
  2. The new ext4 filesystem: current status and future plans [Электронный ресурс], Режим доступа: https://www.researchgate.net/publication/228887618_The_new_ext4_filesystem_Current_status_and_future_plans
  3. Understanding EXT4 Disk Layout [Электронный ресурс], Режим доступа: https://blogs.oracle.com/linux/post/understanding-ext4-disk-layout-part-1