Введение
Журнальная файловая система
ReiserFS версия 3
ReiserFS версия 3.6, которую теперь иногда называют Reiser3, представила новый формат на диске, позволяющий работать с файлами большего размера. Компания Namesys считала ReiserFS стабильной и полностью функциональной и прекратила её разработку, чтобы сосредоточиться на её преемнике, Reiser4, хотя продолжала выпускать обновления безопасности и исправления критических ошибок. Компания Namesys прекратила свою деятельность в 2008 году после обвинительного приговора Райзеру за убийство. В настоящее время продукт поддерживается как открытый исходный код добровольцами. Пакет reiserfsprogs 3.6.27 был выпущен 25 июля 2017 года. В настоящее время ReiserFS поддерживается в Linux без поддержки квот. Вопрос об удалении ReiserFS из ядра Linux обсуждается с начала 2022 года из-за отсутствия поддержки со стороны разработчиков и присущих файловой системе технических проблем, таких как уязвимость к проблеме 2038 года. Она была объявлена устаревшей в Linux 5.18 и помечена как неактуальная в Linux 6.6. Планируется её полное удаление в 2025 году.
Особенности
На момент своего появления ReiserFS предлагал функции, недоступные в существующих файловых системах Linux. Одним из примеров является упаковка концов файлов — схема для уменьшения внутренней фрагментации за счёт некоторой потери производительности. Reiser4, возможно, улучшила этот подход, упаковывая концы файлов только в тех случаях, когда это не сказывается на производительности.
Дизайн
ReiserFS хранит метаданные файлов ("stat items"), записи каталогов ("directory items"), списки блоков инодов ("indirect items") и концевые части файлов ("direct items") в едином, комбинированном B+ дереве, индексированном универсальным идентификатором объекта. Дисковые блоки, выделенные узлам дерева, являются "форматированными внутренними блоками". Блоки для листовых узлов (в которых элементы упакованы последовательно) являются "форматированными листовыми блоками". Все остальные блоки являются "неформатированными блоками", содержащими содержимое файлов. Записи каталогов с чрезмерным количеством записей или косвенные элементы, слишком длинные для размещения в узле, переполняют соседний листовой узел справа. Распределение блоков отслеживается с помощью битовых карт свободного пространства, расположенных в фиксированных местах. В отличие от этого, ext2 и другие файловые системы, подобные Berkeley FFS того времени, использовали фиксированную формулу для вычисления расположения инодов, тем самым ограничивая количество файлов, которые они могут содержать. Большинство таких файловых систем также хранят каталоги как простые списки записей, что делает поиск и обновление каталогов операциями с линейной временной сложностью и снижает производительность в очень больших каталогах. Единая B+ древовидная структура ReiserFS позволяет избежать обеих этих проблем благодаря лучшим характеристикам масштабируемости.
Выступление
По сравнению с ext2 и ext3 в версии 2.4 ядра Linux, ReiserFS может работать быстрее при работе с файлами размером менее 4 КБ и при включенной хвостовой упаковке. До Linux 2.6.33 ReiserFS интенсивно использовал большой блокировочный механизм ядра (BKL) — глобальную блокировку, охватывающую всё ядро, — который плохо масштабируется на системах с несколькими ядрами, поскольку критически важные участки кода выполнялись только одним ядром одновременно.
Использование
ReiserFS была файловой системой по умолчанию в SuSE Linux начиная с версии 6.4 (выпущенной в 2000 году) и до перехода на ext3 в SUSE Linux Enterprise 10.2 и openSUSE 11, о котором было объявлено в 2006 году. 14 сентября 2006 года Джефф Махони из SUSE опубликовал сообщение, в котором предлагал перейти на ext3 в качестве файловой системы установки по умолчанию. Он отметил, что его предложение о переходе не связано с тем, что Ханс Райзер находился под судом за убийство. Махони написал, что он "беспокоился, что люди могут провести связь там, где её нет", и что "совпадение по времени совершенно случайно, а мотивация не связана с этим". В случае аварийной остановки машины до завершения синхронизации данных на диск, данные (включая данные Postfix) могут быть потеряны. Специальных программ для дефрагментации файловой системы ReiserFS не существует, хотя были разработаны инструменты для автоматического копирования содержимого фрагментированных файлов в надежде найти более смежные блоки свободного пространства. Однако, для следующей файловой системы Reiser4 планировалось создание инструмента "переупаковки" для решения проблемы фрагментации файлов. Фрагментация остаётся проблемой для SSD независимо от используемой файловой системы.
ФСК
ФСК ReiserFS 3 способна перестроить всё дерево в рамках операции восстановления в случае его полного повреждения. Эта операция должна быть явно инициирована администратором и не является частью нормальной работы. Как и ожидалось, процесс является деструктивным и может дополнительно повредить существующие файлы или создать новые записи с неожиданным содержимым, что подверглось критике как неоптимальный метод. Образы ReiserFS v3 не следует хранить на разделе ReiserFS v3 (например, резервные копии или образы дисков для эмуляторов) без их преобразования (например, сжатия или шифрования), чтобы избежать путаницы при перестройке. Переформатирование существующего раздела ReiserFS v3 также может оставить данные, которые могут помешать операции восстановления и привести к повторному появлению файлов из старой системы. Это также позволяет злоумышленникам намеренно хранить файлы, которые запутают перестройщик. Поскольку метаданные всегда находятся в согласованном состоянии после проверки файловой системы, повреждение в данном случае означает, что содержимое файлов неожиданным образом смешивается с метаданными файловой системы. Это аналогично проблеме FSID в btrfs. Преемник ReiserFS, Reiser4, решает эту проблему. ReiserFS в версиях ядра Linux до 2.4.16 считалась Namesys нестабильной и не рекомендовалась для использования в производственной среде, особенно в сочетании с NFS. Ранние реализации ReiserFS (до версии в Linux 2.6.2) также были подвержены опасностям, связанным с нарушением порядка записи. Однако текущая реализация журналирования в ReiserFS теперь соответствует уровню "упорядоченного" журналирования ext3.