- Усовершенствованная индексация атрибута файла. NTFS включает в себя способность индексировать атрибуты файла в качестве средства расположения и сортировки многочисленных файлов, которые быстро совместно используют похожие данные. В файловых системах FAT32 и FAT16 Вы можете индексировать имена файлов, но не их атрибуты. Также, эти файловые системы не имеет функциональных возможностей, чтобы сортировать индексированные имена файлов FAT32 и FAT16.
- Динамическое перераспределение плохих кластеров. Когда операция чтения на томе NTFS, который не защищен от ошибок, встречает испорченные данные в группе секторов, каждый сектор в группе (кластере), отмечается как плохой, и последующие попытки выполнить операции чтения в этом секторе приведут к возвращению ошибки. В том же самом сценарии в файловых системах FAT, сама файловая система не отмечает дефектные секторы - пользователь должен запустить утилиту Chkdsk.exe, чтобы сделать это.
- Жесткие связи и подсоединения. Жесткие связи и подсоединения - это два способа, которыми объекты-хранилища могут быть связаны в среде NTFS.
- Поддержка сжатия и разреженного файла. Тома NTFS поддерживают сжатие файла на базе отдельного файла. Алгоритм сжатия файла, используемый NTFS - это метод сжатия Lempel-Ziv. Это - не имеющий потерь алгоритм сжатия, что означает, что данные, при сжатии и восстановлении из сжатого состояния файла, не теряются, в противоположность алгоритмам сжатия с потерями типа формата файла изображения JPEG, где некоторые данные теряются каждый раз, когда происходят сжатие и восстановление сжатых данных.
- Системные журналы изменений. NTFS создает и поддерживает системные журналы изменений для каждого тома, которые отслеживают все изменения, сделанные в них.
- Отслеживание распределенных связей. Оболочка Windows дает возможность пользователю создать файлы на её рабочем столе, связанные с приложениями, которые постоянно находятся в другом месте на томе. Меню Пуск, которое пользователь может конфигурировать, содержит много образцов этого вида связей. Также и технология связывания и внедрения объекта, или OLE, дает возможность прикладной программе внедрить связи от внешних файлов внутрь файлов, которые они создают и поддерживают. Составные части набора Office 2000: Word, PowerPoint и Excel-- являются примерами приложений, которые используют OLE технологию. Проблема возникает в предыдущих случаях тогда, когда файл, будучи связанным (источник связи) перемещается, что делает его недоступным через посредство связи также, называемый как клиент связи. Отслеживание распределенной связи было сначала введено в версии NTFS, поставляемую с Windows 2000, чтобы дать возможность клиентским приложениям проследить за источниками связи, которые переместились. В результате этого, приложения и пользователи, которые создают связи, не должны обслуживать редактирование связи самостоятельно, когда источник ссылки перемещается.
- Шифрование. NTFS обеспечивает Шифрующую файловую систему, или (EFS) для криптографической защиты файлов и каталогов.
- Поддержка POSIX. Ниже перечислены функциональные возможности POSIX, которые были введены в Windows 2000:
а) Файлы могут получить доступ в файловых системах NTFS в соответствии с соглашениями об именовании POSIX. Соглашения POSIX допускают имена файлов, которые имеют концевые пробелы, имена файла, которые имеют точки в конце и имена файла, которые являются идентичными, если не считать регистр символов.
б) Разрешаются пересечения, где атрибуты защиты каждого родительского каталога в пути файла или каталога используются в определении, имеет ли конкретный пользователь доступ к нему.
в) Отметки времени "Файл изменил время".
г) Жесткие ссылки в POSIX-стиле.
- API дефрагментации. Файл сохраняется на дисководе и другом носителе информации в одном или нескольких кластерах. Кластеры - это элементарный модуль данных, составленных из одного или нескольких секторов. Сектора - это физические модули сохранения данных.
Поскольку файл записывается на диск, файл не может записаться в непрерывных кластерах. Кластеры, состоящие из нескольких несмежных участков, замедляют процесс чтения и записи файла. Удаленные друг от друга на диске кластеры, состоящие из нескольких несмежных участков, обрабатываются медленнее из-за увеличенного времени, которое тратиться для перемещения головок чтения/записи жесткого диска к ним. Файл с кластерами, состоящими из нескольких несмежных участков, как говорят - фрагментирован. Чтобы оптимизировать файлы для быстрого доступа, том может дефрагментироваться.
- Дефрагментация - это процесс перемещения кластеров файла на диске, который делает их непрерывными. NTFS не выполняет дефрагментацию, но с версией 5.0 это действие предоставляется для приложений, чтобы выполнять дефрагментацию при помощи вызова API.
- Точки повторной обработки. В среде NTFS, файл или каталог могут содержать точку повторной обработки, которая является совокупностью определяемых пользователем данных.
- Каталоги как точки повторной обработки тома. Точки повторной обработки тома - это каталоги в томе, которые приложение может использовать, чтобы "собрать" другой том, то есть установить его для использования в месте, которое задает пользователь. Другими словами, Вы можете использовать точку повторной обработки тома как шлюз к тому. Когда том установлен в точке повторной обработки тома, пользователи и приложения могут видеть монтируемый том с помощью точки повторной обработки тома или имени диска. Например, при помощи установленной точки монтирования тома, пользователь может видеть диск D как "C:\mnt\Ddrive" так же как "D:".
Используя точки повторной обработки тома, Вы можете объединить в одну логическую файловую систему в корне различные файловые системы такие как NTFS, 16-разрядная файловая система FAT, файловых система ISO-9660 для диска CD-ROM и так далее. Ни пользователи, ни приложения не нуждаются в информации о томе, на котором находится конкретный файл. Вся информация, которой они должны определить местонахождение заданного файла - полный путь к нему. Тома могут быть перестроены, заменены или разделены на многие тома без пользователей или приложений, которые должны изменить назначения. [3, 7]
1.3 Дефрагментация
Дефрагментация -- процесс обновления и оптимизации логической структуры раздела диска с целью обеспечения хранения файлов в непрерывной последовательности кластеров. После дефрагментации ускоряется чтение и запись файлов, а следовательно и работа программ, ввиду того, что последовательные операции чтения и записи выполняются быстрее случайных обращений (например, для жесткого диска при этом не требуется перемещение головки). Другое определение дефрагментации: перераспределение файлов на диске, при котором они располагаются в непрерывных областях.[4]
Длинные файлы занимают несколько кластеров. Если запись производится на незаполненный диск, то кластеры, принадлежащие одному файлу, записываются подряд. Если диск переполнен, на нём может не быть цельной области, достаточной для размещения файла. Тем не менее, файл все-таки запишется, если на диске много мелких областей, суммарный размер которых достаточен для записи. В этом случае файл записывается в виде нескольких фрагментов.
Процесс разбиения файла на небольшие фрагменты при записи на диск называется фрагментацией. Если на диске много фрагментированных файлов, скорость чтения носителя уменьшается, поскольку поиск кластеров, в которых хранятся файлы, на жёстких дисках требует времени. На флеш-памяти, например, время поиска не зависит от расположения секторов, и практически равно нулю, поэтому для них дефрагментация не требуется.
Некоторое ПО требует, чтобы определённые файлы в обязательном порядке хранились в последовательно расположенных секторах (например, встроенный эмулятор CDROM в приводе Zalman VE-200 предъявляет такое требование к файлам образов). Даже если в такой привод будет установлен твердотельный накопитель, очевидно, дефрагментация ему всё-таки понадобится.
Дефрагментация чаще всего используется для таких файловых систем, как File Allocation Table для MS-DOS и Microsoft Windows, так как в программах для работы с ними обычно не предусмотрено никаких средств для предотвращения фрагментации, и она появляется даже на почти пустом диске и небольшой нагрузке.[4]
Помимо замедления компьютера в работе с файловыми операциями (таких как чтение и запись), фрагментация файлов негативно сказывается на «здоровье» жёсткого диска, так как заставляет постоянно перемещаться позиционирующие головки диска, которые осуществляют чтение и запись данных. Для устранения проблемы фрагментации существуют программы - дефрагментаторы, принцип работы которых заключается в «сборе» каждого файла из его фрагментов. Общим недостатком таких программ является их медленная работа -- процесс дефрагментации обычно занимает очень много времени (до нескольких часов).
Несмотря на то, что среди программ такого рода имеются довольно популярные и известные, хорошую дефрагментацию можно провести своими силами. Для этого достаточно создать на диске новый раздел с файловой системой, после чего просто скопировать на этот логический диск те файлы, которые на нём будут храниться. Во время такого копирования на пустой диск, запись данных осуществляется последовательно, без фрагментации. Кроме того, сам процесс записи файлов занимает в несколько раз меньше времени, чем дефрагментация с помощью программ.[4]
Знание файловой структуры и принципов работы жёсткого диска помогает сильно уменьшить фрагментацию файлов благодаря правильной организации работы пользователя. Эта организация заключается в том, что на чистый диск сначала записываются те файлы, которые предполагается хранить долго: любимые фильмы, архивы, музыку. Те же файлы, которые не планируется долго хранить, лучше записывать в конец диска: их удаление не вызовет дробления других файлов.[4, 8]
2. Руководство программиста
2.1 Общая информация
Программа дефрагментации логического диска «Defragmentation Utility» создана в среде разработки JetBrains PyCharm Community Edition 3.4.1 на языке программирования Python. Реализована данная программа в качестве консольного приложения.
2.2 Функционал и возможности программы
При разработке программы преследовались следующие цели:
? Быстродействие. Процесс дефрагментации разделов диска может занимать от нескольких минут до нескольких часов, в зависимости от типа носителя, его объема и степени фрагментации файлов. Поэтому, для того, чтобы оптимизировать затраты времени при использовании программы, было решено использовать системные возможности ОС для дефрагментации, которые программа вызывает в ходе работы.
? Возможность удаленного использования. Зачастую администраторам требуется провести дефрагментацию носителей нескольких клиентов, которые могут находиться на существенном отдалении. Для этого при разработке программы был использован язык программирования Python. Благодаря этому, скрипт-файлы программы можно поместить на сервере, затем, удаленно подключившись к нему, запустить программу, которая выведет всю необходимую информацию о проведении дефрагментации или анализа разделов носителей, а также укажет путь к лог-файлам. В связи с этим для данной программы был разработан консольный интерфейс.
? Протоколирование результатов работы. Для того, чтобы можно было отследить историю дефрагментации разделов носителя на машине, программа была создана таким образом, чтобы она могла создавать лог-файлы с отметками даты и времени. Данная возможность поможет администратору или пользователю отследить, когда была запущена последний раз дефрагментация, сколько раз она запускалась вообще, а также просмотреть результаты всех действий.
Резюмируя все вышесказанное, можно заключить, что разработанная программа должна иметь следующий функционал и выполнять такие задачи, как:
1. Сбор информации о доступных разделах, их состоянии, сохранение информации в файле
2. Вывод информации о доступных разделах на рабочую область экрана
3. Выполнение анализа выбранного раздела на предмет необходимости выполнения дефрагментации
4. Сохранение отчета по проведенному анализу в файл, имя которого определяется временем и датой выполнения анализа
5. Вывод на рабочую область экрана содержания отчета
6. Выполнение дефрагментации выбранного раздела
7. Сохранение отчета о деталях проведенной дефрагментации в файл, имя которого определяется временем и датой выполнения дефрагментации
8. Вывод на рабочую область экрана содержания отчета
2.3 Модули программы
Программный код консольного приложения Defragmentation Utility можно условно разделить на несколько логических структур (программных модулей):
1) подключение используемых в программе стандартных библиотек (модулей) Python.
2) создание заголовков для консольного приложения. В данной структуре реализован процесс вывода на рабочую область экрана названия программы, ее заголовков, а также списка найденных на данном компьютере разделов с краткой информацией о них. Работа данного программного модуля базируется на использовании операторов цикла (for… in…), метода табуляции (\n - осуществляет переход на следующую строку), метода print (вывод текста на экран).
3) получение списка найденных разделов с краткой информацией о них. В данной структуре реализован процесс получения списка найденных разделов, а также сведения об имени найденного раздела, его размере, типе, состоянии, типе файловой системы. Работа данного программного модуля базируется на использовании операторов цикла (for… in…), методов list (осуществляет создание списка), system (осуществляет выполнение системной команды), open (открывает (при необходимости создает) файл для чтения), readlines (осуществляет построчное считывание данных из файла), find (выполняет поиск подстроки в строке), append (осуществляет добавление элемента в конец списка), метода конкатенации.