Фрагментация файловой системы

редактировать
Визуализация фрагментации, а затем дефрагментации

В вычислениях, фрагментация файловой системы, иногда называемая устареванием файловой системы - это тенденция файловой системы размещать содержимое файлов прерывисто, чтобы разрешить изменение их содержимого на месте. Это частный случай фрагментации данных. Фрагментация файловой системы увеличивает перемещение головки диска или время поиска (где это применимо), что, как известно, снижает пропускную способность. Кроме того, файловые системы не могут выдерживать неограниченную фрагментацию. Исправление существующей фрагментации состоит в том, чтобы реорганизовать файлы и свободное пространство обратно в смежные области. Этот процесс называется дефрагментацией.

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

Содержание
  • 1 Причины
    • 1.1 Пример
  • 2 Необходимость
  • 3 Типы
    • 3.1 Фрагментация файла
    • 3.2 Фрагментация свободного места
    • 3.3 Рассеивание файла
  • 4 Отрицательные последствия
  • 5 Смягчение
    • 5.1 Предотвращение фрагментации
    • 5.2 Дефрагментация
  • 6 См. Также
  • 7 Примечания
  • 8 Ссылки
  • 9 Дополнительная литература
Причины

Когда файловая система сначала инициализируется на разделе, она содержит только несколько небольших внутренних структур и в противном случае представляет собой один непрерывный блок пустого пространства. Это означает, что файловая система может размещать вновь созданные файлы в любом месте раздела. Некоторое время после создания файлы могут располагаться почти оптимально. Когда операционная система и приложения установлены или архивы распакованы, отдельные файлы в конечном итоге появляются последовательно, поэтому связанные файлы располагаются близко друг к другу.

По мере удаления или усечения существующих файлов создаются новые области свободного пространства. Когда к существующим файлам добавляются файлы, часто невозможно возобновить запись именно там, где закончился файл, так как другой файл уже может быть размещен там; таким образом, необходимо выделить новый фрагмент. Со временем, когда одни и те же факторы присутствуют постоянно, свободное пространство, а также часто добавляемые файлы имеют тенденцию к большей фрагментации. Более короткие области свободного пространства также означают, что файловая система больше не может размещать новые файлы непрерывно и должна разбивать их на фрагменты. Это особенно верно, когда файловая система переполняется и большие непрерывные области свободного пространства недоступны.

Пример

Упрощенный пример того, как происходит фрагментация свободного пространства и фрагментация файла

Следующий пример является упрощением более сложной темы. Рассмотрим следующий сценарий: на новом диске было пять файлов с именами A, B, C, D и E, сохраненных непрерывно и последовательно в указанном порядке. Каждый файл занимает 10 блоков пространства. (Здесь размер блока не имеет значения.) Остаток дискового пространства - один свободный блок. Таким образом, дополнительные файлы могут быть созданы и сохранены после файла E.

Если файл B удален, создается вторая область из десяти блоков свободного пространства, и диск становится фрагментированным. Пустое пространство просто остается там, помечается как и доступно для дальнейшего использования, а затем используется снова по мере необходимости. Файловая система может дефрагментировать диск сразу после удаления, но это приведет к серьезному снижению производительности в непредсказуемые моменты времени.

Теперь новый файл с именем F, который требует семи блоков пространства, может быть помещен в первые семь блоков недавно освобожденного пространства, в котором ранее находился файл B, и три следующих за ним блока останутся доступными. Если добавляется еще один новый файл с именем G, которому требуется всего три блока, он может занимать пространство после F и перед C.

Если впоследствии F необходимо расширить, так как пространство, непосредственно следующее за ним, занято, есть три варианта для файловой системы:

  1. Добавление нового блока где-то еще и указание, что F имеет второй экстент
  2. Перемещение файлов по пути расширения в другое место, чтобы позволить F оставаться непрерывным
  3. Перемещение файла F таким образом, чтобы он мог быть одним непрерывным файлом нового большего размера

Второй вариант, вероятно, непрактичен по соображениям производительности, как и третий вариант, когда файл очень большой. Третий вариант невозможен, когда нет единого непрерывного свободного пространства, достаточно большого для размещения нового файла. Таким образом, обычная практика состоит в том, чтобы просто создать экстент в другом месте и связать новый экстент со старым.

Материал, добавленный в конец файла F, будет частью того же экстента. Но если материала так много, что после последнего экстента не остается места, тогда нужно будет создать другой экстент и так далее. В конечном итоге в файловой системе есть свободные сегменты во многих местах, и некоторые файлы могут быть распределены по разным размерам. Время доступа к этим файлам (или ко всем файлам) может стать чрезмерно большим.

Необходимость

Некоторые ранние файловые системы не могли фрагментировать файлы. Одним из таких примеров была файловая система Acorn DFS, используемая на BBC Micro. Из-за невозможности фрагментировать файлы иногда появлялось сообщение об ошибке не может быть расширено, и пользователь часто не мог сохранить файл, даже если на диске было достаточно места для него.

DFS использовала очень простую структуру диска, и файлы на диске располагались только по их длине и начальному сектору. Это означало, что все файлы должны были существовать как непрерывный блок секторов, и фрагментация была невозможна. Используя пример в таблице выше, попытка развернуть файл F на шаге 5 не удалась бы в такой системе с сообщением об ошибке не удается расширить. Независимо от того, сколько свободного места могло остаться на диске в целом, было невозможно расширить файл данных.

Стандарты обработки ошибок в то время были примитивными, и в любом случае программы, сжатые в ограниченную память BBC Micro, редко могли позволить себе тратить пространство, пытаясь изящно обрабатывать ошибки. Вместо этого пользователь обнаружил бы, что в командной строке он будет сброшен с сообщением «Невозможно расширить», и все данные, которые еще не были добавлены в файл, будут потеряны. Проблему нельзя было решить, просто предварительно проверив свободное место на диске. Хотя свободное пространство на диске может существовать, размер самого большого непрерывного блока свободного пространства не был бы сразу очевиден без анализа чисел, представленных каталогом дисков, и поэтому не заметил бы пользователя. Кроме того, почти все пользователи DFS ранее использовали кассетное хранилище файлов, которое не страдает от этой ошибки. Обновление до системы гибких дисков было дорогостоящим обновлением, и было шоком то, что обновление без предупреждения могло вызвать потерю данных.

Типы

Возможна фрагментация файловой системы на нескольких уровнях:

  • Фрагментация внутри отдельных файлов
  • Фрагментация свободного пространства
  • Уменьшение локальности ссылки между отдельными, но связанными файлами

Фрагментация файлов

Фрагментация отдельного файла происходит, когда один файл разбит на несколько частей (называемых экстентами в файловых системах на основе экстентов). Хотя дисковые файловые системы пытаются сохранить непрерывность отдельных файлов, зачастую это невозможно без значительного снижения производительности. Инструменты проверки и дефрагментации файловой системы обычно учитывают только фрагментацию файлов в своей статистике «процент фрагментации».

Фрагментация свободного пространства

Фрагментация свободного (нераспределенного) пространства происходит, когда есть несколько неиспользуемых областей файловой системы, в которые можно записывать новые файлы или метаданные. Нежелательная фрагментация свободного пространства обычно вызывается удалением или усечением файлов, но файловые системы также могут намеренно вставлять фрагменты («пузыри») свободного пространства, чтобы облегчить расширение соседних файлов (см. предотвращение фрагментации ниже).

Разброс файлов

Сегментация файлов, также называемая фрагментацией связанных файлов или фрагментацией (файла) на уровне приложения, относится к отсутствию локальности ссылки (в пределах носитель) между связанными файлами (подробнее см. последовательность файлов ). В отличие от двух предыдущих типов фрагментации, разброс файлов - это гораздо более расплывчатое понятие, поскольку оно сильно зависит от схемы доступа конкретных приложений. Это также очень затрудняет его объективное измерение или оценку. Однако, возможно, это наиболее критический тип фрагментации, поскольку исследования показали, что файлы, к которым чаще всего обращаются, имеют тенденцию быть небольшими по сравнению с доступной пропускной способностью диска в секунду.

Чтобы избежать фрагментации связанных файлов и улучшить локальность файлов ссылки (в данном случае называемые непрерывностью файлов), предположения или активные наблюдения за работой приложений. Очень часто делается предположение, что файлы меньшего размера целесообразно хранить в одном каталоге вместе и размещать их в естественном порядке файловой системы. Хотя это часто разумное предположение, оно не всегда выполняется. Например, приложение может читать несколько разных файлов, возможно, в разных каталогах, в том же порядке, в котором они были записаны. Таким образом, файловая система, которая просто упорядочивает все записи последовательно, может работать быстрее для данного приложения.

Отрицательные последствия

Фрагментация файловой системы более проблематична с жесткими дисками потребительского уровня из-за увеличивающегося несоответствия между скоростью последовательного доступа и задержка вращения (и, в меньшей степени, время поиска ), на которой обычно размещаются файловые системы. Таким образом, фрагментация является важной проблемой при исследовании и проектировании файловых систем. Сдерживание фрагментации не только зависит от формата файловой системы на диске, но и во многом от его реализации. Фрагментация файловой системы оказывает меньшее влияние на производительность твердотельных накопителей, поскольку не требует механического времени поиска. Однако файловая система должна хранить один дополнительный фрагмент метаданных для соответствующего файла. Каждая часть метаданных сама по себе занимает место и требует вычислительной мощности и времени процессора. Если достигается максимальный предел фрагментации, запросы на запись завершаются ошибкой.

В простых тестах файловой системы тестов фактор фрагментации часто опускается, поскольку реалистичное старение и фрагментацию сложно смоделировать. Скорее, для простоты сравнения тесты файловой системы часто запускаются на пустых файловых системах. Таким образом, результаты могут сильно отличаться от реальных шаблонов доступа.

Смягчение

Для борьбы с фрагментацией было разработано несколько методов. Обычно их можно разделить на две категории: упреждающие и обратные. Из-за сложности прогнозирования шаблонов доступа эти методы чаще всего носят эвристический характер и могут снизить производительность при неожиданных рабочих нагрузках.

Предотвращение фрагментации

Упреждающие методы пытаются свести фрагментацию к минимуму во время записи данных на диск. Самый простой - это добавление данных к существующему фрагменту, где это возможно, вместо выделения новых блоков новому фрагменту.

Многие современные файловые системы пытаются предварительно выделить более длинные фрагменты или фрагменты из различных фрагментов свободного пространства, называемые экстентами, для файлов, которые активно добавляются. Это в значительной степени позволяет избежать фрагментации файла, когда несколько файлов добавляются одновременно, что позволяет избежать их чрезмерного переплетения.

Если известен окончательный размер файла, подлежащего модификации, можно предварительно выделить память для всего файла. Например, файл подкачки Microsoft Windows (файл подкачки) может динамически изменять размер при нормальной работе и, следовательно, может стать сильно фрагментированным. Этого можно избежать, указав файл подкачки с одинаковыми минимальным и максимальным размерами, эффективно предварительно выделив весь файл.

BitTorrent и другие одноранговые приложения для обмена файлами ограничивают фрагментацию, предварительно выделяя полное пространство, необходимое для файла при запуске загрузок.

Относительно недавний метод - отложенное выделение в XFS, HFS + и ZFS ; тот же метод также называется выделением на одном уровне в reiser4 и ext4. Когда выполняется запись в файловую систему, блоки файловой системы зарезервированы, но расположение конкретных файлов еще не установлено. Позже, когда файловая система вынуждена сбрасывать изменения в результате нехватки памяти или фиксации транзакции, распределитель будет гораздо лучше знать характеристики файлов. Большинство файловых систем с таким подходом пытаются сбрасывать файлы в одном каталоге непрерывно. Предполагая, что многократное чтение из одного каталога является обычным явлением, улучшается локальность ссылки. Reiser4 также упорядочивает компоновку файлов в соответствии с хэш-таблицей каталога , так что когда к файлам обращаются в естественном порядке файловой системы (как диктуется readdir ), они всегда читаются последовательно.

Дефрагментация

Ретроактивные методы пытаются уменьшить фрагментацию или отрицательные эффекты фрагментации после того, как она произошла. Многие файловые системы предоставляют инструменты дефрагментации, которые пытаются переупорядочить фрагменты файлов, а иногда также уменьшают их разброс (т.е. улучшают их смежность или локальность ссылки ), сохраняя файлы меньшего размера в каталоги, или деревья каталогов, или даже последовательности файлов, расположенные близко друг к другу на диске.

Файловая система HFS Plus прозрачно дефрагментирует файлы размером менее 20 MiB и разбивается на 8 или более фрагментов при открытии файла.

Устаревшая теперь Commodore Amiga Smart File System (SFS) дефрагментировала себя, пока файловая система использовалась. Процесс дефрагментации почти полностью не имеет состояния (за исключением местоположения, в котором он работает), поэтому его можно остановить и запустить немедленно. Во время дефрагментации обеспечивается целостность как метаданных, так и обычных данных.

См. Также
Примечания
Ссылки
Дополнительная литература
Последняя правка сделана 2021-05-20 03:42:22
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте