В процессе обслуживания файловых систем , дефрагментация это процесс , который уменьшает степень фрагментации . Это достигается путем физической организации содержимого запоминающего устройства большой емкости, используемого для хранения файлов, в наименьшее количество смежных областей (фрагментов, экстентов ). Он также пытается создать более крупные области свободного пространства, используя уплотнение, чтобы предотвратить возврат фрагментации. Некоторые утилиты дефрагментации пытаются хранить файлы меньшего размера в одном каталоге вместе, поскольку к ним часто обращаются последовательно.
Дефрагментация полезна и актуальна для файловых систем на электромеханических дисковых накопителях ( жестких дисках , дисководах гибких дисков и оптических дисках ). Движение головок чтения / записи винчестера по различным областям диска при доступе к фрагментированным файлам происходит медленнее, по сравнению с доступом всего содержимого нефрагментируемого файла последовательно , без перемещения головок чтения / записи , чтобы искать другие фрагменты.
Фрагментация происходит, когда файловая система не может или не будет выделять достаточно непрерывного пространства для хранения полного файла как единицы, а вместо этого помещает его части в промежутки между существующими файлами (обычно эти промежутки существуют, потому что они ранее содержали файл, который файловая система имеет впоследствии удален или потому, что файловая система изначально выделила избыточное пространство для файла). Файлы, которые часто добавляются (как в случае с файлами журнала), а также частое добавление и удаление файлов (как в случае с электронной почтой и кешем веб-браузера), файлы большего размера (как с видео) и большее количество файлов способствуют фрагментации и, как следствие, производительности потеря. Дефрагментация пытается решить эти проблемы.
В противном случае пустой диск имеет пять файлов, от A до E, каждый из которых использует 10 блоков пространства (для этого раздела блок - это единица распределения файловой системы ; размер блока устанавливается при форматировании диска и может иметь любой размер, поддерживаемый файловая система). На чистом диске все эти файлы будут размещены один за другим (см. Пример 1 на изображении). Если бы файл B был удален, было бы два варианта: пометить пространство для файла B как пустое, чтобы использовать его позже, или переместите все файлы после B, чтобы пустое место было в конце. Поскольку перемещение файлов может занять много времени, если необходимо переместить много файлов, обычно там просто оставляют пустое пространство, отмеченное в таблице как доступное для новых файлов (см. Пример 2 на изображении).[1] Когда выделяется новый файл F, требующий 6 блоков пространства, он может быть помещен в первые 6 блоков пространства, в котором ранее находился файл B, а следующие 4 блока останутся доступными (см. Пример 3 в изображение). Если добавляется еще один новый файл, G, и ему требуется всего 4 блока, он может занимать пространство после F и перед C (пример 4 на изображении).
Однако, если затем необходимо расширить файл F, есть три варианта, поскольку пространство сразу после него больше не доступно:
Кроме того, понятие «фрагментация» не ограничивается только отдельными файлами, имеющими несколько экстентов на диске. Например, группа файлов, обычно читаемых в определенной последовательности (например, файлы, к которым программа обращается во время загрузки, которая может включать определенные библиотеки DLL , различные файлы ресурсов, аудио / видео файлы мультимедиа в игре), может считаться фрагментированной, если они не находятся в последовательном порядке загрузки на диск, даже если эти отдельные файлы нефрагментированный; головки чтения / записи должны будут искать эти (нефрагментированные) файлы случайным образом для последовательного доступа к ним. Некоторые группы файлов могут быть изначально установлены в правильной последовательности, но со временем расходятся по мере удаления определенных файлов в группе. Обновления являются частой причиной этого, потому что для обновления файла большинство программ обновления обычно сначала удаляют старый файл, а затем записывают на его место новый, обновленный. Однако большинство файловых систем не записывают новый файл в одно и то же физическое место на диске. Это позволяет несвязанным файлам заполнять оставшиеся пустые места.
Дефрагментация - это операция перемещения файловых экстентов (блоков физического размещения) таким образом, чтобы они в конечном итоге объединялись, желательно в один. Для этого обычно требуется как минимум две операции копирования: одна для перемещения блоков в свободное рабочее пространство на диске, чтобы можно было больше перемещаться, а другая для окончательного перемещения блоков на их предполагаемое место. В такой парадигме никакие данные никогда не удаляются с диска, поэтому операцию можно безопасно остановить даже в случае отключения питания. На картинке статьи показан пример.
Для дефрагментации диска программа дефрагментации (также известная как «дефрагментатор») может перемещать файлы только в пределах доступного свободного пространства. Это интенсивная операция, и ее нельзя выполнить в файловой системе с небольшим или отсутствующим свободным пространством. Во время дефрагментации производительность системы будет снижена, и лучше оставить компьютер в покое во время процесса, чтобы дефрагментатор не запутался из-за неожиданных изменений файловой системы. В зависимости от используемого алгоритма может оказаться выгодным выполнение нескольких проходов, а может и не быть. Реорганизация, связанная с дефрагментацией, не изменяет логическое расположение файлов (определяемое как их расположение в структуре каталогов ).
Помимо дефрагментации программных файлов, инструмент дефрагментации также может сократить время, необходимое для загрузки программ и открытия файлов. Например, дефрагментатор Windows 9x включал Intel Application Launch Accelerator, который оптимизировал программы на диске, помещая дефрагментированные программные файлы и их зависимости рядом друг с другом в том порядке, в котором программа их загружает, для более быстрой загрузки этих программ. [2] В Windows хороший дефрагментатор будет читать файлы предварительной выборки, чтобы идентифицировать как можно больше этих групп файлов и помещать файлы в них в порядке доступа.
В начале жесткого диска внешние дорожки имеют более высокую скорость передачи данных, чем внутренние дорожки. Размещение часто используемых файлов на внешних дорожках увеличивает производительность. [3] Сторонние дефрагментаторы, такие как MyDefrag, перемещают часто используемые файлы на внешние дорожки и дефрагментируют эти файлы. [4]
Усовершенствования в современных жестких дисках, такие как кэш ОЗУ , более высокая скорость вращения пластин, организация очереди команд ( SCSI / ATA TCQ или SATA NCQ ) и большая плотность данных, в некоторой степени снижают негативное влияние фрагментации на производительность системы, хотя и увеличивает количество часто используемых данных. количество компенсирует эти преимущества. Однако современные системы получают огромную прибыль от доступной в настоящее время огромной дисковой емкости, поскольку частично заполненные диски фрагментируют намного меньше, чем полные диски [5], а на жестком диске большой емкости один и тот же раздел занимает меньший диапазон цилиндров, что приводит к более быстрому поиску. . Однако среднее время доступаникогда не может быть меньше половины оборота пластин, а вращение пластин (измеряется в об / мин) - это скоростная характеристика жестких дисков, которая переживает самый медленный рост за последние десятилетия (по сравнению со скоростью передачи данных и временем поиска), поэтому минимизация количества поисков остается полезным в большинстве приложений с большим объемом памяти. Дефрагментация - это именно то, что нужно: гарантировать, что для каждого файла существует не более одного поиска, считая только переходы к несмежным дорожкам.
Распространенной стратегией оптимизации дефрагментации и уменьшения воздействия фрагментации является разделение жесткого диска (ов) таким образом, чтобы разделить разделы файловой системы, на которые выполняется гораздо больше операций чтения, чем записи, из более изменчивых зон, где файлы создаются и удаляются. часто. Каталоги, содержащие профили пользователей, постоянно изменяются (особенно, когда каталог Temp и кеш веб-браузера создают тысячи файлов, которые удаляются за несколько дней). Если файлы из профилей пользователей хранятся в выделенном разделе (как это обычно делается в рекомендуемых файловых системах UNIX ), где он обычно хранится в разделе / var), дефрагментатор работает лучше, поскольку ему не нужно обрабатывать все статические файлы из других каталогов. (В качестве альтернативы, дефрагментатору можно приказать просто исключить определенные пути к файлам.) Для разделов с относительно небольшой активностью записи время дефрагментации значительно улучшается после первой дефрагментации, поскольку в будущем дефрагментатору потребуется дефрагментировать только небольшое количество новых файлов. .
Наличие неподвижных системных файлов, особенно файла подкачки , может затруднить дефрагментацию. Эти файлы можно безопасно перемещать, когда операционная система не используется. Например, ntfsresize перемещает эти файлы для изменения размера раздела NTFS . Инструмент PageDefrag может дефрагментировать системные файлы Windows, такие как файл подкачки и файлы, в которых хранится реестр Windows, путем запуска во время загрузки до загрузки графического интерфейса. Начиная с Windows Vista, эта функция не полностью поддерживается и не обновлялась.
В NTFS, когда файлы добавляются на диск, главная таблица файлов (MFT) должна расти, чтобы хранить информацию для новых файлов. Каждый раз, когда MFT не может быть расширен из-за того, что на пути находится какой-то файл, MFT получит фрагмент. В ранних версиях Windows его нельзя было безопасно дефрагментировать во время монтирования раздела, поэтому Microsoft записала жесткий блок в API дефрагментации . Однако, начиная с Windows XP , все большее количество дефрагментаторов теперь может дефрагментировать MFT, поскольку API дефрагментации Windows был улучшен и теперь поддерживает эту операцию перемещения. [6] Даже с учетом улучшений первые четыре кластера MFT остаются неподвижными для API дефрагментации Windows, в результате чего некоторые дефрагментаторы сохраняют MFT в двух фрагментах: первые четыре кластера, где бы они ни находились при форматировании диска, и затем оставшаяся часть MFT в начале диска (или там, где стратегия дефрагментации считает лучшим местом).
При считывании данных с обычного электромеханического жесткого диска контроллер диска должен сначала относительно медленно позиционировать головку на дорожке, где находится данный фрагмент, а затем ждать, пока диск вращается, пока фрагмент не достигнет головки. Твердотельный накопитель (SSD) , основан на флэш - памяти без каких - либо подвижных частей, поэтому произвольный доступ фрагмента файла на флэш - памяти не страдает эту задержкой, что делает дефрагментацию скорости доступа оптимизирует ненужную. Более того, поскольку флеш-память может быть записана только ограниченное количество раз, прежде чем произойдет сбой, дефрагментация на самом деле вредна (за исключением предотвращения катастрофических сбоев).). Однако Windows по-прежнему дефрагментирует SSD автоматически (хотя и менее энергично), чтобы файловая система не достигла максимальной устойчивости к фрагментации. После достижения максимального предела фрагментации последующие попытки записи на диск завершаются неудачей. [7]
e2defrag
, который не работает с его преемником ext3. Однако другие программы или программы, не зависящие от файловой системы, такие как defragfs [17], могут использоваться для дефрагментации файловой системы ext3. ext4 в некоторой степени обратно совместимас ext3, и, следовательно, обычно имеет такую же поддержку со стороны программ дефрагментации. В настоящее время e4defrag можно использовать для дефрагментации файловой системы ext4, включая онлайн-дефрагментацию.fsadm
утилита, которая включает операции дефрагментации.defragfs
утилита в операционных системах IBM. [18]reallocate
которая предназначена для дефрагментации больших файлов.xfs_fsr
.Как мы видели, том HFS +, кажется, довольно хорошо сопротивляется фрагментации в Mac OS X 10.3.x, и я не думаю, что фрагментация станет настолько серьезной проблемой, чтобы потребовались упреждающие средства (например, инструмент дефрагментации).