-
Notifications
You must be signed in to change notification settings - Fork 0
TheDoctorTimeLord/defragmenter
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
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 treeAbout
Defragnenter of the FAT16/32 file system. Developed by python core.
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published