Skip to content

Defragnenter of the FAT16/32 file system. Developed by python core.

Notifications You must be signed in to change notification settings

TheDoctorTimeLord/defragmenter

Repository files navigation

Замотаев Фёдор.
Дефрагментатор.
python 3.6+
Добавлена фрагментация и дефрагментация.
Запустите main.py. Аргументы: [путь до образа] [{"tree", "fragmentation", "defragmentation"}]

Убедительная просьба не запускать с ключами fragmentation и defragmentation на образах "fat16_test" и "fat32_test"
Они необходимы для тестирования и в них важен порядок кластеров

Принципы работы алгоритма дефрагментации:
Для начала мы получаем список абстакций файлов (all_dir_entries_info_list). Они нам будут нужны для того, чтобы:
1) знать все файлы, имеющиеся на диске
2) знать входные точки файлов, чтобы уметь собирать их подряд
В алгоритме истользуется счётчик, который определяет позицию, на которую нужно будет поставить следующий кластер.

Этапы работы алгоритма:
1) Мы берём очередной файл
2) Для текущего файла выбираем первый кластер в цепочке
3) Будем выстраивать выбранный файл начиная с позиции, на которую указывает счётчик
4) Будем пропускать позиции, на которых находятся кластеры корневой директории, так как их перемещение отличается от пере-
   мещения обычных кластеров
5) Поменяем местами очередной кластер файла и кластер, лежащий на позиции, на которую указывает счётчик
6) Теперь очередной кластер файла оказался на нужной нам по порядку позиции. Узнаём номер следующего кластера в файле
7) Если номер следующего кластера соответвует значению End Of Cluster, то возвращаемся к пункту 1

Алгоритм будет работать до тех пор, пока не переберёт и не выстроит друг за другом все файлы.
Не трудно заметить, что в результате работы алгоритма мы выстроим все файлы друг за другом без пересечений. Поскольку мы всегда
ставим очередной кластер на новое место, отмеченное счётчиком, то файлы накладываться друг на друга не будут. Так как все
эти файлы изначально были на диске, то мы точно не займём больше места, чем есть в образе. Алгоритм не зависит от начального
следования кластеров внутри одного файла, что разрешает ситуацию: A1A2B3B2B1 к A1A2B1B2B3 или B1B2B3A1A2.
При этом, согласно документации, 0 и 1-й кластеры зарезервированы системой и используются по её усмотрению, поэтому мы их
не трогаем.

В данном случае механизм swap кластеров используется для нормального перемещения кластеров. В таком виде образ во
время дефрагментации делится на область, с которой мы закончили работу (всё до счётчика) и область, которая используется,
как большой буфер для файлов (посли и включая позицию счётчика)
Поскольку swap кластеров гарантирует сохранение целостности данных абстаркции, всё будет отрабатывать верно.

Внесение ошибок:
Для внесения ошибок введите название нужной ошибки и название папки, в которую вы её хотите внести с ключом -f
Название папки можно узнать, посмотрев дерево каталогов (параметр tree), и выбрав нужный вам каталог. Имя писать с учётом
регистра без / вначале.

В качестве образов для дефрагментации используются vhd образы.

Пример запуска:
main.py fat16.vhd tree

About

Defragnenter of the FAT16/32 file system. Developed by python core.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages