ext4
ext4 — это журналируемая файловая система, являющаяся четвёртым поколением расширенной файловой системы (ext). Разработана как эволюционное развитие ext3, сохранив совместимость с ней, но добавив ряд существенных улучшений, направленных на увеличение производительности, масштабируемости и надёжности при работе с большими объёмами данных. ext4 является одной из наиболее распространённых файловых систем в операционных системах на ядре Linux, включая дистрибутивы для серверов, настольных компьютеров и встраиваемых устройств.
История
Файловая система ext4 была создана сообществом разработчиков ядра Linux как ответ на растущие ограничения ext3. Изначально развитие ext4 велось в виде серии расширений (backport) для ext3, но в 2006 году было решено выделить её в отдельную файловую систему. Основным автором и координатором проекта стал Теодор Флориан (Theodore Ts'o), один из ведущих разработчиков ext3.
Первая экспериментальная реализация ext4 была включена в ядро Linux версии 2.6.19, выпущенное в ноябре 2006 года. Статус стабильной и готовой к промышленной эксплуатации ext4 получила в ядре версии 2.6.28 (декабрь 2008 года). С этого момента она постепенно вытеснила ext3 в большинстве дистрибутивов Linux. В настоящее время ext4 повсеместно используется по умолчанию в таких популярных дистрибутивах, как Ubuntu, Debian, Fedora, CentOS и openSUSE, хотя для некоторых специализированных сценариев (например, очень большие хранилища или высоконагруженные серверы баз данных) разработчики могут выбирать более современные файловые системы, такие как Btrfs или XFS.
Архитектура и ключевые особенности
Архитектура ext4 базируется на классической структуре ext3, но включает несколько важных нововведений:
- Журналирование (journaling) — как и ext3, ext4 ведёт журнал изменений (логирование), что позволяет быстро восстанавливать целостность файловой системы после сбоя питания или внезапного отключения. Поддерживаются три режима журналирования: journal (запись всех данных в журнал), ordered (запись метаданных в журнал, данных — только после синхронизации) и writeback (запись только метаданных, данные могут быть потеряны).
- Extents (экстенты) — ключевое отличие от ext3. Вместо традиционного метода хранения блоков с помощью косвенных указателей (indirect blocks) ext4 использует экстенты — непрерывные последовательности блоков. Каждый экстент описывается начальным блоком и длиной. Это сокращает объём метаданных и ускоряет работу с большими и последовательно расположенными файлами.
- Поддержка очень больших файлов и томов — максимальный размер отдельного файла составляет 16 тебибайт (ТиБ), а максимальный размер тома (файловой системы) — 1 эксабайт (ЭиБ). На практике эти пределы ограничены физическими возможностями оборудования и реализацией драйвера.
- Предварительное выделение (preallocation) — механизм, позволяющий приложению зарезервировать пространство под будущие данные до фактической записи. Это снижает фрагментацию и повышает производительность при потоковой записи (например, при загрузке торрентов или записи видео).
- Отложенное выделение (delayed allocation) — файловая система откладывает фактическое выделение блоков на диске до момента, когда данные сбрасываются на диск (flush). Это позволяет операционной системе группировать записи и распределять блоки более эффективно, уменьшая фрагментацию. Однако при сбое питания до сброса данные могут быть потеряны.
- Надёжность и целостность — ext4 включает проверки контрольных сумм для данных журнала, что позволяет обнаруживать и предотвращать повреждение журнала. Также поддерживается онлайн-расширение (увеличение размера тома без его отмонтирования), хотя возможности уменьшения размера нет (требуется офлайн-операция).
- Улучшенная работа с большими каталогами — в ext3 количество записей в одном каталоге ограничено 32000, а поиск по имени имел линейную сложность. В ext4 каталоги могут содержать неограниченное количество записей (на практике — до 2 миллиардов), а для ускорения поиска используется хешированное дерево (HTree), обеспечивающее логарифмическое время доступа.
Подсистема именованных блоков (inode)
Каждый файл и каталог в ext4 представлен структурой данных, называемой inode (индексный дескриптор). Inode хранит метаданные: владелец, права доступа (режимы), даты создания, последнего доступа и изменения, размер, а также указатели на блоки данных (через экстенты). Количество inode в файловой системе фиксируется при создании, что может приводить к нехватке inode при хранении огромного числа очень маленьких файлов. Размер inode по умолчанию составляет 256 байт, но может быть увеличен при форматировании для поддержки расширенных атрибутов.
Классификация
По механизму работы ext4 относится к классу журналируемых файловых систем с полной поддержкой работы с дисковыми массивами. По функциональным характеристикам её часто классифицируют как файловую систему общего назначения:
- Стандартная файловая система для ОС Linux — преемник ext3, поддерживаемая во всех современных ядрах Linux.
- Файловая система для широкого круга задач — от домашних ПК до серверов общего назначения, файловых хранилищ, NAS-систем.
- Файловая система с поддержкой расширенных атрибутов (xattr) — позволяет хранить дополнительные метаданные, такие как SELinux-контексты и списки доступа (ACL). Поддерживаются атрибуты «флаг архивации», «флаг иммутабельности» (immutable) и другие.
Применение
Ключевые области применения ext4:
- Операционные системы на ядре Linux — ext4 используется по умолчанию в большинстве дистрибутивов для установки на жёсткие диски и SSD (с оптимизациями для последних, такими как поддержка TRIM).
- Файловые серверы и NAS — благодаря высокой стабильности, хорошей производительности при последовательных операциях и поддержке больших томов, ext4 часто применяется в системах хранения данных среднего размера.
- Облачные вычисления — многие облачные провайдеры (например, Amazon EC2, Google Cloud, Yandex Cloud) предоставляют виртуальные машины с корневой файловой системой на ext4.
- Встраиваемые системы — ext4 (часто в read-only или журналируемом варианте) используется в маршрутизаторах, сетевых хранилищах, медицинском оборудовании и других устройствах с ограниченными ресурсами.
- Домашние и офисные компьютеры — ext4 обеспечивает приемлемую производительность для повседневной работы, совместимость с существующими инструментами (fdisk, e2fsck, lsattr) и простоту настройки.
Интересные факты
- ext4 не предлагает встроенного сжатия или дедупликации данных (как, например, Btrfs или ZFS). Для достижения аналогичных эффектов на ext4 используются сторонние инструменты или файловые системы поверх неё (например, dm-crypt для шифрования).
- Несмотря на значительный возраст, ext4 остаётся «стандартом де-факто» для Linux-систем. Большинство дистрибутивов по умолчанию используют ext4, хотя для специализированных задач (например, контейнеризация Docker) всё чаще применяются Btrfs или OverlayFS.
- У ext4 есть проблема, называемая «ext4 latency» или «writeback latency» — при агрессивной записи в отложенном режиме может наблюдаться временная пауза, когда ядро сбрасывает большие блоки данных на диск. В современных ядрах эта проблема частично решена за счёт управления приоритетами ввода-вывода.
Критика
Основные недостатки ext4:
- Отсутствие встроенных механизмов сжатия, шифрования и дедупликации — для каждой из этих функций требуется отдельный слой (например, LUKS для шифрования или zram для сжатия).
- Статическое количество inode — при создании файловой системы inode выделяются фиксированно. Если появится необходимость хранить миллиарды очень маленьких файлов, inode могут закончиться раньше, чем дискомая ёмкость. Решается переформатированием с большим отношением inode/блок.
- Ограниченные возможности снэпшотов (мгновенных копий) — ext4 не поддерживает нативные снэпшоты, в отличие от Btrfs или ZFS. Снэпшоты на ext4 можно делать лишь на уровне LVM (Logical Volume Manager), что менее эффективно и более сложно.
- Ограниченная масштабируемость при работе с тысячами параллельных потоков записи — при очень высокой нагрузке ext4 может уступать XFS или Btrfs по пропускной способности.
- Медленное восстановление целостности при сбоях — процесс fsck (проверка и восстановление) для больших томов ext4 может занимать часы, особенно если файловая система не была корректно отмонтирована.
Источники
- Theodore Ts'o. «Ext4: The Next Generation of Extended File System». — Proceedings of the Linux Symposium, 2008.
- M. Tim Jones. «Anatomy of the Linux file system» (статья на IBM DeveloperWorks, 2013).
- Linus Torvalds, Greg Kroah-Hartman. «Linux 2.6.28 changelog». — kernel.org, 2008.
- Jonathan Corbet. «Ext4: the new filesystem for Linux» (LWN.net, 2006).
- Red Hat Enterprise Linux 7.0 Documentation: «File Systems and Storage», 2014.
- Debian Administrator's Handbook: «File systems: ext4, XFS, Btrfs», 2015.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →