Андрей Пешеходов
Многим пользователям в ОС Linux нравится не только её открытость,
стабильность и прочие немаловажные характеристики, а, прежде всего, гибкость. В
Linux, наверное, нет ни одного компонента, которому нельзя было бы подобрать
альтернативу. Не являются исключением и файловые системы.
Их насчитывается более двух десятков. Между собой они отличаются не только
по дисковой структуре и алгоритмам обработки данных, но и по
предоставляемой функциональности. Большую часть составляют так называемые
сторонние файловые системы, реализованные для совместимости, например, vfat, ntfs,
UFS, и т. д. «Родных» же файловых систем для этой ОС, обеспечивающих
все необходимые функции, до недавнего времени было пять: ext2, ext3, reiserfs,
XFS, и JFS.
Сегодня вы познакомитесь с новинкой в этой
группе – файловой системой reiser4, спроектированной Гансом Рейзером и его
компанией NameSys. Несмотря на название, эта ФС написана с нуля, хотя и
унаследовала некоторые особенноcти своего «идеологического» предшественника – reiserfs.
Помимо традиционных для Linux-ФС функций reiser4
предоставляет пользователям ряд дополнительных возможностей: прозрачное сжатие
и шифрование файлов, полное журналирование данных (реализовано только
в ext3), а также практически неограниченную (за счет плагинной
архитектуры) расширяемость, т.е. способность приспосабливаться к сколь угодно
сложным запросам потребителей.
Надеюсь, вы обладаете навыками программирования
на языке C и знакомы с базовыми принципами организации современных файловых
систем – без этого понять материал будет трудно.
Примечание: все пути отсчитываются от каталога fs/reiser4/
в дереве исходников ядра Linux.
Плагины
Reiser4 основана на плагинах – внутренних программно-обособленных модулях,
предоставляющих пользователям возможность максимально адаптировать файловую
систему к своим задачам.
Жестко в драйвер reiser4 зашит только код,
занимающийся работой с диском, поддержкой различных абстракций и балансировкой
дерева, операции же почти над всеми объектами файловой системы – как
внутренними, так и экспортируемыми, как дисковыми, так и in-memory –
реализованы в виде плагинов и могут быть расширены дополнительными типами или
вовсе заменены пользовательскими альтернативами. В настоящее время reiser4 не
поддерживает динамическую регистрацию плагинов (т.е. для подключения
нового модуля придется перекомпилировать весь драйвер), однако в будущих
версиях файловой системы эта возможность будет реализована.
Reiser4 не имеет жестко определенной ни дисковой,
ни алгоритмической структуры, практически любая ее часть может быть легко
изменена или дополнена. Я опишу сегодня то, что разработчики называют
«format40» – семейство свойств файловой системы, определенных стандартным
набором плагинов от NameSys.
Детали реализации плагинной инфраструктуры будут
рассмотрены ниже.