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