LXF76:Учебник Fuse

Материал из Linuxformat.

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

Fuse Виртуальные файловые системы

Ник Вейтч (Nick Veitch) копается в ядре, чтобы подружить файловые системы с пространством

СОЗДАЙ СВОЕ

Fuse API может работать с C, но никто вас не заставляет использовать C для разработки своей собственной файловой системы. Существует множество других «привязок», в том числе Python, который отлично подойдет для экспериментов, к тому же он есть на нашем диске. Создание собственной файловой системы – это поразительно просто, не сложнее работы с API. Все, что от вас потребуется – предоставить механизм для типичных операций файловой системы. В директории Examples есть два примера, которые могут вам в этом помочь, а пакет для работы с «привязками» python-fuse содержит свой собственный пример. Советуем начать с последнего, так как это, возможно, самый быстрый старт!

Виртуальные файловые системы — это по-настоящему здорово, и к тому же весьма полезно. В духе Unix вообще все рассматривать как файлы, включая ресурсы, устройства и т. п. Файл-ориентированная операционная система может извлечь немало полезного из виртуальных файловых систем, и Linux в самом деле уже сейчас поддерживает некоторые из них (вспомним /proc).

Тем не менее, Fuse — свежая идея, способная заставить по-новому взглянуть на использование виртуальных файловых систем (VFS). Fuse означает «файловые системы в пространстве пользователя» (Filesystems in USErspace). Это не что иное, как часть исходного кода ядра ОС, которая позволяет программам генерировать свои собственные файловые системы. Зачем ВАМ это нужно? Вы только представьте: автоматизированная, с шифрованием, со сжатием, удаленная, — Fuse может сделать файловую систему практически из всего.

Даже если вам и неохота хлопотать по поводу создания собственной файловой системы, на Fuse стоит обратить внимание.

Компилируем Fuse

Первый шаг — раздобыть исходные тексты… но постойте — если у вас уже есть новое ядро (выпущенное не раньше ноября 2005), вам это делать ни к чему. С выходом версии ядра 2.6.14, Fuse был официально принят в состав Linux. Так что, если вы являетесь обладателем этой или более поздней версии ядра, либо же читаете данную статью летом 2006 года, наблюдая за развитием чемпионата мира по футболу, можете спокойно перейти к следующему шагу.

Да, Fuse представляет собой модуль ядра, но особо переживать по этому поводу не стоит. Вам будет несложно его настроить и скомпилировать. Не потребуется даже пересобирать ядро заново. Однако если вы используете основной пакет ядра с вашего дистрибутива, следует убедиться в наличии установленных исходных текстов или заголовков ядра. Сегодня немногие дистрибутивы включают полный исходный код при стандартной установке; тем не менее, мы настоятельно рекомендуем вам его установить, особенно если вы желаете немного поэкспериментировать.

Исходные коды Fuse вы найдете в директории Magazine на прилагаемом к журналу диске, а также посетив сайт http://fuse.sourceforge.net, где, возможно, есть более свежая версия программы. Перед тем как непосредственно приступить к процессу компиляции, распакуйте исходный код и перейдите в директорию с Fuse. Далее компилируем Fuse — процедура вполне стандартная для большинства программ, разве что потребуется указать путь к исходным текстам ядра Linux (обычно это /usr/src/linux).

./configure –with-kernel=/usr/src/linux
make
make install

Е сли на этой стадии у вас возникли какие-либо трудности, возможно, они связаны с отсутствием файла .config в корне директории исходных текстов ядра. Скорее всего вы обнаружите его установленным в директории /boot, и все, что от вас потребуется — просто скопировать его.

1/ Модуль ядра Fuse перенаправляет файловые запросы программам в пространство пользователя — значит, с VFS вы можете использовать любое приложение.
1/ Модуль ядра Fuse перенаправляет файловые запросы программам в пространство пользователя — значит, с VFS вы можете использовать любое приложение.

Процесс установки автоматически настроит устройство Fuse. Это символьное устройство, которое будет «обитать» (равно как и другие устройства) в директории /dev. Данное устройство используется для передачи информации между ядром и файловой системой в адресном пространстве пользователя. Как это все взаимодействует, вы можете узнать, посмотрев на схему (см. Рис.1).

Так как это модуль ядра, вы можете запустить (либо перезапустить) его, используя стандартные утилиты ядра:

modprobe fuse
rmmod fuse

Перед тем как попробовать смонтировать файловую систему, основанную на Fuse, вам следует проверить, присутствует ли устройство Fuse и готово ли оно к работе. Сделать это можно, просто набрав команду ls. Получится примерно следующее:

ls /dev/fuse
crw-rw-rw- 1 root root 10, 229 Dec 20 10:04 /dev/fuse

Заметьте, что устройство Fuse принадлежит суперпользователю, но остальные пользователи могут выполнять операции чтения и записи. Дальше, чтобы проверить работоспособность Fuse, вы можете попробовать смонтировать одну из файловых систем, поставляемых в качестве примеров. Для этого, находясь в директории Fuse, выполните следующие действия:

cd example
mkdir plop
./hello plop
cat plop/hello

Здесь я создал директорию ‘plop’, но вы можете использовать любую точку монтирования, какую пожелаете. Заметьте, в отличие от обычных файловых систем, эта работает даже с непривилегированными пользователями, то есть любой может без особого труда монтировать и размонтировать такую файловую систему, когда потребуется. Команда mount, как таковая, при этом не нужна. В данном случае, как и с другими Fuse-ориентированными файловыми системами, запуск программы осуществляется вместе с указанием точки монтирования. Программа, а точнее сказать, библиотека Fuse, сама позаботится о монтировании.

Когда файловая система будет смонтирована, внутри директории как по волшебству появится файл, который будет содержать стандартное приветствие — «Hello World!». На самом деле никакого файла не существует, он — виртуальный, но это не означает, что его нельзя использовать. Он обладает всеми характеристиками обыкновенного файла — к нему применимы и ls, и cat, и less, вы даже можете скопировать его куда угодно. Так как мой пример весьма простенький, файл помечен атрибутом «только для чтения» — вы не сможете его отредактировать. Тем не менее, с остальными файловыми системами под управлением Fuse это не должно составить особого труда.

Fuse без проблем может работать сразу с несколькими файловыми системами одновременно, однако не стоит забывать размонтировать файловую систему, как только вы закончили с ней работать. Команда

fusermount –u plop

все сделает за вас. Вы не можете использовать для этого стандартную утилиту mount — она не сможет снять приложение, да и точку монтирования найти не сумеет.

Итак, мы готовы увидеть Fuse в действии. Сегодня самая полезная (на мой взгляд) файловая система во Fuse — это sshfs. Она позволяет монтировать файловую систему через простое SSH-соединение, а так как SSH поддерживает все необходимое, оно будет работать на любом сервере SSH. Ну, а пользователям это намного упрощает жизнь.

Включаем SSH

Итак, скачиваем последние исходные тексты с http://fuse.sourceforge.net/sshfs.html. После простой компиляции, вы сможете монтировать файловую систему SSH. Проще всего сразу испробовать это на вашей системе.

mkdir plop
./sshfs mysshserver.net plop

В зависимости от настроек сервера, вам, возможно, потребуется ввести пароль (если только вы уже не настроили ключи доступа SSH). А в чем тут прелесть Fuse? Можно, конечно, использовать SFTP для передачи файлов, но монтирование файловой системы означает, что вам будут доступны для использования все привычные утилиты, например,

ДРУГИЕ ПОЛЕЗНЫЕ ФАЙЛОВЫЕ СИСТЕМЫ
Flickrfs

Одна из первых файловых систем, которую я хотел попробовать с Fuse, была Flickrfs 1.1, разработанная для взаимодействия с популярным сайтом, фото-хранилищем, Flickr.com. Несмотря на номер версии, она все еще находится на стадии разработки. Эту файловую систему мы включили в состав нашего диска, вместе с необходимыми «привязками» Python.

Код должен выполнять аутентификацию для учетной записи Flickr, так что вам для начала потребуется ее создать, причем поместить пару картинок, зайдя на http://www.flickr.com. Запустите код, и все ваши изображения отобразятся в файловой системе, отсортированные по тэгам и группам.

Wikipediafs

Все верно – при помощи Fuse можно монтировать знаменитую открытую энциклопедию в качестве файловой системы и просматривать ее документы. Вы даже можете редактировать статьи, используя свой любимый текстовый редактор, и если вы настроите свой идентификатор пользователя, все будет нормально сохраняться. Файловая система пока остается экспериментальной – чтобы узнать последнюю информацию и скачать свежую версию wikipediafs, посетите сайт http://wikipediafs.sourceforge.net.

SMBNetFS

Здесь идея состоит в том, чтобы монтирование разделов Samba было бы таким же простым делом, как и Сетевое окружение в Windows. Виртуальная файловая система загружает доступные сетевые ресурсы и монтирует их по мере необходимости. Сейчас имеются некоторые проблемы, связанные с различными версиями Samba, но для получения новых версий, а также чтобы быть в курсе событий, обращайтесь на http://smbnetfs.airm.net.

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию