Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #95, НОЯБРЬ 2006 г.

Через революцию к эволюции

Евгений «j1m» Зобнин

Хакер, номер #095, стр. 095-110-3


1. Позволить непривилегированному пользователю создавать и подключать файловые системы.

2. Получить возможность представления любых сущностей в виде файловой системы, будь то tar-архив или ftp-ресурс.

3. Избежать включения в ядро лишнего кода.

4. Обеспечить возможность функционирования ядра при возникновении критической ошибки в коде файловой системы.

FUSE состоит из трех компонентов: подсобной утилиты fusermount, библиотеки libfuse, представляющей интерфейс для программ, и модуля ядра fuse.ko, связывающего библиотеку и ядро. FUSE работает на манер стандартной подсистемы VFS ядра. При обращении к одному из файлов, ядро запускает функцию-обработчик модуля fuse.ko, который пишет информацию о файле и инициированной операции в специальный сокет. Библиотека libfuse в цикле читает данные из сокета и вызывает обработчик программы. Принцип обратного вызова процедур. Просто и элегантно.

Интерфейс FUSE подтвердил свою жизнеспособность и востребованность уже несколько раз. Сначала он был включен в официальную ветку ядра Linux (с версии 2.6.14). Затем был перенесен в FreeBSD. А сегодня на его основе строятся не только файловые системы, предоставляющие доступ к архивам и удаленным сервисам, но и серьезные ФС, вроде ext2 (проект fuse-ext2), NTFS (проект ntfs-3g) и даже ZFS (проект zfs-fuse, который находится в стадии разработки). Количество проектов, созданных на основе FUSE, стало просто огромным (смотри fuse.sf.net).

Эволюция с рожками

Разработчики BSD-систем всегда придерживались более консервативных взглядов, нежели сообщество Linux. Это легко заметить, изучив историю развития, например, FreeBSD. Настоящих переломных моментов за все время существования этой ОС было меньше, чем в Linux. Минусом этот факт считать не стоит, так как разработка FreeBSD ведется иным, отличным от Linux, путем. В то время как в ядро Linux спешат включить как можно больше новейших технологий, пусть даже несовместимых между собой, разработчики FreeBSD, напротив, стремятся придать механизмам ядра более универсальный характер, сделать ядро более цельным в плане архитектуры.

Devfs

Виртуальная файловая система devfs была включена в ядро FreeBSD версии 5.2. Она очень сходна с реализацией для Linux и решает ту же проблему - избавление от «бардака» в каталоге /dev. Кроме того, предусмотрен специальный механизм, который в сочетании с демоном devd позволяет назначать файлам устройств произвольные имена и осуществлять какие-либо действия над подключенным устройством, вроде монтирования файловой системы flash-диска или настройки сетевой карты.

GEOM

Начиная с FreeBSD версии 4.9, все операции ввода-вывода от файловой системы к драйверу диска проходят через уровень GEOM. В задачи этого уровня входит выполнение всевозможных преобразований запросов ввода-вывода, необходимых для расчленения диска на разделы, создания томов RAID или логических томов. При этом сам механизм GEOM является объектно-ориентированным и позволяет разбить операции преобразования на обособленные классы, которые можно комбинировать. Например, существуют классы MBR и disklabel (метка диска BSD). Соединив экземпляры этих классов в цепь, мы получим стандартное преобразование ввода-вывода, когда файловая система работает с разделом BSD, расположенным на стандартном разделе MBR. Есть еще класс, работающий с ATA-драйвером, его экземпляр будет находиться в самом конце цепи.

Назад на стр. 095-110-2  Содержание  Вперед на стр. 095-110-4