Введение
Файловая система
Journaled File System (JFS) — это 64-битная журналируемая файловая система, разработанная компанией IBM. Существуют версии для операционных систем AIX, OS/2, eComStation, ArcaOS и Linux. Версия для Linux доступна как свободное программное обеспечение на условиях лицензии GNU General Public License (GPL). У HP-UX есть другая файловая система с названием JFS, которая фактически является OEM-версией VxFS от Veritas Software. В операционной системе AIX существуют два поколения JFS, которые называются JFS (JFS1) и JFS2 соответственно. Изначально JFS от IBM разрабатывался для 32-битных систем. JFS2 был разработан для 64-битных систем. В других операционных системах, таких как OS/2 и Linux, существует только второе поколение, которое просто называется JFS. Это не следует путать с JFS в AIX, который на самом деле относится к JFS1.
История
IBM представила JFS с первоначальным выпуском AIX версии 3.1 в феврале 1990 года. Эта файловая система, теперь называемая JFS1 в AIX, на протяжении следующего десятилетия была основной файловой системой для AIX и была установлена в тысячах или миллионах систем AIX у клиентов. Исторически файловая система JFS1 тесно связана с менеджером памяти AIX. Этот выпуск исходного кода также послужил основой для отчета об open-source JFS, представленного OS/2. Параллельно с этой работой, часть команды разработчиков JFS вернулась в группу разработки операционной системы AIX в 1997 году и начала перенос этой новой кодовой базы JFS в операционную систему AIX. В мае 2001 года для AIX 5L стала доступна вторая журналируемая файловая система – Enhanced Journaled File System (JFS2). Однако, Дэйв Клейкамп, член IBM Linux Technology Center и JFS Core Team,
В 2012 году в JFS была добавлена поддержка команд TRIM для твердотельных накопителей.
Особенности
JFS поддерживает следующие функции.
Журнал
JFS — это журнал-файловая система. В отличие от файловой системы ext3, где журналирование было добавлено как дополнительная функция, в JFS оно было реализовано изначально. Размер журнала может достигать 128 МБ. JFS журналирует только метаданные, что обеспечивает их целостность, но пользовательские файлы могут быть повреждены в случае сбоя или отключения электропитания. Механизм журналирования JFS аналогичен XFS, поскольку в журнал записываются лишь части inode.
Дерево B+
JFS использует B+-дерево для ускорения поиска в каталогах. JFS может хранить 8 элементов каталога в inode каталога, прежде чем переместить их в B+-дерево. JFS также индексирует области в B+-дереве.
Динамическое распределение инодов
JFS динамически выделяет место для дисковых инодов по мере необходимости. Каждый инод занимает 512 байт. На один 16-КБ Extent выделяется 32 инода.
Область
JFS выделяет файлы в виде протяженности. Протяженность — это последовательность блоков агрегатов переменной длины. Протяженность может быть размещена в нескольких группах выделения. Для решения этой задачи протяженности индексируются в B+ дереве для повышения производительности при поиске их расположения.
Сжатие
Сжатие поддерживается только в JFS1 на AIX и использует разновидность алгоритма LZ. В связи с высокой загрузкой ЦП и увеличением фрагментации свободного места, сжатие не рекомендуется использовать где-либо, кроме как на однопользовательской рабочей станции или в областях для автономного резервного копирования.
Одновременный вход / выход (CIO)
JFS обычно использует блокировку файлов с совместным доступом на чтение и исключительным на запись, что предотвращает несогласованность данных, но приводит к последовательной записи на уровне файла. Опция CIO отключает эту блокировку. Приложения, такие как реляционные базы данных, которые самостоятельно обеспечивают согласованность данных, могут использовать эту опцию для существенного снижения накладных расходов файловой системы.
Группы распределения
JFS использует группы распределения. Группы распределения разделяют общее пространство на фрагменты. Это позволяет JFS применять политики распределения ресурсов для обеспечения высокой производительности ввода-вывода. Первая политика заключается в попытке сгруппировать дисковые блоки и дисковые индексные дескрипторы для связанных данных в одной и той же группе распределения (AG), чтобы обеспечить хорошую локальность доступа к диску. Вторая политика заключается в распределении не связанных данных по всей файловой системе, чтобы минимизировать фрагментацию свободного пространства. Когда файл открыт, JFS блокирует группу распределения (AG), в которой он находится, и разрешает только этому открытому файлу увеличиваться в размере. Это снижает фрагментацию, поскольку только открытый файл может выполнять запись в данную AG.
На Linux
В операционной системе Linux JFS поддерживается посредством модуля ядра (начиная с версии ядра 2.4.18pre9 ac4) и дополнительных утилит пользовательского пространства, поставляемых под названием JFSutils. Большинство дистрибутивов Linux поддерживают JFS, если он не был специально удален из-за ограничений по объему, например, на загрузочных дисках. Согласно результатам тестов доступных файловых систем для Linux, JFS отличается высокой скоростью и надежностью, демонстрируя стабильно хорошую производительность при различных типах нагрузки. Однако фактическое использование JFS в Linux не распространено, поскольку ext4 обычно обеспечивает более высокую производительность. JFS имеет свою нишевую область применения в Linux: он предоставляет возможность монтирования без учета регистра символов, в отличие от большинства других файловых систем Linux. Существуют также потенциальные проблемы с JFS, связанные с реализацией записи в журнал. Эти записи могут быть отложены до появления другого события-триггера, потенциально на неопределенный срок, что теоретически может привести к потере данных в течение бесконечно долгого времени.