В вычислительной технике экстент — это непрерывная область хранения, зарезервированная для файла в файловой системе , представленная в виде диапазона номеров блоков или дорожек на устройствах хранения ключевых данных . Файл может состоять из нуля или более экстентов; для одного фрагмента файла требуется один экстент. Прямая выгода заключается в компактном хранении каждого диапазона в виде двух чисел вместо канонического хранения каждого номера блока в диапазоне. [1] Кроме того, распределение экстентов приводит к меньшей фрагментации файла .
Файловые системы на основе экстентов также могут устранить большую часть накладных расходов на метаданные больших файлов, которые традиционно были бы заняты деревом распределения блоков. Но поскольку экономия невелика по сравнению с объемом хранимых данных (для всех размеров файлов в целом), но составляет большую часть метаданных (для больших файлов), общие преимущества в эффективности хранения и производительности незначительны. [2]
Чтобы противостоять фрагментации, несколько файловых систем на основе экстентов используют allocate-on-flush . Многие современные отказоустойчивые файловые системы также используют copy-on-write , хотя это увеличивает фрагментацию. Как аналогичная конструкция, файловая система CP/M также использует экстенты, но они не соответствуют определению, данному выше. Экстенты CP/M отображаются непрерывно как один блок в объединенной таблице каталогов/выделений, и они не обязательно соответствуют непрерывной области данных на диске.
IBM OS/360 и последующие версии размещают файлы в кратных дисковым дорожкам или цилиндрам . Изначально файлы могли иметь до 16 экстентов, но с тех пор это ограничение было снято. Первоначальный размер выделения и размер дополнительных экстентов, которые должны быть выделены при необходимости, указываются пользователем с помощью Job Control Language . Система пытается выделить начальный размер как непрерывную область, хотя она может быть разделена, если непрерывное пространство недоступно.
Системы, поддерживающие экстенты файловой системы, включают в себя следующее:
Однако, что действительно является отклонением для EXT4, так это использование экстентов вместо старого, неэффективного механизма косвенных блоков, который использовался более ранними файловыми системами Unix (например, EXT2 и EXT3) для отслеживания содержимого файла. Экстенты похожи на кластерные запуски в файловой системе NTFS; по сути, они указывают начальный адрес блока и количество блоков, составляющих экстент. Файл, который фрагментирован, будет иметь несколько экстентов, но EXT4 очень старается сохранять файлы смежными.
Если flex_bg включен, можно выделять очень большие файлы с одним экстентом, при значительном сокращении использования блока метаданных и некотором улучшении эффективности диска.