Введение
Перестановка секторов на жестком диске в непрерывные блоки.
В обслуживании файловых систем дефрагментация – это процесс, уменьшающий степень фрагментации. Она достигается физической организацией содержимого устройства хранения данных, используемого для хранения файлов, в минимальное количество непрерывных областей (фрагментов, экстентов). Также предпринимаются попытки создать более крупные области свободного пространства посредством компактизации, чтобы замедлить повторную фрагментацию. Некоторые утилиты дефрагментации стараются хранить небольшие файлы в пределах одного каталога вместе, так как они часто используются последовательно. Дефрагментация полезна и актуальна для файловых систем на электромеханических дисках (жестких дисках, дискетах и оптических носителях). Перемещение головок чтения/записи жесткого диска по разным областям диска при доступе к фрагментированным файлам занимает больше времени, чем последовательный доступ ко всему содержимому нефрагментированного файла без перемещения головок чтения/записи для поиска других фрагментов.
Причины фрагментации
Фрагментация возникает, когда файловая система не может или не желает выделить достаточное непрерывное пространство для хранения файла целиком, а вместо этого размещает его части в промежутках между существующими файлами (обычно эти промежутки образовались из-за ранее удаленных файлов или из-за избыточного выделения пространства файловой системой). Файлы, к которым часто добавляются данные (например, файлы журналов), частые операции добавления и удаления файлов (например, электронная почта и кэш веб-браузера), большие файлы (например, видео) и большое количество файлов способствуют фрагментации и, как следствие, снижению производительности. Дефрагментация призвана уменьшить эти проблемы.
Смягчение
Дефрагментация — это операция по перемещению фрагментов файлов (физических блоков выделения), чтобы они в конечном итоге объединились, желательно в один непрерывный блок. Для этого обычно требуется как минимум две операции копирования: одна — для перемещения блоков в свободное место на диске, чтобы обеспечить возможность дальнейшего перемещения, и другая — для окончательного перемещения блоков в нужное место. В такой схеме данные никогда не удаляются с диска, поэтому операцию можно безопасно прервать даже при отключении питания. На иллюстрации в статье приведен пример. Для дефрагментации диска программное обеспечение для дефрагментации (также известное как «дефрагментатор») может перемещать файлы только в пределах доступного свободного пространства. Это ресурсоемкая операция, которую нельзя выполнять на файловой системе с небольшим количеством свободного места или без него. Во время дефрагментации производительность системы снижается, поэтому лучше не использовать компьютер во время процесса, чтобы дефрагментатор не был сбит с толку неожиданными изменениями в файловой системе. В зависимости от используемого алгоритма выполнение нескольких проходов может быть полезным или бесполезным. Реорганизация, связанная с дефрагментацией, не изменяет логическое расположение файлов (определяемое как их местоположение в структуре каталогов). Помимо дефрагментации программных файлов, инструмент дефрагментации также может сократить время загрузки программ и открытия файлов. Например, дефрагментатор Windows 9x включал в себя Intel Application Launch Accelerator, который оптимизировал программы на диске, размещая дефрагментированные файлы программ и их зависимости рядом друг с другом в порядке их загрузки, чтобы ускорить запуск этих программ. В Windows хороший дефрагментатор будет считывать файлы Prefetch для идентификации как можно большего числа таких групп файлов и размещать файлы в них в порядке доступа. В начале жесткого диска внешние дорожки имеют более высокую скорость передачи данных, чем внутренние. Размещение часто используемых файлов на внешних дорожках повышает производительность. Сторонние дефрагментаторы, такие как MyDefrag, перемещают часто используемые файлы на внешние дорожки и дефрагментируют эти файлы. Улучшения в современных жестких дисках, такие как кэш-память RAM, более высокая скорость вращения пластин, очередь команд (SCSI/ATA TCQ или SATA NCQ) и большая плотность данных, в определенной степени снижают негативное влияние фрагментации на производительность системы, хотя увеличение объема часто используемых данных нивелирует эти преимущества. Однако современные системы значительно выигрывают от огромных объемов дисков, доступных в настоящее время, поскольку частично заполненные диски фрагментируются гораздо меньше, чем полные диски, а на жестком диске большой емкости тот же раздел занимает меньший диапазон цилиндров, что приводит к более быстрому доступу. Однако среднее время доступа никогда не может быть меньше половины оборота пластин, а скорость вращения пластин (измеряемая в оборотах в минуту) является характеристикой скорости жестких дисков, которая за последние десятилетия росла медленнее всего (по сравнению со скоростью передачи данных и временем доступа), поэтому минимизация количества обращений к дорожкам остается полезной в большинстве приложений, интенсивно использующих хранилище. Дефрагментация как раз и заключается в том, чтобы обеспечить не более одного обращения к дорожке для каждого файла, учитывая только обращения к несмежным дорожкам.
Разделение
Общая стратегия оптимизации дефрагментации и снижения влияния фрагментации заключается в разделении жестких дисков таким образом, чтобы разделы файловой системы, подверженные значительно большему количеству операций чтения, чем записи, были отделены от более изменчивых зон, где файлы часто создаются и удаляются. Каталоги, содержащие профили пользователей, постоянно модифицируются (особенно каталог Temp и кэш веб-браузера, создающие тысячи файлов, которые удаляются в течение нескольких дней). Если файлы профилей пользователей хранятся на выделенном разделе (как это обычно практикуется в рекомендованных файловых системах UNIX, где они, как правило, располагаются в разделе /var), дефрагментатор работает эффективнее, поскольку ему не приходится обрабатывать все статические файлы из других каталогов. (В качестве альтернативы, дефрагментатору можно указать просто исключить определенные пути к файлам.) Для разделов с относительно низкой интенсивностью записи время дефрагментации значительно сокращается после первой дефрагментации, так как в дальнейшем дефрагментатору потребуется обрабатывать лишь небольшое количество новых файлов.
Дефрагментация в автономном режиме
Наличие неподвижных системных файлов, особенно файла подкачки, может затруднять дефрагментацию. Эти файлы можно безопасно перемещать, когда операционная система не используется. Например, ntfsresize перемещает эти файлы для изменения размера раздела NTFS. Инструмент PageDefrag может дефрагментировать системные файлы Windows, такие как файл подкачки и файлы, хранящие реестр Windows, запускаясь во время загрузки до загрузки графического интерфейса. Начиная с Windows Vista, эта функция поддерживается не полностью и не обновлялась. В NTFS, по мере добавления файлов на диск, таблица главных файлов (MFT) должна расширяться для хранения информации о новых файлах. Каждый раз, когда расширение MFT невозможно из-за препятствующего файла, MFT получает фрагмент. В ранних версиях Windows дефрагментация MFT в смонтированном состоянии была небезопасна, поэтому Microsoft добавила блокировку в API дефрагментации. Однако, начиная с Windows XP, все большее число дефрагментаторов способны дефрагментировать MFT, поскольку API дефрагментации Windows было улучшено и теперь поддерживает операцию перемещения. Даже с этими улучшениями первые четыре кластера MFT остаются неподвижными для API дефрагментации Windows, что приводит к тому, что некоторые дефрагментаторы хранят MFT в двух фрагментах: первые четыре кластера остаются на месте, где они находились при форматировании диска, а остальная часть MFT размещается в начале диска (или в любом другом месте, которое дефрагментатор считает оптимальным).
Диски твердого состояния
При чтении данных с традиционного электромеханического жесткого диска, контроллер диска должен сначала относительно медленно позиционировать головку на дорожку, где расположен нужный фрагмент, а затем ждать, пока пластина диска повернется, пока этот фрагмент не окажется под головкой. Твердотельный накопитель (SSD) основан на флеш-памяти, не имеющей движущихся частей, поэтому произвольный доступ к фрагменту файла во флеш-памяти не подвержен этой задержке, что делает дефрагментацию для оптимизации скорости доступа ненужной. Более того, поскольку флеш-память имеет ограниченное количество циклов записи-стирания, дефрагментация фактически вредна (за исключением случаев предотвращения катастрофического выхода из строя). Однако Windows все еще автоматически дефрагментирует SSD (хотя и менее интенсивно), чтобы предотвратить достижение файловой системой предельного уровня фрагментации (когда метаданные больше не могут корректно отображать фрагменты файлов). После достижения этого предела последующие попытки записи на диск будут неудачными.
Жёсткие диски SMR
Хотя многие жесткие диски SMR поддерживают команду TRIM, для повышения производительности жестким дискам SMR все равно требуется дефрагментация.
Подход и дефрагментаторы по типам файловых систем
FAT: Системы MS DOS 6.x и Windows 9x поставляются с утилитой дефрагментации под названием Defrag. Версия для DOS является ограниченной версией Norton SpeedDisk. Версия, поставлявшаяся с Windows 9x, была лицензирована от Symantec Corporation, а версия, поставлявшаяся с Windows 2000 и XP, лицензирована от Condusiv Technologies. NTFS была представлена с Windows NT 3.1, но драйвер файловой системы NTFS не включал никаких функций дефрагментации. В Windows NT 4.0 были введены API дефрагментации, которые сторонние инструменты могли использовать для выполнения задач дефрагментации; однако программное обеспечение для дефрагментации не было включено. В Windows 2000, Windows XP и Windows Server 2003 Microsoft включила инструмент дефрагментации на основе Diskeeper, который использовал API дефрагментации и был встроен в оснастку "Управление компьютером". В Windows Vista, Windows 7 и Windows 8 инструмент был значительно улучшен и получил новый интерфейс без визуальной карты диска и больше не является частью "Управления компьютером". Существует также ряд бесплатных и коммерческих сторонних продуктов для дефрагментации для Microsoft Windows. BSD UFS и, в частности, FreeBSD используют внутренний перераспределитель, который стремится уменьшить фрагментацию непосредственно в момент записи информации на диск. Это эффективно контролирует деградацию системы после длительного использования. Btrfs поддерживает онлайн и автоматическую дефрагментацию. Linux ext2, ext3 и ext4: Подобно UFS, эти файловые системы используют методы выделения, предназначенные для поддержания фрагментации под контролем в любое время. В результате дефрагментация не требуется в подавляющем большинстве случаев. ext2 использует автономный дефрагментатор под названием e2defrag, который не работает с его преемником ext3. Однако для дефрагментации файловой системы ext3 могут использоваться другие программы или независимые от файловой системы, такие как defragfs. ext4 частично обратно совместима с ext3 и, следовательно, имеет примерно такой же уровень поддержки со стороны программ дефрагментации. В настоящее время e4defrag можно использовать для дефрагментации файловой системы ext4, включая онлайн-дефрагментацию. VxFS имеет утилиту fsadm, которая включает операции дефрагментации. JFS имеет утилиту defragfs в операционных системах IBM. HFS Plus, представленная в 1998 году с Mac OS 8.1, имеет ряд оптимизаций алгоритмов выделения в попытке дефрагментировать файлы во время доступа к ним без использования отдельного дефрагментатора. Существует несколько ограничений для файлов, которые могут быть кандидатами на "динамическую" дефрагментацию (включая максимальный размер 20 МБ). Существует утилита iDefrag от Coriolis Systems, доступная с OS X 10.3. На традиционных Mac OS дефрагментацию можно выполнять с помощью Norton SpeedDisk и TechTool Pro. WAFL в операционной системе NetApp ONTAP 7.2 имеет команду reallocate, предназначенную для дефрагментации больших файлов. XFS предоставляет онлайн-утилиту дефрагментации под названием xfs fsr. SFS обрабатывает функцию дефрагментации почти полностью в безгосударственном режиме (за исключением местоположения, над которым она работает), поэтому дефрагментацию можно остановить и запустить мгновенно. ADFS, файловая система, используемая RISC OS и более ранними компьютерами Acorn, поддерживает фрагментацию файлов под контролем без необходимости ручной дефрагментации.