Введение

Filesystem in Userspace (FUSE) — программный интерфейс для Unix и Unix-подобных операционных систем, позволяющий не привилегированным пользователям создавать собственные файловые системы без редактирования кода ядра. Это достигается путем запуска кода файловой системы в пользовательском пространстве, а модуль FUSE служит лишь мостом к фактическим интерфейсам ядра. FUSE доступен для Linux, FreeBSD, OpenBSD, NetBSD (в виде puffs), OpenSolaris, Minix 3, macOS и Windows. FUSE является свободным программным обеспечением, изначально выпущенным под лицензиями GNU General Public License и GNU Lesser General Public License.

История

Система FUSE изначально была частью AVFS (A Virtual Filesystem) – реализации файловой системы, на которую оказала сильное влияние концепция транслятора GNU Hurd. Она пришла на смену Linux Userland Filesystem и предоставила трансляционный интерфейс, использующий в libfuse1. FUSE был первоначально выпущен под лицензиями GNU General Public License и GNU Lesser General Public License, а позднее был повторно реализован как часть базовой системы FreeBSD и выпущен под упрощенной лицензией BSD. Перереализация под лицензией ISC, разработанная Сильвестром Галлоном, вышла в марте 2013 года и была включена в OpenBSD в июне 2013 года. FUSE был включен в основное дерево ядра Linux в версии 2.6.14. Пользовательская часть FUSE, библиотека, в целом соответствовала темпам разработки ядра Linux, сохраняя при этом максимально возможную совместимость с потомками BSD. Это стало возможным благодаря тому, что ядро FUSE сообщает о собственных "уровнях функциональности" или версиях. Исключением является ответвление FUSE для macOS, OSXFUSE, которое имеет слишком много отличий для совместного использования библиотеки. Разрывом в истории libfuse является libfuse3, включающая в себя некоторые несовместимые улучшения интерфейса и производительности по сравнению со старой libfuse2, которая теперь находится в режиме поддержки. Поскольку протокол взаимодействия ядра FUSE с пользовательским пространством имеет версии и является общедоступным, программист может выбрать другой программный модуль вместо и все равно взаимодействовать с возможностями FUSE ядра. С другой стороны, и его многочисленные порты предоставляют переносимый высокоуровневый интерфейс, который может быть реализован в системе, не имеющей функциональности "FUSE".

Работа и использование

Для реализации новой файловой системы необходимо написать программу-обработчик, связанную с поставляемой библиотекой libfuse. Основная задача этой программы – определить, как файловая система должна обрабатывать запросы на чтение, запись и получение информации о файле (stat). Эта программа также используется для монтирования новой файловой системы. В момент монтирования файловой системы обработчик регистрируется в ядре. Если пользователь отправляет запросы на чтение, запись или получение информации о файле для этой смонтированной файловой системы, ядро перенаправляет эти запросы ввода-вывода обработчику, а затем передает ответ обработчика пользователю. FUSE особенно полезен для создания виртуальных файловых систем. В отличие от традиционных файловых систем, которые работают непосредственно с данными на запоминающих устройствах, виртуальные файловые системы сами не хранят данные. Они представляют собой представление или преобразование существующей файловой системы или устройства хранения. По сути, любой ресурс, доступный реализации FUSE, может быть представлен как файловая система.

Файловые системы на диске

Обычные файловые системы на диске могут быть реализованы в пользовательском пространстве с помощью FUSE, например, из соображений совместимости или лицензирования. Линейная ленточная файловая система (Linear Tape File System) позволяет обращаться к файлам, хранящимся на магнитной ленте, аналогично файлам на диске или съемных флеш-накопителях. NTFS 3G и Captive NTFS обеспечивают доступ к файловым системам NTFS. retro fuse: retro fuse – это файловая система, работающая в пользовательском пространстве, которая предоставляет возможность монтировать файловые системы, созданные старыми Unix-системами, на современных операционных системах. Текущая версия retro fuse поддерживает монтирование файловых систем, созданных пятым, шестым и седьмым изданиями Research Unix от BTL, а также системами на базе 2.9BSD и 2.11BSD.