Разработка системной утилиты дефрагментации логического диска
Алексеев Д.М., Пескова О.Ю.
Южный федеральный университет, г. Таганрог
Введение
Отличительным признаком современного мира является глобальная компьютеризация, компьютер стал неотъемлемой частью любой сферы деятельности человека. Каждый из нас сталкивается с компьютерными технологиями ежедневно (когда платим за услуги ЖКХ, покупаем еду в супермаркете, видим рекламные баннеры, работаем в сети Интернет). При этом мы даже не задумываемся о том, как работает это гениальное устройство.
Что же такое «компьютер»? Компьютер - это средство для передачи, хранения и обработки информации. Но как же это устройство осуществляет ее накопление? Как размещены и организованы файлы в современных компьютерах? Ответ на этот вопрос кроется в понятии файловая система.
Файловая система - это часть операционной системы, назначение которой состоит в том, чтобы обеспечить пользователю удобный интерфейс при работе с данными, хранящимися на диске, и обеспечить совместное использование файлов несколькими пользователями и процессами.[5, 6]
На компьютерах под управлением операционной системой Windows информация на запоминающих устройствах организована файловой системой NTFS. Одним из свойств данной файловой системы является так называемая фрагментация файлов. Она представляет собой процесс разбиения каждого файла на небольшие фрагменты при записи на диск.
По мере использования информации (добавление новой, удаление или перемещение старой) разные блоки одного файла физически могут оказаться записанными не подряд. В результате, считывающее устройство тратит большее количество времени на поиск и чтение блоков одного файла, что приводит к увеличению времени чтения. [4]
Решение данной проблемы заключается в выполнении дефрагментации.
Дефрагментация - процесс обновления и оптимизации логической структуры раздела диска с целью обеспечения хранения файлов в непрерывной последовательности кластеров. После дефрагментации ускоряется чтение и запись файлов, а, следовательно, и работа программ. [4]
Процесс выполнения дефрагментации логического диска можно реализовать как вручную, так и программно, запустив необходимый скрипт.
Целью моей работы является создание в среде разработки JetBrains PyCharm Community Edition 3.4.1 приложения (системной утилиты), выполняющей дефрагментацию логических дисков. Разработанная программа должна иметь следующий функционал и выполнять такие задачи, как:
1. Сбор информации о доступных разделах, их состоянии, сохранение информации в файле
2. Вывод информации о доступных разделах на рабочую область экрана
3. Выполнение анализа выбранного раздела на предмет необходимости выполнения дефрагментации
4. Сохранение отчета по проведенному анализу в файл, имя которого определяется временем и датой выполнения анализа
5. Вывод на рабочую область экрана содержания отчета
6. Выполнение дефрагментации выбранного раздела
7. Сохранение отчета о деталях проведенной дефрагментации в файл, имя которого определяется временем и датой выполнения дефрагментации
8. Вывод на рабочую область экрана содержания отчета
В ходе достижения поставленной цели мною будут рассмотрены следующие основные пункты:
1. Теоретические основы
2. Основные модули программы
3. Руководство программиста
4. Руководство пользователя
1. Теоретические основы
1.1 Файловая система
Файловая система - это часть операционной системы, назначение которой состоит в том, чтобы обеспечить пользователю удобный интерфейс при работе с данными, хранящимися на диске, и обеспечить совместное использование файлов несколькими пользователями и процессами. В широком смысле понятие "файловая система" включает:
- совокупность всех файлов на диске,
- наборы структур данных, используемых для управления файлами, такие, например, как каталоги файлов, дескрипторы файлов, таблицы распределения свободного и занятого пространства на диске,
- комплекс системных программных средств, реализующих управление файлами, в частности: создание, уничтожение, чтение, запись, именование, поиск и другие операции над файлами. [5, 6, 7]
Файлы идентифицируются именами. Пользователи дают файлам символьные имена, при этом учитываются ограничения ОС как на используемые символы, так и на длину имени. До недавнего времени эти границы были весьма узкими. Так в популярной файловой системе FAT длина имен ограничивается известной схемой 8.3 (8 символов - собственно имя, 3 символа - расширение имени), а в ОС UNIX System V имя не может содержать более 14 символов. Однако пользователю гораздо удобнее работать с длинными именами, поскольку они позволяют дать файлу действительно мнемоническое название, по которому даже через достаточно большой промежуток времени можно будет вспомнить, что содержит этот файл. Поэтому современные файловые системы, как правило, поддерживают длинные символьные имена файлов. Например, Windows NT в своей новой файловой системе NTFS устанавливает, что имя файла может содержать до 255 символов, не считая завершающего нулевого символа.[7]
При переходе к длинным именам возникает проблема совместимости с ранее созданными приложениями, использующими короткие имена. Чтобы приложения могли обращаться к файлам в соответствии с принятыми ранее соглашениями, файловая система должна уметь предоставлять эквивалентные короткие имена (псевдонимы) файлам, имеющим длинные имена. Таким образом, одной из важных задач становится проблема генерации соответствующих коротких имен.
Длинные имена поддерживаются не только новыми файловыми системами, но и новыми версиями хорошо известных файловых систем. Например, в ОС Windows 95 используется файловая система VFAT, представляющая собой существенно измененный вариант FAT. Среди многих других усовершенствований одним из главных достоинств VFAT является поддержка длинных имен. Кроме проблемы генерации эквивалентных коротких имен, при реализации нового варианта FAT важной задачей была задача хранения длинных имен при условии, что принципиально метод хранения и структура данных на диске не должны были измениться.[5, 7]
Обычно разные файлы могут иметь одинаковые символьные имена. В этом случае файл однозначно идентифицируется так называемым составным именем, представляющем собой последовательность символьных имен каталогов. В некоторых системах одному и тому же файлу не может быть дано несколько разных имен, а в других такое ограничение отсутствует. В последнем случае операционная система присваивает файлу дополнительно уникальное имя, так, чтобы можно было установить взаимно-однозначное соответствие между файлом и его уникальным именем. Уникальное имя представляет собой числовой идентификатор и используется программами операционной системы. Примером такого уникального имени файла является номер индексного дескриптора в системе UNIX.
Файлы бывают разных типов: обычные файлы, специальные файлы, файлы-каталоги.
Обычные файлы в свою очередь подразделяются на текстовые и двоичные. Текстовые файлы состоят из строк символов, представленных в ASCII-коде. Это могут быть документы, исходные тексты программ и т.п. Текстовые файлы можно прочитать на экране и распечатать на принтере. Двоичные файлы не используют ASCII-коды, они часто имеют сложную внутреннюю структуру, например, объектный код программы или архивный файл. Все операционные системы должны уметь распознавать хотя бы один тип файлов - их собственные исполняемые файлы.
Специальные файлы - это файлы, ассоциированные с устройствами ввода-вывода, которые позволяют пользователю выполнять операции ввода-вывода, используя обычные команды записи в файл или чтения из файла. Эти команды обрабатываются вначале программами файловой системы, а затем на некотором этапе выполнения запроса преобразуются ОС в команды управления соответствующим устройством. Специальные файлы, так же как и устройства ввода-вывода, делятся на блок-ориентированные и байториентированные.
Каталог - это, с одной стороны, группа файлов, объединенных пользователем исходя из некоторых соображений (например, файлы, содержащие программы игр, или файлы, составляющие один программный пакет), а, с другой стороны, - это файл, содержащий системную информацию о группе файлов, его составляющих. В каталоге содержится список файлов, входящих в него, и устанавливается соответствие между файлами и их характеристиками (атрибутами).
В разных файловых системах могут использоваться в качестве атрибутов разные характеристики, например:
- информация о разрешенном доступе,
- пароль для доступа к файлу,
- владелец файла,
- создатель файла,
- признак "только для чтения",
- признак "скрытый файл",
- признак "системный файл",
- признак "архивный файл",
- признак "двоичный/символьный",
- признак "временный" (удалить после завершения процесса),
- признак блокировки,
- длина записи,
- указатель на ключевое поле в записи,
- длина ключа,
- времена создания, последнего доступа и последнего изменения,
- текущий размер файла,
- максимальный размер файла.
Каталоги могут непосредственно содержать значения характеристик файлов, как это сделано в файловой системе MS-DOS, или ссылаться на таблицы, содержащие эти характеристики, как это реализовано в ОС UNIX (рис. 1.1). Каталоги могут образовывать иерархическую структуру за счет того, что каталог более низкого уровня может входить в каталог более высокого уровня (рис. 1.2). [8]
Иерархия каталогов может быть деревом или сетью. Каталоги образуют дерево, если файлу разрешено входить только в один каталог, и сеть - если файл может входить сразу в несколько каталогов. В MS-DOS каталоги образуют древовидную структуру, а в UNIX'е - сетевую. Как и любой другой файл, каталог имеет символьное имя и однозначно идентифицируется составным именем, содержащим цепочку символьных имен всех каталогов, через которые проходит путь от корня до данного каталога.
Рис. 1.1. Структура каталогов: а - структура записи каталога MS-DOS (32 байта); б - структура записи каталога ОС UNIX.
Рис. 1.2. Логическая организация файловой системы: а - одноуровневая; б - иерархическая (дерево); в - иерархическая (сеть).
1.2 NTFS
утилита дефрагментация логический диск
NTFS - предпочитаемая файловая система в семействе Windows 2003 Server, Windows XP, Windows 2000 и Windows NT. Она была разработана, чтобы удовлетворять требованиям быстродействующих файловых и сетевых серверов, а так же персональных ЭВМ и, при этом, обойти многие из ограничений, ранее сделанных в файловых системах FAT16 и FAT32. Наиболее важными из этих требований следуют ниже:
- Восстанавливаемость данных. NTFS ограничивает возможность порчи данных, организовывая операции ввода-вывода (I/O) при помощи транзакций (групповых операций). Транзакции являются элементарными операциями, который означают, что или вся операция ввода-вывода (I/O) должна завершиться, или ни одно из этих действий не может завершиться. Если что-нибудь прерывает транзакцию, происходящую из-за потери электропитания компьютера или отмены операции ввода-вывода (I/O), NTFS делает все возможное, чтобы гарантировать, что любое изменение, сделанное в файловой системе (поскольку часть операции вводавывода (I/O) была отменена или был сделан откат назад), возвращает файловую систему в ее прежнее состояние, перед тем как операция ввода-вывода (I/O) началась.
- NTFS является также и полностью восстанавливаемой файловой системой. Она предназначена, чтобы восстанавливать последовательность данных на диске после сбоя центрального процессора, системного аварийного отказа или ошибки ввода - вывода (I/O). NTFS дает возможность операционной системе, чтобы восстановиться без использования вами утилит проверки диска. Однако NTFS обеспечивают некоторые дисковые утилиты в случае, если восстановление завершается ошибкой, или искажение данных происходит за пределами управления файловой системы.
- Сохранение устойчивости при сбоях. Методы хранения избыточных данных могут использоваться NTFS, чтобы гарантировать, что, если данные разрушаются на одном физическом диске, то может извлечься сохраненная копия из зеркала диска. NTFS всегда использует избыточность данных, чтобы защитить внутренние структуры данных, содержащие метаданные, очень важные для целостности тома.
- Защита данных. NTFS выполняет файлы и каталоги как защищенные объекты согласно архитектуре защиты (системы безопасности) объекта Windows. Доступ к объектам файла и каталога в NTFS может быть ограничен конкретным пользователям и их группам в среде этой архитектуры. Функции защиты данных для файлов и каталогов не включаются в файловых системах FAT. [3] Другие улучшенные функции, обеспечиваемые NTFS - перечислены ниже:
- Многочисленные потоки данных. NTFS файлы могут состоять из более, чем одного потока. Дополнительные потоки могут содержать любой вид данных, хотя обычно это - данные, характеризующие файл или метаданные.
- Имена в Unicode. Unicode - стандартный символьный набор, используемый в NTFS. Он заменяет устаревший однобайтовый символьный набор ASCII. Каждый символ, используемый в каждом главном естественном языке, представлен уникальным двухбайтовым числом в символьном наборе Unicode.