Раздел лида статьи , возможно, необходимо переписать . ( Июль 2012 ) |
Разработчик(и) | IBM и др. |
---|---|
Полное имя | Журналируемая файловая система IBM |
Введено | 1990 и 1999 с JFS1 в AIX 3.1 и JFS в OS/2 4.5 |
Идентификаторы разделов | 0x35 ( МБР ) |
Структуры | |
Содержимое каталога | B+ дерево |
Распределение файлов | Растровое изображение/ экстенты |
Пределы | |
Максимальный размер тома | 32 × 2 50 байт (32 ПиБ ) |
Максимальный размер файла | 4 × 2 50 байт (4 ПиБ) |
Макс . кол- во файлов | Ограничение не определено |
Максимальная длина имени файла | 255 байт |
Допустимые символы в имени файла | Любой Unicode, кроме NUL |
Функции | |
Даты записаны | Модификация (mtime), модификация атрибута (ctime), доступ (atime) |
Разрешение даты | 1 нс |
Вилки | Да |
Разрешения файловой системы | Разрешения Unix, ACL |
Прозрачное сжатие | Только в JFS1 на AIX |
Прозрачное шифрование | Нет (предоставляется на уровне блочного устройства) |
Дедупликация данных | Нет |
Другой | |
Поддерживаемые операционные системы | AIX, OS/2, Linux , eComStation , ArcaOS |
Journaled File System ( JFS ) — это 64-битная журналируемая файловая система, созданная IBM . Существуют версии для операционных систем AIX , OS/2 , eComStation , ArcaOS и Linux . Последняя доступна как свободное программное обеспечение на условиях GNU General Public License (GPL). HP-UX имеет другую файловую систему под названием JFS, которая на самом деле является OEM-версией VxFS от Veritas Software .
В операционной системе AIX существует два поколения JFS, которые называются JFS ( JFS1 ) и JFS2 соответственно. [1]
JFS от IBM изначально была разработана для 32-битных систем. JFS2 была разработана для 64-битных систем. [2]
В других операционных системах, таких как OS/2 и Linux, существует только второе поколение, которое называется просто JFS . [3] Его не следует путать с JFS в AIX , который на самом деле относится к JFS1.
IBM представила JFS с первым выпуском AIX версии 3.1 в феврале 1990 года. Эта файловая система, теперь называемая JFS1 на AIX , была главной файловой системой для AIX в течение следующего десятилетия и была установлена в тысячах или миллионах систем AIX клиентов. Исторически файловая система JFS1 очень тесно связана с менеджером памяти AIX, [1] который является типичным дизайном для файловой системы, поддерживающей только одну операционную систему. JFS была одной из первых файловых систем, поддерживающих журналирование .
В 1995 году началась работа по улучшению файловой системы, чтобы сделать ее более масштабируемой и поддерживать машины с более чем одним процессором. Другой целью было иметь более портативную файловую систему, способную работать на нескольких операционных системах. После нескольких лет проектирования, кодирования и тестирования новая JFS была впервые отправлена в OS/2 Warp Server for eBusiness в апреле 1999 года, а затем в OS/2 Warp Client в октябре 2000 года. В декабре 1999 года снимок исходного кода OS/2 JFS был предоставлен сообществу открытого исходного кода , и была начата работа по переносу JFS на Linux . Первый стабильный релиз JFS для Linux появился в июне 2001 года . [3] Проект JFS для Linux поддерживается небольшой группой участников, известных как JFS Core Team . [4] Этот выпуск исходных кодов также работал, чтобы сформировать основу для отчета обратно на OS/2 JFS с открытым исходным кодом.
Параллельно с этими усилиями часть команды разработчиков JFS вернулась в AIX Operating System Development Group в 1997 году и начала переносить эту новую исходную базу JFS в операционную систему AIX. В мае 2001 года вторая журналируемая файловая система, Enhanced Journaled File System (JFS2) , стала доступна для AIX 5L. [1] [3]
В начале 2008 года появились предположения, что IBM больше не заинтересована в поддержке JFS и, следовательно, ее не следует использовать в производственных средах. [5] Однако Дейв Клейкамп, член IBM Linux Technology Center и JFS Core Team, [4] объяснил, что они по-прежнему следят за изменениями в ядре Linux и пытаются исправить потенциальные ошибки программного обеспечения . Он продолжил, добавив, что некоторые дистрибутивы ожидают от них большего выделения ресурсов и предпочитают не поддерживать файловую систему. [6]
В 2012 году в JFS была добавлена поддержка команды TRIM для твердотельных накопителей . [7]
JFS поддерживает следующие функции. [8] [9]
JFS — это журналируемая файловая система . Вместо добавления журналирования в качестве дополнительной функции, как в файловой системе ext3 , оно было реализовано с самого начала. Журнал может быть до 128 МБ. JFS журналирует только метаданные, что означает, что метаданные останутся неизменными, но пользовательские файлы могут быть повреждены после сбоя или отключения питания. Журналирование JFS похоже на XFS в том, что оно журналирует только части inode . [ 10]
JFS использует дерево B+ для ускорения поиска в каталогах. JFS может хранить 8 записей каталога в inode каталога перед перемещением записей в дерево B+. JFS также индексирует экстенты в дереве B+.
JFS динамически выделяет место для дисковых инодов по мере необходимости. Каждый инод составляет 512 байт. 32 инода выделяются на 16 КБ экстенте.
JFS выделяет файлы как экстент . Экстент — это последовательность блоков Aggregate переменной длины. Экстент может быть расположен в нескольких группах распределения . Для решения этой проблемы экстенты индексируются в дереве B+ для лучшей производительности при поиске местоположений экстентов.
Сжатие поддерживается только в JFS1 на AIX и использует вариацию алгоритма LZ . Из-за высокой загрузки ЦП и повышенной фрагментации свободного пространства сжатие не рекомендуется для использования где-либо, кроме как на однопользовательской рабочей станции или в автономных резервных областях.
JFS обычно применяет к файлам блокировку read-shared, write-exclusive, что позволяет избежать несогласованности данных, но навязывает сериализацию записи на уровне файла. Параметр CIO отключает эту блокировку. Такие приложения, как реляционные базы данных, которые сами поддерживают согласованность данных, могут использовать эту опцию, чтобы в значительной степени исключить накладные расходы файловой системы. [11]
JFS использует группы распределения. Группы распределения делят совокупное пространство на фрагменты. Это позволяет JFS использовать политики распределения ресурсов для достижения высокой производительности ввода-вывода. Первая политика заключается в попытке кластеризации блоков диска и инодов диска для связанных данных в одной и той же группе доступности для достижения хорошей локальности диска. Вторая политика заключается в распределении несвязанных данных по всей файловой системе в попытке минимизировать фрагментацию свободного пространства. Когда есть открытый файл, JFS блокирует группу доступности, в которой находится файл, и позволяет увеличиваться только открытому файлу. Это снижает фрагментацию, поскольку только открытый файл может записывать в группу доступности.
Суперблок хранит информацию обо всей файловой системе и включает в себя следующие поля:
В операционной системе Linux JFS поддерживается модулем ядра (начиная с версии ядра 2.4.18pre9-ac4 ) и дополнительными утилитами пользовательского пространства , упакованными под именем JFSutils . Большинство дистрибутивов Linux поддерживают JFS, если только он специально не удален из-за ограничений по пространству, например, на Live CD . [ необходима цитата ]
Согласно тестам доступных файловых систем для Linux, JFS является быстрой и надежной, с неизменно хорошей производительностью при различных видах нагрузки. [12]
Фактическое использование JFS в Linux встречается редко, поскольку ext4 обычно обеспечивает лучшую производительность [ требуется ссылка ] . JFS играет в Linux свою нишу: она предлагает возможность монтирования без учета регистра, в отличие от большинства других файловых систем Linux. [13]
Также есть потенциальные проблемы с JFS, такие как реализация журнальных записей. Они могут быть отложены до тех пор, пока не появится другой триггер — потенциально на неопределенный срок, что может привести к потере данных в течение теоретически бесконечного периода времени. [14]