Магистр ДонНТУ Уткин Павел Сергеевич
Уткин Павел Сергеевич Факультет компьютерных наук и технологий Кафедра компьютерной инженерии Магистерская программа Программное обеспечение средств вычислительной техники Разработка драйвера для доступа к данным файловой системы ext4 на уровне ядра ОС Windows Научный руководитель: доц., к.т.н., Чередникова Ольга Юрьевна

Реферат по теме выпускной работы

Содержание
Введение
1. Актуальность темы
2. Цель и задачи исследования, планируемые результаты
3. Обзор исследований и разработок
3.1 Программа Ext2Fsd
3.2 Программа DiskInternals Linux Reader
3.3 Плагин для Total Commander DiskInternals Reader
3.4 Программа ext2explore
4. Обзор файловой системы ext4
5. Подход к разработке драйвера файловой системы
5.1 Взаимодействие пользовательской программы с драйвером
5.2 Разработка драйвера файловой системы
Выводы
Список источников

Введение

Если вы являетесь пользователем операционной системы Linux, то должны знать, что она не хочет конфликтовать с Windows, это проявляется во всем. Например, она может определить наличие этой операционной системы, что позволит вам при загрузке компьютера выбрать нужную вам систему для работы, плюс вы сможете без проблем работать с разделами жестких дисков (если речь идет о файловых системах NTFS и FAT), вы сможете организовывать общий доступ к файлам. Но под управлением ОС Windows вы этого не сможете сделать без специального ПО.

1. Актуальность темы

В основном наши жесткие диски имеют более одного раздела и не всегда эти разделы могут быть одной и той же файловой системы. Например, ОС Windows зачастую имеет разделы FAT и NTFS, а ОС семейства UNIX – файловую систему ext. Нередко системные программисты имеют несколько ОС на своих машинах и доступ к различным файловым системам очень важен. Вот только ОС Windows не может видеть разделы файловой системы ext без дополнительного ПО.

2. Цель и задачи исследования, планируемые результаты

Целью магистерской диссертации является исследование и разработка драйвера доступа к данным файловой системы ext4 на уровне ядра ОС Windows.

Приложение, осуществляющее доступ к разделу с файловой системой ext4 из ОС Windows должно иметь возможность обращения к низкоуровневым функциям доступа к диску. Такие функции выполняет драйвер файловой системы – программа, которая работает в режиме ядра ОС Windows. Режим ядра - привилегированный режим, сопоставленный с аппаратным 0-м кольцом защиты процессора. Он характеризуется привилегиями доступа кода к ресурсам (памяти, процессору, устройствам и т.д.), что необходимо в процессе разработки программы [3]. Поэтому разработанное программное обеспечение должно состоять из программы, обеспечивающей интерфейс пользователя и из драйвера файловой системы.

3. Обзор исследований и разработок
3.1 Программа Ext2Fsd

Ext2Fsd – это драйвер для файловой системы ext (версий 2\3\4), он реализует поддержку этих файловых систем на уровне ядра операционной системы. С разделами диска и накопителями, отформатированными в эти файловые системы, можно работать как с обычными, поддерживаемыми Windows устройствами информации в окне проводника или сторонних программ. Драйвер позволяет прозрачно читать и записывать данные [1]. Во время установки ПО пользователь может выбрать поддерживаемые версии файловой системы ext, а также автоматически монтировать разделы при запуске системы после установки будет запущен Volume Manager, где пользователь сможет смонтировать раздел ext c выбором буквы раздела. Драйвер предоставляет два варианта подключения раздела во время монтирования:

Рисунок 1. – Окно программы Ext2 Volume Manager
Рисунок 2. – Доступный смонтированный раздел ext в проводнике Windows

Достоинства: простота использования, бесплатная лицензия, монтирование разделов ext на уровне ядра ОС Windows, ext разделы видны в проводнике Windows.
Недостатки: не поддерживает журналирование файловой системы ext4, давно не обновлялось и не планируются новые версии ПО.

3.2 Программа DiskInternals Linux Reader

Программа DiskInternals Linux Reader является бесплатной и позволяет получить доступ к файлам из файловых систем Ex2/3/4, UFS2, HFS и ReiserFS/4. Кроме того, инструмент может читать обычные файловые системы, поддерживаемые Windows, такие как NTFS, Fat, exFat и т.д.

Программа имеет аккуратный интерфейс, который схож с проводников Windows, что делает Linux Reader очень простым в использовании. Программа имеет практически все стандартные функции, такие как поисковое окно, кнопки навигации, последние файлы и папки. Также можно указать вид и сортировать файлы по всем доступным свойствам [1].

Если вы находитесь в корне диска, программа Linux Reader покажет вам статистику — например, количество различных типов файлов. Также отображается круговая диаграмма.

Linux Reader также позволяет монтировать образы исходных дисков или виртуальные диски. Таким образом, любая работа, выполненная на виртуальной машине, также может быть извлечена, и все файлы могут быть легко доступны. Это удобно, если вы много работаете на виртуальных машинах или если у вас есть образ диска вашей файловой системы.

Рисунок 3. – Окно программы DiskInternals Linux Reader

Достоинства: большой список файловых систем, гарантированная поддержка продукта, понятный интерфейс.
Недостатки: открывает раздел в режиме «только чтение», для расширенных возможностей необходимо заплатить.

3.3 Плагин для Total Commander DiskInternals Reader

Любители популярного Total Commander могут извлекать данные Linux или Android внутри Windows с помощью этого файлового менеджера. Но предварительно установив в него специальный плагин. Один из таких плагинов - DiskInternals Reader, он умеет подключать и читать устройства информации, форматированные в Ext2/3/4, Fat/exFAT, HFS/HFS+, ReiserFS. Стоить заменить что для работы с этим плагином Total Commander должен быть запущен только от имени администратора. Данные копируются традиционным для Total Commander способом – клавишей F5 на вторую панель.

Рисунок 4. – Окно программы Total Commander с установленным плагином DiskInternals Reader

3.4 Программа ext2explore

Программа, предназначенная для просмотра EXT2, EXT3 или EXT4 разделов, файловой системы Linux через операционную систему Windows. Интерфейс ext2explore очень прост в использовании и состоит из двух отдельных окон для просмотра файлов.

Первое, что вам нужно сделать, это подключить жесткий диск с разделами ExtFS к компьютеру и открыть новый образ файловой системы или диска. Программа также обеспечивает поддержку внешних дисков для быстрого доступа к файлам.

Ext2explore отображает содержимое разделов в главном окне, тем самым позволяя просматривать и изменять файлы в разделе Linux EXT, без необходимости в установке других сторонних приложений.

Вы также можете создавать новые файлы или папки, использовать основные инструменты редактирования для работы с файлами, вырезать, копировать, вставлять, переименовать или удалять файлы на EXT2, EXT3 или EXT4 разделах, а также сохранять изменения.

Окно программы Ext2explore
Рисунок 5. – Окно программы Ext2explore

4. Обзор файловой системы ext4

Ext4 - четвертая версия расширенной файловой системы (Fourth Extended File System). Основой Ext4 является разделение всего пространства раздела на блоки. Часть данных нулевого блока размером в 1024 байта зарезервирована для загрузчика, или других потребностей системы. Следом за этим массивом идет суперблок (ext4 Super Block). Номера блоков считаются с 0. Если размер блока равен 1024, то суперблок находится не в нулевом блоке, а в первом. За блоком суперблока следует группа 0. Структура группы показана на рисунке 6 [2, 3]].

Структура группы ext4
Рисунок 6. – Структура группы ext4 (анимация: 7 кадров, 32 килобайт)

Одна из самых ценных особенностей файловой системы является низкая фрагментация данных. Это достигается при помощи следующих механизмов [4]:

5. Подход к разработке драйвера файловой системы
5.1 Взаимодействие пользовательской программы с драйвером

Пользовательская программа может взаимодействовать с драйвером в системе двумя способами:

В первой случае в прикладной программе вызывается какая-либо функция Win32 API (например, CreateFile), которая, затем, в зависимости от целевого объекта (файла, каталога) может вызвать в цепочке своих вызовов функцию обмена с драйвером. Фактически, в этом случае код приложения не ставит своей задачей взаимодействовать с каким-либо драйвером, просто по цепочке вызовов процедур, на определенном этапе выполнение уходит в режим ядра и там происходит вызов функции драйвера. Все это остается сокрытым от разработчика, однако возможно отследить взаимодействие при помощи отладочных средств. Второй случай возникает, когда под вызовом драйвера подразумевается не косвенный вызов (посредством вызова типовой функции), а передача при помощи специальной функции (например, DeviceIoControl) так называемого запроса ввода/вывода (I/O control request), который, в дальнейшем, инициирует формирование блока данных под названием пакет запроса ввода-вывода. Так как любой драйвер считается участником ввода-вывода, Windows посылает им специальные пакеты - IRP (I/O Request Packet - пакет запроса ввода-вывода). При чем взаимодействие пользовательской программы с драйвером происходит только через системные вызовы (Windows API). Этот вызов приводит к тому, что диспетчер ввода-вывода формирует на основе него IRP. Драйвер, которому присылается этот пакет, может отложить выполнение задачи. Так в Windows реализована поддержка асинхронного ввода-вывода.

5.2 Разработка драйвера файловой системы

Драйвер файловой системы (FSD - File System Driver) - драйвер, который управляет форматом файловой системы. Для работы ему необходимо регистрироваться у диспетчера ввода-вывода, а также тесно взаимодействовать с диспетчером памяти для управления кэшем. После того, как драйвер зарегистрирован, диспетчер может вызвать его для распознавания томов файловой системы. Процесс распознавания включает в себя анализ загрузочного сектора и анализ метаданных файловой системы. Если том не распознался, ему назначают драйвер Raw, который предлагает отформатировать том. Драйвер Raw предоставляет чтение и запись на уровне секторов, что все-таки позволяет получить доступ к устройству [5]. Самым обычным способом доступа к файлам является вызов функций CreateFile, ReadFile, WriteFile. Открытие файла происходит при помощи функции CreateFile. Она вызывает функцию NtCreateFile, в которую передается полный путь к имени файла с префиксом «\??». В свою очередь, NtCreateFile вызывает функцию ObOpenObjectByName, которая выполняет анализ имени и с помощью диспетчера объектов преобразует букву диска в имя \Device\HarddiskVolume(x), где (x) - номер, который присвоила разделу система. Функция IopParseDevice, которую она вызывает проверяет данные о безопасности и генерирует IRP запрос IRP_MJ_CREATE. Затем запрос передается, с помощью функции IoCallDriver, самому драйверу. Драйвер обязан найти нужный файл и, при успешном поиске, а также при соответствии учетных данных, должен вернуть код успешного завершения. Диспетчер объектов создает дескриптор для файлового объекта и вернет его по цепочке функций в CreateFile. Далее могут следовать различные вызовы для чтения и записи файлов. С Windows 2000, на смену модели драйверов VxD, пришла модель WDM (Windows driver model). Она обладала расширенными возможностями, однако возросла сложность написания и поддержки кода. Для того, чтобы облегчить процесс разработки Microsoft выпустила фреймворк WDF (Window Driver Frameworks), который принес с собой два инструментария: Kernel Mode Driver Framework (KMDF) и User Mode Driver Framework (UMDF). Первое служит для написания стандартных драйверов уровня ядра, а второй - для написания определенных классов драйверов, которые могут исполняться на уровне пользователя.

Выводы

На момент написания данного реферата:

Рассмотренные утилиты не являются единственными для решения задачи доступа из Windows к разделам с файловой системой Ext4. Однако большинство программ имеет аналогичные недостатки – предоставление не полного доступа к такому разделу. Поэтому актуальной остается задача разработки приложения, предоставляющего из Windows полный доступ к разделам с Ext4. Структура файловой системы Ext4, характерной для большинства ОС семейства UNIX, во многом отличается от файловых систем ОС Windows. Поэтому на первом этапе разработки приложения необходимо рассмотреть особенности этой файловой системы.

Драйвер файловой системы ext4 для Windows необходим по причине того, что до сих пор нет полной реализации файловой системы в режиме записи. Дальнейшие исследования и разработка будут связаны с написанием драйвера на языке программирования С/С++. С помощью этого драйвера пользователь из ОС Windows сможет легко монтировать разделы, читать и редактировать файлы ФС ext4. На основе анализа достоинств и недостатков существующих решений, изучив структуру и методы доступа к файловой системе ext4, мы можем поставить требования к драйверу, который сможет обеспечить доступ на чтение и редактирование файлов и каталогов ФС ext4 из-под ОС Windows: