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

Источник: Научные исследования и достижения молодых ученых: сборник материалов научно-практической конференции Young scientists' researches and achievements in science — 2025. — Донецк: ДонНТУ, 2025. — С. 421–429.

УДК 66.065.5

РАЗРАБОТКА ПРИЛОЖЕНИЯ С ИСПОЛЬЗОВАНИЕМ PYQT ДЛЯ ВЫВОДА СУПЕРБОРКА ЛОГИЧЕСКОГО ДИСКА С ФС EXT4

Шрамов Е.В., Чередникова О.Ю., Кушниренко Е.Н.
zhenya.shramov@mail.ru
Аннотация:
Шрамов Е.В., Чередникова О.Ю., Кушниренко Е.Н. Разработка приложения с использованием PyQT для вывода суперблока логического диска с ФС EXT4. В работе рассмотрены способ разработки кроссплатформенного приложения с использованием PyQT, описаны функциональные возможности фреймворка, а так же выполнено описание алгоритма для получения информации о логических дисках и выводе суперблока диска с ФС EXT4.
Ключевые слова:
Кроссплатформенность, приложение, фреймворк, логический диск, файловая система, Python.

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

В ходе работы, специалистам в различных областях компьютерных технологий связанных прямо или косвенно с исследованием или разработкой программного обеспечения для операционных систем, часто приходится взаимодействовать с различными файловыми системами и структурами [1]. В связи с этим возникает потребность разбираться в структуре и форме хранения информации на персональном компьютере. Так же необходимо упомянуть, что современные операционные системы и файловые системы требуют эффективных инструментов для управления данными. Файловая система EXT4, широко используемая в Linux, обладает множеством преимуществ, таких как высокая производительность и надежность. Однако, как и любая другая файловая система, она может сталкиваться с проблемами, связанными с потерей данных, повреждением файлов и другими ошибками. В таких случаях пользователям необходимы инструменты для анализа данных.

Разработка приложения на Python с использованием библиотеки PyQt представляет собой перспективный подход к созданию пользовательского интерфейса для работы с логическими дисками и их содержимым. Целью данного приложения является создание удобного и функционального инструмента для вывода информации о суперблоке файловой системы EXT4, что позволит пользователям лучше понимать состояние своих дисков.

Фреймворк PyQt

PyQt - это версия библиотек классов Qt для языка Python, а так же набор инструментального программного обеспечения для создания кросс-платформенных приложений с графическим интерфейсом (GUI) [2]. Ключевыми аспектами Qt являются: кроссплатформенность - Qt позволяет разработчикам писать код один раз и запускать его на различных операционных системах без значительных изменений; модульность - Qt состоит из множества модулей, включая: QtCore, QtGui, QtWidgets, QtQuick , QtNetwork; встроенные инструменты разработки - в комплекте с Qt поставляется Qt Creator - интегрированная среда разработки (IDE), которая упрощает процесс создания приложений.

Плюсами использования данного фреймворка является то, что он обладает:

Рисунок 1 - Общие модули Qt

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

Файловая система EXT4 (Fourth Extended Filesystem) является одной из самых популярных и широко используемых файловых систем в операционных системах на базе Linux. Она была разработана как улучшение предыдущих версий EXT2 и EXT3, предлагая ряд новых функций и улучшений, которые делают её более эффективной и надежной.

К основным параметрам характеризующим данную ФС можно отнести:

Кратко структура EXT4 проиллюстрирована на рисунке 2.

Рисунок 2 - Структура ФС EXT4

Суперблок - это ключевая структура данных в файловой системе, которая хранит информацию о самой файловой системе, такой как её размер, количество доступных блоков, инодов и другие метаданные. Основные поля суперблока EXT4 (таблица 1) включают размер файловой системы, общее количество блоков, количество доступных блоков, общее количество инодов, количество свободных инодов, уникальный идентификатор файловой системы, версию файловой системы, информацию о журналировании, размер блока и временные метки. Также в суперблоке содержится информация о состоянии файловой системы, например, была ли она правильно размонтирована или произошел сбой.

Таблица 1 - Структура первых 98 байтов суперблока [4]
Offset Size Name Mean
/*00*/ le32 s_inodes_count Inodes count
le32 s_blocks_count_lo Blocks count
le32 s_r_blocks_count_lo Reserved blocks count
le32 s_free_blocks_count_lo Free blocks count
/*10*/ le32 s_free_inodes_count Free inodes count
le32 s_first_data_block First Data Block
le32 s_log_block_size Block size
le32 s_log_cluster_size Allocation cluster size
/*20*/ le32 s_blocks_per_group Blocks per group
le32 s_clusters_per_group Clusters per group
le32 s_inodes_per_group Inodes per group
le32 s_mtime Mount time
/*30*/ le32 s_wtime Write time
le16 s_mnt_count Mount count
Продолжение табл 1
Size Name Mean
le16 s_max_mnt_count Maximal mount count
le16 s_magic Magic signature
le16 s_state File system state
le16 s_errors Behaviour when detecting errors
le16 s_minor_rev_level Minor revision level
/*40*/ le32 s_lastcheck Time of last check
le32 s_checkinterval Max. time between checks
le32 s_creator_os OS
le32 s_rev_level Revision level
/*50*/ le16 s_def_resuid Default uid for reserved blocks
le16 s_def_resgid Default gid for reserved blocks
le32 s_first_inod First non-reserved inode
le16 s_inode_size Size of inode structure
le16 s_block_group_nr Block group # of this Superblock
le32 s_feature_compat Compatible feature set

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

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

  1. Установка необходимых кроссплатформенных библиотек PyQt6, PyQt6-tools, shutil, psutil [3]. А так же выполняем их импорт.
  2. Создаем класс DiskLister, который наследуется от QWidget - основного класса для графического интерфейса
  3. Инициализируем пользовательский интерфейс, где с помощью QVBoxLayout, QLabel и QListWidget определяем структуру.
  4. Вызываем метод list_disks(), в котором в переменную disk_info c помощью метода disk_partitions() записываем все подключенные разделы диска в виде списка именованных кортежей[3], затем перебираем каждый кортеж, который соответствует активному логическому диску, в переменные записываем имя диска, его тип, а так же с помощью метода disk_usage() рассчитываем статистику использования диска. Добавляем все полученные сведения в список disk_list класса QListWidget.
  5. Кликом ЛКМ выбираем необходимый для нас диск с ФС EXT4, путь к данному диску передается в метод sup_block_read(), после чего происходит чтение первых 1024 байтов диска, далее согласно Таблице 1 производим распаковку первых 98 байтов суперблока, а так же организовываем вывод ключевых полей в консоль.

Пример:

Рисунок 3 - Вывод списка логических дисков в ОС Linux
Рисунок 4 - Вывод данных из Суперблока

Заключение

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

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

  1. Кросс-платформенная разработка мобильных приложений [Электронный ресурс], Режим доступа: https://practicum.yandex.ru/blog/krossplatformennaya-razrabotka-mobilnyh-prilozheniy/
  2. Qt [Электронный ресурс], Режим доступа: https://blog.skillfactory.ru/glossary/qt/
  3. Psutil documentation [Электронный ресурс], Режим доступа: https://psutil.readthedocs.io/en/latest/index.html
  4. Understanding EXT4 Disk Layout [Электронный ресурс], Режим доступа: https://blogs.oracle.com/linux/post/understanding-ext4-disk-layout-part-1