De zin en onzin van file systems met FUSE

Een file system is een essentieel onderdeel van een computersysteem. Je laptop heeft het, onze servers hebben het en zelfs je telefoon heeft het. Maar goed ook, want het stelt je in staat om gegevens op te slaan en te lezen. Iets dat je voortdurend doet. Onlangs zag ik een aantal creatieve bestandssystemen en vroeg ik mij af of ik er ook zelf één kon bouwen…

File systems met FUSE.

Als gebruiker heb je vaak weinig van doen met het binnenwerk van een file system. Het is iets onzichtbaars en tegelijkertijd altijd aanwezig. Kijk je echter wat dieper, dan zijn de mogelijkheden haast oneindig. FUSE speelt daarbij een belangrijke factor en daarom vertel ik je er graag over. Wat is het, wat heb je eraan en wat kan het voor jou betekenen?

Wat is FUSE?

Fuse staat voor Filesystem in Userspace en stelt niet kernel developers in staat om eenvoudig een bestandssysteem op te zetten. Klassieke bestandssystemen zijn vaak aan fysieke apparaten gekoppeld, zoals harde schijven, SSD’s en USB-sticks. Doorgaans maken deze file systems deel uit van het besturingssysteem.

Ontwikkel je een klassiek bestandssysteem, dan wordt je ook geconfronteerd met allerlei details van je besturingssysteem. Voor klassieke file systems is dit geen probleem. De ontwikkelaars die zich daarmee bezighouden, zijn meestal ook bekend met de Linux-kernel en alles wat daarbij komt kijken.

Het kan echter ook dat je een bestandssysteem wilt maken dat niet direct een cruciaal onderdeel van van je besturingssysteem is. Je wilt je dan niet hoeven bezighouden met bijvoorbeeld kernel-ontwikkeling en andere details. FUSE is dan een goede keuze. Het vormt een brug tussen de kernel en het file system dat je wilt maken. En dat kan in een taal naar keuze. Zo is er voor Pyfuse voor Python, de taal waar bijvoorbeeld Mijn Antagonist in geschreven is.

Interessante FUSE-projecten

Het leuke van FUSE is dat je met de fundamentele bouwstenen van een besturingssysteem bezig kan zijn, zonder dat jij je gelijk met het compileren van kernel modules moet bezighouden. Je bent niet overgeleverd aan je eigen memory management en andere belangrijke details waar je tegenaan loopt als je low level C code schrijft. FUSE heeft in elk geval veel nuttige toepassingen, hieronder een kleine greep uit een aantal interessante file systems!

Absurde file systems

Juist omdat FUSE ontwikkelaars in staat stelt laagdrempelig een file system te implementeren, kun je op het internet allerlei creatieve implementaties vinden. Eén van deze hersenspinsels is bijvoorbeeld PingFS. Iemand had het dus in zijn hoofd gehaald om data in ICMP-pakketjes op te slaan…

Het idee van PingFS is dat de data opgeslagen worden in de ping-pakketjes die over het internet worden verstuurd. Er moeten dus telkens pakketjes worden verzonden om de data vast te blijven houden. Je data wordt dus werkelijk op de kabel opgeslagen. Of, zoals de auteur zegt, “The Internet”.

Uiteraard is dit bestandssysteem niet erg praktisch, omdat er maar een kleine hoeveelheid kan worden opgeslagen. Daar bovenop is de retentie van die data ook nog eens heel kort. Dit maakt dat het file system vluchtig en onhandig in gebruik. Nu had de auteur van PingFS vast ook niet praktisch nut in gedachten toen hij dit verzinsel maakte… 😉

DumpsterFS: je eigen file system met FUSE?

En daar ontstond DumpsterFS…

Bij het zien van deze absurde creaties ging ik nadenken wat ikzelf met FUSE zou kunnen doen. Ik stelde vast dat mijn bestandssysteem in ieder geval aan de volgende eisen moest voldoen.

  • Portable | Het bestandssysteem moet zo zijn opgezet, zodat het aan elk soort opslag kan worden gekoppeld.
  • FUSE compatible | Alle basis bestand-operaties moeten mogelijk zijn, bijvoorbeeld lezen, schrijven, kopiëren en plakken.
  • Persistentie | Het moet zo dicht mogelijk in de buurt komen van POSIX compliance, een standaard voor Linux-systemen.
  • Performance | Bestanden van 100 MB moeten binnen enkele seconden te lezen of te schrijven zijn.

En daar ging ik… Voor ik het wist, was ik met Pyfuse in de weer. Na flink wat nachtelijk programmeerwerk had ik een proof of concept van mijn eigen portable file system. Het resultaat bewonder je op mijn GitHub. Daar vind je ook instructies voor installatie en hoe je het moet gebruiken. Uiteraard op eigen risico en zonder fabrieksgarantie. Het is een hobbyproject, sla er dus geen belangrijke data in op. Het heet niet voor niets DumpsterFS.

Bestanden beheren met SSHFS

Uiteraard zijn er ook meer nuttige bestandssystemen. Zoals je wellicht weet, kun jij je hostingpakket via SSH benaderen. Dat is dus één van de manieren waarop je bestandsoverdracht tussen systemen kunt faciliteren. Hoe handig zou het zijn als je de inhoud van je website als een bestandssysteem op je laptop kunt gebruiken?

Website-bestanden beheren met SSHFS.

Met SSHFS kan dat. Je kunt dan je website-bestanden gewoon benaderen als een map op je computer. Gebruik je Linux of macOS, dan is dat vrij eenvoudig in te stellen. Voor Windows is dit helaas een stuk complexer en zal ik hier niet verder toelichten. Daarvoor zou je eens naar dit GitHub-project kunnen kijken.

Tick, tick… BOOM!
Wees zorgvuldig. Staat je website in een map op je PC, dan is een misklik snel gemaakt. Perfect om je website snel te verhuizen, niet bedoeld om je privécollectie aan foto’s en films naar je hostingpakket te uploaden… 😉

SSHFS met Linux en macOS

Ben je een Linux-gebruiker (Ubuntu), dan is SSHFS met apt-get install sshfs snel geïnstalleerd. Als je macOS gebruikt, dan installeer je het met brew install sshfs. Is de installatie gelukt, dan neem je SSHFS in gebruik met dit commando.

sshfs -o reconnect <username>@<voorbeeld.nl:/home/<username> <mountpoint>

Hierbij is username de gebruikersnaam van je hostingpakket, beginnend met ‘deb’ (bijvoorbeeld deb12345). Je vindt deze gebruikersnaam onder andere bij je gegevens van het hostingpakktet in Mijn Antagonist. Het mountpoint mag een willekeurige map op het bestandssysteem zijn (bijvoorbeeld /website). Vervang ten slotte voorbeeld.nl met je eigen domeinnaam.

Tot slot

Hopelijk heb je wat aan het artikel gehad! Ken je zelf nog een creatief of juist nuttig file system, laat het dan gerust in de reacties weten. Meer lezen over bestandssystemen? Check dan ons artikel over technische uitdagingen in ZFS on Linux. Bekijk ten slotte eens onze pakketten als je nog webhosting zoekt!

Bekijk hostingpakketten →

P.S. Op de hoogte blijven van alle artikelen, updates, tips en trucs die op ons blog verschijnen? Volg ons via Facebook, Twitter, Instagram, RSS en e-mail!

Deel Deel Deel Deel

2 reacties op “De zin en onzin van file systems met FUSE

  1. Dank, heel fijn te weten, scheelt een hoop gedoe met scp.

    Ik heb wel moeten zoeken hoe ik sshfs kon laten weten dat ie de antagonist-ssh key file moet gebruiken, ben uiteindelijk uitgekomen op:

    sshfs -o ssh_command=’ssh -i /home/nnc/.ssh/antagonist-ssh’ debxxx@mijn_domein.xx:/home/debxxx/domains /data/nnc/serv -o reconnect

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *