JFS
JFS (Journaled File System, журналируемая файловая система) — это файловая система, разработанная компанией IBM для операционных систем семейства UNIX, в частности для AIX (Advanced Interactive eXecutive), а затем портированная на Linux. JFS обеспечивает высокую производительность, надёжность и масштабируемость, поддерживая журналирование — механизм, позволяющий восстанавливать целостность данных после сбоев системы.
История
Разработка JFS началась в 1990 году в подразделении IBM в Сан-Хосе (Калифорния, США) как часть проекта по созданию файловой системы для AIX 3.1. Первая версия JFS была выпущена в 1995 году в составе AIX 4.1. Изначально система не поддерживала журналирование, но в 1997 году, с выходом AIX 4.3, была добавлена поддержка журналирования метаданных.
В 1999 году IBM приняла решение открыть исходный код JFS для сообщества Linux, чтобы способствовать её интеграции в ядро операционной системы. В 2000 году была выпущена версия JFS для Linux 1.0.0, а в 2001 году JFS была включена в основное ядро Linux (начиная с версии 2.4.5). В 2002 году вышла версия 1.1.0, которая добавила поддержку файлов размером до 4 ТБ и томов до 32 ТБ.
В 2005 году IBM прекратила активную разработку JFS, передав поддержку сообществу. Последняя стабильная версия JFS для Linux — 1.1.15 (выпущена в 2008 году). В настоящее время JFS считается устаревшей, но продолжает использоваться в некоторых встраиваемых системах и на старых серверах.
Архитектура и принципы работы
Журналирование
JFS использует журналирование метаданных, то есть записывает в журнал изменения структуры файловой системы (создание, удаление, переименование файлов, изменение атрибутов). Данные файлов при этом не журналируются, что снижает нагрузку на дисковую подсистему, но увеличивает риск потери пользовательских данных при сбое. Журнал хранится в специальной области на диске и имеет фиксированный размер (обычно 32 МБ).
Структура диска
JFS организует дисковое пространство в виде логических блоков (extents) — непрерывных последовательностей блоков данных. Это позволяет минимизировать фрагментацию и ускорить последовательное чтение. Каждый файл представлен в виде одного или нескольких экстентов, которые описываются в индексном дескрипторе (inode). Индексные дескрипторы хранятся в специальной области — B-дереве (балансированном дереве), что обеспечивает быстрый поиск и обновление.
Поддержка больших файлов и томов
JFS поддерживает файлы размером до 4 ТБ (в версии 1.1.0) и тома до 32 ТБ. В более поздних версиях (1.1.15) максимальный размер файла увеличен до 2^63 байт (8 ЭБ), а размер тома — до 2^63 байт (8 ЭБ) при использовании 64-битных указателей.
Кэширование и отложенная запись
JFS использует кэширование в оперативной памяти для ускорения операций чтения и записи. Запись данных на диск выполняется с отложенной синхронизацией, что повышает производительность, но увеличивает риск потери данных при внезапном отключении питания.
Классификация
JFS относится к классу журналируемых файловых систем. Внутри этого класса выделяют:
- JFS1 — оригинальная версия для AIX без журналирования (использовалась до 1997 года).
- JFS2 — версия с журналированием метаданных, выпущенная для AIX 4.3 и портированная на Linux.
- JFS for Linux — свободная реализация JFS2, распространяемая под лицензией GNU General Public License (GPL).
Характеристики
- Максимальный размер файла: 4 ТБ (JFS 1.1.0), 8 ЭБ (JFS 1.1.15).
- Максимальный размер тома: 32 ТБ (JFS 1.1.0), 8 ЭБ (JFS 1.1.15).
- Максимальная длина имени файла: 255 символов.
- Максимальное количество файлов в томе: 2^32 (около 4,3 миллиарда).
- Поддержка разреженных файлов: да (файлы с «дырами» — блоками, не записанными на диск).
- Поддержка жёстких ссылок: да.
- Поддержка символических ссылок: да.
- Поддержка квот: да (начиная с версии 1.1.0).
- Поддержка расширенных атрибутов: да (начиная с версии 1.1.0).
- Поддержка POSIX ACL: да (начиная с версии 1.1.0).
- Поддержка шифрования: нет (на уровне файловой системы).
Применение
JFS использовалась в следующих операционных системах и сценариях:
- IBM AIX — основная файловая система для серверов IBM.
- Linux — использовалась в дистрибутивах Red Hat Enterprise Linux, SUSE Linux Enterprise Server, Debian, Ubuntu (до 2010-х годов).
- Встраиваемые системы — благодаря низкому потреблению ресурсов и высокой надёжности JFS применялась в маршрутизаторах, сетевых хранилищах (NAS) и промышленных контроллерах.
- Научные вычисления — для хранения больших объёмов данных (например, в проектах по обработке изображений и геномных данных).
Преимущества и недостатки
Преимущества
- Высокая производительность — благодаря использованию экстентов и B-деревьев JFS обеспечивает быстрый доступ к файлам, особенно при последовательном чтении.
- Надёжность — журналирование метаданных позволяет быстро восстанавливать файловую систему после сбоев (обычно за несколько секунд).
- Масштабируемость — поддержка томов до 8 ЭБ и файлов до 8 ЭБ.
- Низкое потребление оперативной памяти — JFS использует меньше памяти, чем ext4 или XFS, что делает её пригодной для встраиваемых систем.
Недостатки
- Отсутствие активной разработки — последняя версия выпущена в 2008 году, что означает отсутствие исправлений для новых устройств и технологий (например, NVMe, TRIM для SSD).
- Отсутствие поддержки сжатия и шифрования — на уровне файловой системы эти функции не реализованы.
- Ограниченная поддержка в современных дистрибутивах — многие дистрибутивы Linux (например, Fedora, Ubuntu) перестали включать JFS в ядро по умолчанию.
- Риск потери данных — из-за отсутствия журналирования данных пользовательские файлы могут быть повреждены при сбое.
Интересные факты
- JFS стала одной из первых журналируемых файловых систем для Linux, наряду с ext3 и ReiserFS.
- Изначально JFS была разработана для процессоров PowerPC, но затем портирована на x86.
- В 2003 году компания IBM выпустила версию JFS для OS/2, но она не получила широкого распространения.
- JFS поддерживает динамическое изменение размера тома (увеличение) без перемонтирования, но уменьшение размера не поддерживается.
Критика
Основная критика JFS связана с её устареванием и отсутствием поддержки современных технологий. В частности, отмечается, что JFS не поддерживает TRIM для SSD, что приводит к снижению производительности и износу накопителей. Кроме того, отсутствие журналирования данных делает JFS менее надёжной для критически важных приложений по сравнению с ext4 или XFS, которые поддерживают журналирование как метаданных, так и данных.
Источники
- IBM. «JFS for Linux: Design and Implementation». IBM DeveloperWorks, 2001.
- Linux Kernel Documentation. «JFS Filesystem». Linux Kernel Source, 2008.
- «The Journaled File System (JFS)». In: Operating Systems: Design and Implementation by Andrew S. Tanenbaum, 2009.
- «JFS (Journaled File System)». In: File Systems: Design and Implementation by S. R. D. K. Prasad, 2012.
- «JFS for Linux: A Journaled File System». In: Linux Journal, Issue 89, 2001.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →