FUSE: celý svět je souborový systém

4. 10. 2011
Doba čtení: 8 minut

Sdílet

Univerzální souborový systém FUSE má téměř nekonečné použití. Dokáže jakákoliv data proměnit v soubory a adresáře na vašem disku. Můžete si tak připojovat archivy, vzdálené servery přes SSH nebo třeba články na Wikipedii. Popíšeme si, jak FUSE funguje a ukážeme si některá jeho zajímavá praktická využití.

Co je to FUSE?

FUSE je zkratka pro Filesystem in Userspace neboli souborový systém v uživatelském prostoru. Umožňuje běžným neprivilegovaným uživatelům přistupovat k virtuálním souborovým systémům. Ba co víc, díky své podstatě umožňuje velmi jednoduché vytvoření souborového systému téměř z jakýchkoliv dat či služby. To z něj dělá velmi mocný nástroj.

Nejedná se o žádnou zásadní novinku, do linuxového jádra se FUSE dostalo ve verzi 2.6.14, která vyšla už před šesti lety. Přesto je to software řadě uživatelů neznámý. Buďto o jeho existenci nevědí vůbec nebo neznají zdaleka všechny jeho schopnosti a využívají ho jen proto, že ho používá některá z jejich aplikací.

FUSE není specialita určená jen pro Linux, ale naopak je široce multiplatformní. Kromě Linuxu jej naleznete také ve FreeBSD, NetBSD (pod názvem puffs), OpenSolaris a Mac OS X. Na všech těchto systémech si užijete stejných funkcí a stejných virtuálních systémů.

Jak to funguje a proč je to tak revoluční

Tradiční ovladač souborového systému je jaderný modul a je tedy pevnou součástí linuxového jádra. Běží v jaderném paměťovém prostoru a jako takový musí ctít všechna pravidla, která pro jádro platí. Napsat takový modul není jednoduché, navíc je třeba sledovat vývoj jádra a modul mu přizpůsobovat. Takový souborový systém pak může spravovat jen superuživatel (root) a může přidělovat uživatelům práva jen k jednotlivým mountpointům.

Použití souborového systému pak funguje tak, že jádro dostane požadavek od aplikace (třeba „vypiš mi adresář“), ten předá ovladači souborového systému. Ten pak požadavek obslouží, získá třeba data z disku, zformuluje odpověď (seznam vypsaných souborů) a ty pak jádro předá zpět aplikaci jako hotovou věc.

Vše důležité tedy probíhá uvnitř jádra. Dnešní svět je ale plný různých výměnných zařízení, specializovaných serverů či služeb a proto by bylo vhodné, kdyby existoval podstatně volnější a otevřenější přístup k souborovým prostorům. Právě proto vzniklo FUSE.

FUSE se z hlediska jádra tváří jako další běžný souborový systém, funguje ale jinak. Nestará se o vyřízení požadavku a sestavení odpovědi, ale naopak jen skrze knihovnu libfuse spustí běžný uživatelský program nebo dokonce obyčejný skript a tomu nechá udělat vše podstatné. Jádro (respektive jeho modul FUSE) vlastně spustí běžnou aplikaci a řekne jí: Vstávej, mám tu požadavek na vypsání adresáře /hry a máš to udělat ty. Udělej to! Jakmile se mu odpověď v požadované formě vrátí, zase ji předá jádru a to pak původní aplikaci, která dotaz vznesla. Vše je krásně vidět na následujícím schématu:

Tento postup má několik výhod:

  • celá logika souborového systému je zapsaná v jednoduchém programu/skriptu
  • ten je zcela nezávislý na platformě či operačním systému
  • obsluhu souborových systémů dostane do rukou i běžný uživatel
  • API FUSE se nemění, takže programy není třeba upravovat pro verze jádra

Poslední zmíněné vlastnosti využívá například linuxový TrueCrypt. Dříve bylo třeba jeho jaderný modul (se souborovým systémem) kompilovat proti jádru, které jste měli právě nainstalované. To bylo nepohodlné a vyžadovalo to instalaci několika dalších balíčků. Teď je TrueCrypt napsán pod FUSE a tyto problém odpadají.

Co všechno lze proměnit v souborový systém?

Ve zkratce: úplně všechno. Některé virtuální souborové systémy pro FUSE se skutečně pohybují po discích, jak jsme zvyklí. Častěji ale proměňují „jiné datové struktury“ v soubory na disku. V tom je právě ohromná síla FUSE.

Štve vás složité ovládání BugZilly? Můžete mít souborový systém, na který zapíšete soubor a ten se automaticky promění v nový bug. Zlobí vás složité připojování ISO obrazů? Opět stačí malý prográmek, který vše udělá za vás a skrze FUSE vám rovnou zobrazí soubory uvnitř. Potřebujete takto snadný přístup k Wiki? Mailům? Čemukoliv dalšímu? Přesně tak funguje FUSE – proměňuje celý svět v soubory.

Jak se to používá?

Velmi jednoduše. Nejprve je třeba nainstalovat potřebné balíčky. Určitě budou ve vaší distribuci, hledejte balíčky fuse či fuse-utils. Poté je třeba přidat uživatele do skupiny fuse a máte hotovo.

Samozřejmě je třeba ještě nainstalovat příslušný souborový systém. To můžete provést buďto opět pomocí systémových balíčků nebo už stačí někam do domovského adresáře nahrát příslušný skript. Samozřejmě doporučuji první variantu, ale pokud na to nemáte práva, určitě nepohrdnete možností si vše řídit ve svém domovském adresáři.

V takovémto článku nesmí chybět praktická ukázka, takže si předvedeme použití sshfs. Připojení provedeme příkazem:

$ sshfs petr@server.nekde.cz: /tmp/soubory

Syntaxe je jednoduchá: uživatel, server a přípojný bod, kde budou vidět naše soubory. Odpojení je také snadné:

$ fusermount -u /tmp/soubory

A to je vše. Dostáváme se k poslední části článku, ve které si řekneme o tom, co všechno můžeme připojit jako souborový systém do našeho počítače.

SSHFS

O SSHFS jsme si řekli něco už v příkladu výše, takže teď podrobněji. Tento velmi užitečný program vám umožní na dálku spravovat soubory, adresáře a vůbec data na serveru. Používá k tomu SFTP (viz jiný článek) a na serveru tedy musí běžet jen klasické SSH.

SSHFS je velmi bezpečný a při použití přihlášení klíči také velmi pohodlný způsob práce se soubory. Znám několik lidí, kteří jej používají i pro přístup k lokálnímu souborovému serveru.

CurlFtpFS

Pokud z nějakého důvodu stále potřebujete užívat starého (a nezabezpečeného) protokolu FTP, také s tím vám může FUSE pomoci. Existuje modul CurlFtpFS, který vám opět umožní si FTP připojit. Program umí nejen čisté FTP, ale dokáže také šifrovat pomocí SSL či TLS a umí tunelovat spojení skrze HTTP proxy. Také sám naváže spojení v případě timeoutu.

Poznámka: dříve existoval modul FtpFS, který ale nepoužíval FUSE a byl samostatným souborovým systémem do jádra. Tento modul je dnes považován za zastaralý, takže si dejte pozor, abyste jej s CurlFtpFS nezaměnili.

NTFS-3G

Pokud v Linuxu používáte souborový systém NTFS, možná ani nevíte, že také používáte FUSE. Dříve byly s přístupem na NTFS v Linuxu velké problémy, používaly se různé obskurní implementace, které využívaly dll soubor z originálních Windows či umožňovaly jen čtení, ale už ne zápis. Vše takříkajíc „rozsekl“ až projekt NTFS-3G, který v roce 2007 přinesl plnohodnotnou a kvalitní implementaci NTFS využívající FUSE.

NTFS-3G umožňuje číst, zapisovat, měnit, přejmenovávat i mazat soubory na NTFS discích. Podporuje dokonce i práci s právy (ACL), žurnálování a transparentní kompresi souborů. Jediné, co neumí, je šifrování těchto disků. Odpovídající je i výkon, který se blíží originálu. Dnes už tedy nic nebrání v použití NTFS v Linuxu.

ZFS FUSE

Souborový systém ZFS patří zejména do Solarisu, ale i v Linuxu je dostupný. Dnes je k dispozici výkonná nativní varianta, ale existuje i starší projekt ZFS FUSE, který tento souborový systém implementoval. Má ale dvě nevýhody, kvůli kterým vám příliš nedoporučujeme jej nasadit: má mizerný výkon a projekt je v podstatě mrtvý – poslední verze vyšla v roce 2008.

FuseISO

Pokud si chcete v Linuxu připojit ISO obraz, musíte mít práva administrátora. Pokud je nemáte, můžete využít FUSE a program FuseISO, který umožňuje obrazy připojovat. Nezvládá jen formáty ISO, ale i IMG, BIN, MDF a NRG. Pro připojení pak stačí jednoduše zavolat:

$ fuseiso ubuntu.iso /tmp/ubuntu

ArchiveMount

O ArchiveMount jsme psali v samostatném článku, takže tady jen stručně. Velmi šikovný program umožňuje připojovat archivy (gzip, bzip2, compress, lzma, xz a další). Nabízí tak pohodlné vytváření či rozbalování velkých archivů. Ideální je ve chvíli, kdy potřebujete přidat, odebrat či změnit jen několik málo souborů.

EncFS

Umožňuje šifrovat soubory na vašem disku. Při použití EncFS jsou do procesu zahrnuty dva adresáře: jeden obsahuje otevřenou podobu vašich dat a ve druhém jsou soubory zašifrovány. Výhodou je, že prostor v šifrovaném adresáři není předem pevně stanoven, ale naopak roste a zmenšuje se podle toho, jak soubory využíváte.

EncFS používá k šifrování systémové knihovny, které obvykle nabízejí bezpečné šifry Blowfish a AES. K šifrování se používá klíč, který je v zašifrované podobě uložen v samostatném souboru v adresáři. K rozšifrování tohoto klíče se jako obvykle používá heslo.

Obskurní, nefunkční a neprověřené

Článek zakončíme malým panoptikem, ve kterém si ukážeme FUSE aplikace, které můžeme zahrnout do kategorie: experiment, mrtvola či nefunkční, případně do více z nich zároveň. Některé ale dokazují všemocnost FUSE, takže je nesmíme opomenout.

DropboxFS

Službu DropBox pravděpodobně už znáte. Umožňuje synchronizovat soubory mezi několika počítači a serverem. Některým uživatelům ale vadí, že pro její použití potřebují nainstalovat balíček s proprietárním programem, který se o synchronizaci stará.

Existuje ale možnost přístupu k souborům i přes webové rozhraní, a toho právě využívá experimentální DropboxFS. Jedná se o několikasetřádkový skript v Ruby, který vám zpřístupní váš DropBox disk. Nezkoušel jsem ho, ale podle všeho by měl fungovat.

WikipediaFS

Jako důkaz všestrannosti FUSE může sloužit třeba WikipediaFS. Tento virtuální systém promění Wikipedii (nebo jakoukoliv Mediawiki instalaci) v soubory na vašem disku. Pokud chcete prohlížet a pohodlně editovat, stačí otevřít příslušný soubor ve vašem oblíbeném textovém editoru. Stránky jsou stahovány až ve chvíli, kdy soubor požadujete. Bohužel se jedná také o mrtvý projekt, poslední verze vznikla v roce 2007.

bitcoin školení listopad 24

GmailFS

Asi nejznámější modul pro FUSE, který umožňoval (umožňuje?) použít Gmail jako prostor pro ukládání souborů. Soubory jsou nahrávány jako jednotlivé maily a GmailFS je opět dokáže zobrazit a na požádání stáhnout. Problémem bylo (a stále je), že tím dochází k porušování pravidel Gmailu, který podobné využití neumožňuje. Pokud budete GmailFS zkoušet, vystavujete se nepříjemnému riziku zablokování Google účtu. Nedělal bych to, dnes existují lepší služby pro archivaci souborů na internetu.

Celý svět je soubor

Výše zmíněné FUSE souborové systémy ukazují na neuvěřitelně široké možnosti využití FUSE. Mnoho různých programů už vzniklo, ale vy si můžete pro své potřeby vytvořit další. Jen se podívejte, jestli už podobnou věc nenapsal někdo před vámi. Je to totiž docela dobře možné.

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.