Журнал LinuxFormat - перейти на главную

LXF117:DrBrown2

Материал из Linuxformat
Перейти к: навигация, поиск

Пользовательские файловые системы

Fuse Теперь не нужно быть разработчиком ядра, чтобы создать собственную файловую систему – все сделает Filesystem in USErspace.

Для начала разберемся, что такое файл. Для доступа к файлам Linux предоставляет приложениям набор системных вызовов с именами типа open(), read(), write(), close() и т. д. Это подразумевает классическое представление о файле как о структуре данных, сохраняемой на диске, и существует несколько таких структур (или файловых систем) – ext3, ReiserFS, FAT32 и т.д. Кроме того, бывают удаленные файловые системы (например, на серверах), для доступа к которым используются сетевые протоколы типа NFS и CIFS (подробнее об NFS см. в Учебнике про сети). Вам, наверное, даже знакомы «мнимые» файловые системы – те, что монтируются на каталоги /proc и /sys и представляют в виде файлов внутренние структуры данных ядра.

Все эти системы лежат в ядре Linux под слоем виртуальной файловой системы Virtual File System (VFS), поддерживающим стандартный подход к файлам независимо от их фактической реализации. При этом для программ пользователя любой внутренний механизм, который предоставляет данные в ответ на набор системных вызовов, выглядит как набор файлов.

Теперь мороки меньше!

Традиционно реализация всех файловых систем, лежащих ниже слоя VFS, происходила в ядре, и ввод новой файловой системы означал написание модуля и перекомпиляцию ядра. Чтобы новая файловая система появилась в крупных дистрибутивах, она должна попасть в официальный исходный код Linux – это задача непростая. Fuse все меняет, позволяя реализовать файловые системы в пространстве пользователя (user space). Fuse – сокращение от «Filesystem in USEr space»; об этом названии, пожалуй, сейчас сожалеет даже ее создатель.

Файловая система Fuse – просто пользовательская программа, предоставляющая содержимое файлов под заданной точкой монтирования. Она обязательно регистрируется в ядре, говоря: «При заявке на содержимое файловой системы в таком-то каталоге, передай запрос мне». Он обрабатывается любым удобным способом, и такую программу можно написать почти на любом языке программирования – C, Perl, Python и т.д. Запуск ее возможен даже под обычным пользователем. В итоге Fuse открыла эксперименты с файловыми системами гораздо большему кругу разработчиков, и тут же возникла уйма странных и чудных файловых систем…

  • encfs Файловая система с шифрованием на основе OpenSSL. Драйверу файловой системы передаются исходный каталог и точка монтирования. Файлы, записанные в точке монтирования, появляются зашифрованными в исходном каталоге, и наоборот.
  • sshfs Эта файловая система позволяет смонтировать удаленный каталог в локальную файловую систему по протоколу SFTP, поддерживаемому SSH-сервером. Окончательный результат очень похож на NFS, но весь трафик шифруется по SSH-соединению, и монтировать и размонтировать ее могут обычные пользователи.
  • clamfs При обращении к файлам нижележащей файловой системы реализует проверку антивирусом ClamAV. Найдя зараженный файл, автоматически отправляет электронное письмо администратору.
  • rofs-filtered Позволяет смонтировать каталог в режиме только для чтения и отфильтровать файлы, отображаемые в каталоге, на основе заданного набора регулярных выражений.
  • virtual800 Заполняет свою точку монтирования набором очень, очень больших (виртуальных) файлов, чем можно воспользоваться, например, для тестирования передачи больших файлов.
  • vmware-mount Позволяет смонтировать образ диска VMware (файл .vmdk) и обращаться к нему из хост-системы.

Файловая система «с приветом»

Наверное, самая нелепая из всех файловых систем Fuse«hello world». Найти ее можно в примере, поставляемом с исходными кодами пакета Fuse: она заполняет свою точку монтирования файлом с именем hello, который содержат строку ‘Hello World’. В программе, прилагаемой только как доказательство идеи, не больше ста строк.

Персональные инструменты
купить
подписаться
Яндекс.Метрика