Введение

Журнальная файловая система для Linux, ext3 или третья расширенная файловая система, – это журнальная файловая система, широко используемая ядром Linux. Ранее она являлась файловой системой по умолчанию для многих популярных дистрибутивов Linux. Стивен Твиди впервые сообщил о работе над расширением ext2 в статье «Journaling the Linux ext2fs Filesystem» в 1998 году, а затем – в февральской рассылке списка рассылки ядра в 1999 году. Файловая система была включена в основное ядро Linux в ноябре 2001 года, начиная с версии 2.4.15. Её главное преимущество перед ext2 – ведение журнала, которое повышает надёжность и избавляет от необходимости проверки файловой системы после аварийного завершения работы. Преемником ext3 является ext4.

Функциональность

Поскольку ext3 стремится к обратной совместимости с более ранней ext2, многие структуры на диске схожи с таковыми в ext2. Следовательно, ext3 лишена современных функций, таких как extents, динамическое выделение inode и подраспределение блоков. Каталог может содержать не более 31998 подкаталогов, поскольку inode может иметь не более 32000 ссылок (каждый прямой подкаталог увеличивает счетчик ссылок inode своей родительской папки). На ext3, как и на большинстве современных файловых систем Linux, системную утилиту "fsck" не следует использовать при смонтированной для записи файловой системе. Существуют инструменты дефрагментации, работающие в пользовательском пространстве, такие как Shake и defrag. Shake работает, выделяя пространство для всего файла одной операцией, что обычно приводит к поиску непрерывного пространства на диске. Если файлы используются одновременно, Shake попытается записать их рядом друг с другом. Defrag работает, копируя каждый файл поверх себя. Однако эта стратегия эффективна только при наличии достаточного свободного места в файловой системе. Специализированного инструмента дефрагментации для ext3 не существует. Однако, как указано в Руководстве системного администратора Linux, "современные файловые системы Linux минимизируют фрагментацию, располагая все блоки файла близко друг к другу, даже если они не могут быть сохранены в последовательных секторах. Некоторые файловые системы, такие как ext3, эффективно выделяют свободный блок, ближайший к другим блокам файла. Поэтому беспокоиться о фрагментации в системе Linux не требуется". Хотя ext3 устойчива к фрагментации файлов, со временем или при определенных сценариях использования, например, при медленной записи больших файлов, фрагментация все же может возникать. Следовательно, ext4 (преемник ext3) имеет утилиту онлайн-дефрагментации файловой системы e4defrag и в настоящее время поддерживает extents (непрерывные области файла).

Восстановление

ext3 не поддерживает восстановление удалённых файлов. Драйвер ext3 активно удаляет файлы, очищая inode-ы файлов из соображений надёжности при сбоях. Тем не менее, существуют различные методы и бесплатное и коммерческое программное обеспечение для восстановления удалённых или потерянных файлов путём анализа журнала файловой системы, однако они не гарантируют восстановление каких-либо конкретных файлов.

Сжатие

e3compr — это неофициальный патч для ext3, обеспечивающий прозрачное сжатие. Это прямой порт e2compr и всё ещё требует дальнейшей разработки. Он успешно компилируется и загружается с основными версиями ядра, но ведение журнала пока не реализовано.

Отсутствие поддержки снимков

В отличие от многих современных файловых систем, ext3 не поддерживает моментальные снимки "из коробки" – возможность быстрого сохранения состояния файловой системы в любой момент времени. Вместо этого она использует менее эффективные по объему снимки на уровне тома, предоставляемые Linux LVM. Файловая система Next3 представляет собой модифицированную версию ext3, которая обеспечивает поддержку моментальных снимков, сохраняя при этом совместимость с форматом дисков ext3.

Нет контрольной суммы в журнале

ext3 не выполняет проверку контрольными суммами при записи в журнал. На устройстве хранения с дополнительным кэшем, если опция монтирования barrier=1 не включена (в /etc/fstab), и если аппаратное обеспечение выполняет кэширование записи в произвольном порядке, существует риск серьезной коррупции файловой системы при сбое. Это происходит потому, что устройства хранения с кэшем записи сообщают системе о завершении записи данных, даже если они фактически записаны только в (неустойчивый) кэш. Если записи на жесткий диск выполняются не последовательно (из-за современных жестких дисков, кэширующих записи для повышения скорости записи), вероятно, что блок коммита транзакции будет записан до записи других соответствующих блоков. Если произойдет сбой питания или необратимая ошибка до завершения записи остальных блоков, система будет перезагружена. При перезагрузке файловая система воспроизведет журнал как обычно, воспроизведя "победившие" транзакции (транзакции с блоком коммита, включая недействительную транзакцию, которая случайно была помечена допустимым блоком коммита). Незавершенная запись на диск продолжится, но с использованием поврежденных данных журнала. В результате файловая система ошибочно перезапишет нормальные данные поврежденными данными при воспроизведении журнала. Если бы использовались контрольные суммы, и блоки "ложной победившей" транзакции были помечены взаимными контрольными суммами, файловая система могла бы определить это и не воспроизводить поврежденные данные на диск. Проверка контрольными сумм журнала была добавлена в ext4. Файловые системы, использующие интерфейс device mapper (включая программные реализации RAID и LVM), могут не поддерживать барьеры и выдадут предупреждение при использовании этой опции монтирования. Также существуют диски, которые некорректно реализуют расширение для очистки кэша записи, необходимое для работы барьеров, что также вызывает предупреждение. В таких ситуациях, когда барьеры не поддерживаются или нецелесообразны, надежное упорядочение записи возможно путем отключения кэша записи диска и использования соответствующей опции монтирования. Существует также потенциальная проблема с реализацией барьеров, связанная с обработкой ошибок во время событий, таких как выход из строя диска. Также известно, что некоторые технологии виртуализации иногда некорректно пересылают команды fsync или flush на базовые устройства (файлы, тома, диски) из гостевой операционной системы. Аналогично, некоторые жесткие диски или контроллеры некорректно или вообще не реализуют очистку кэша, но при этом заявляют о ее поддержке и не возвращают ошибок при ее использовании. Существует множество способов некорректной обработки fsync и кэша записи, поэтому безопаснее предполагать, что очистка кэша не работает, если она не была явно протестирована, независимо от предполагаемой надежности отдельных компонентов.

Ближайшее исчезновение из-за ограничения даты

Ext3 хранит даты в формате Unix time, используя четыре байта в заголовке файла. 32 бита недостаточно для продолжения работы с файлами после 18 января 2038 года – проблема 2038 года.

ext4

28 июня 2006 года Теодор Цо, основной разработчик ext3, объявил о новой улучшенной версии – ext4. 11 октября 2008 года патчи, подтверждающие стабильность ext4, были включены в репозитории исходного кода Linux 2.6.28, что ознаменовало завершение этапа разработки и рекомендовало её использование. В 2008 году Цо заявил, что, несмотря на улучшенные характеристики ext4, такие как значительно более высокая скорость по сравнению с ext3, это не является существенным прорывом, поскольку она использует устаревшие технологии и представляет собой временное решение. Цо считает, что Btrfs – более перспективное направление, так как "обеспечивает улучшения в масштабируемости, надёжности и простоте управления". Btrfs также использует "некоторые из тех же принципов проектирования, что и reiser3/4".