33
Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael Burian Bernhard Guillon Stefan Huber Institut für Computerwissenschaften Universität Salzburg Wissenschaftliche Arbeitstechniken und Präsentation Michael Burian, Bernhard Guillon und Stefan Huber

FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Embed Size (px)

Citation preview

Page 1: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

FUSEFilesystem in Userspace

Michael Burian Bernhard Guillon Stefan Huber

Institut für ComputerwissenschaftenUniversität Salzburg

Wissenschaftliche Arbeitstechniken und Präsentation

Michael Burian, Bernhard Guillon und Stefan Huber

Page 2: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

Gliederung

1 Was ist FUSE?AllgemeinWh. Betriebssysteme und FUSE-AnsatzMotivation

2 ImplementierungconcatfsSource Code

3 AnwendungenÜberblickBeispiele

ntfs-3g, sshfs, gmailfs, clamfsKurioses

Michael Burian, Bernhard Guillon und Stefan Huber

Page 3: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

AllgemeinWh. Betriebssysteme und FUSE-AnsatzMotivation

Gliederung

1 Was ist FUSE?AllgemeinWh. Betriebssysteme und FUSE-AnsatzMotivation

2 ImplementierungconcatfsSource Code

3 AnwendungenÜberblickBeispiele

ntfs-3g, sshfs, gmailfs, clamfsKurioses

Michael Burian, Bernhard Guillon und Stefan Huber

Page 4: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

AllgemeinWh. Betriebssysteme und FUSE-AnsatzMotivation

FUSE stellt sich vor

FUSE ist ein Userspace Dateisystem FrameworkFUSE besteht aus

Kernel Modul (fuse.ko)Userspace Library (libfuse.*)Userspace mount (fusermount)

FUSE öffnet neue Möglichkeiten für Dateisysteme

Michael Burian, Bernhard Guillon und Stefan Huber

Page 5: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

AllgemeinWh. Betriebssysteme und FUSE-AnsatzMotivation

Monolithischer- vs. Micro-Kernel

VFS

IPC, File System

Scheduler, Virtual Memory

Device Drivers, Dispatcher, ... Basic IPC, Virtual Memory, Scheduling

UNIXServer

DeviceDriver

FileServer

ApplicationIPC

System CallApplication

Hardware Hardware

usermode

kernelmode

Monolithic Kernel Microkernel

Michael Burian, Bernhard Guillon und Stefan Huber

Page 6: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

AllgemeinWh. Betriebssysteme und FUSE-AnsatzMotivation

Kernelmode Dateisystem Treiber

glibc

FUSE

Ext3

...

VFS

ls -l /etc/fstab

Kernel

Userspace

NFS

Michael Burian, Bernhard Guillon und Stefan Huber

Page 7: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

AllgemeinWh. Betriebssysteme und FUSE-AnsatzMotivation

FUSE Dateisystem Treiber

libfuse

glibcglibc

FUSE

Ext3

...

VFS

ls -l /tmp/fuse

./hello /tmp/fuse

Kernel

Userspace

NFS

Michael Burian, Bernhard Guillon und Stefan Huber

Page 8: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

AllgemeinWh. Betriebssysteme und FUSE-AnsatzMotivation

Vorteile

portabel (Linux, FreeBSD, OpenSolaris, . . . )viele Sprachbindungen (z.B. Java, C#, Haskell, . . . )closed source Treiber möglicheinfache FehlersucheKernelstabilität wird nicht beeinträchtigtexperimentelle Treiber

Michael Burian, Bernhard Guillon und Stefan Huber

Page 9: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

AllgemeinWh. Betriebssysteme und FUSE-AnsatzMotivation

Nachteile

langsamer durch viele Kontextwechsel

Michael Burian, Bernhard Guillon und Stefan Huber

Page 10: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

concatfsSource Code

Gliederung

1 Was ist FUSE?AllgemeinWh. Betriebssysteme und FUSE-AnsatzMotivation

2 ImplementierungconcatfsSource Code

3 AnwendungenÜberblickBeispiele

ntfs-3g, sshfs, gmailfs, clamfsKurioses

Michael Burian, Bernhard Guillon und Stefan Huber

Page 11: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

concatfsSource Code

Grundlagen

Aufgabenstellung

Michael Burian, Bernhard Guillon und Stefan Huber

Page 12: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

concatfsSource Code

Entwicklungszyklus

Sample Session# $EDITOR concat.c# makecc -Wall -D_FILE_OFFSET_BITS=64 -I/usr/include/fuse -pthread-lfuse -lrt -ldl concat.c -o concat# mkdir mountpoint# concat clean.sh clean.sh mountpoint/# ls -l mountpoint/total 0-r--r--r-- 1 root root 96 Jan 1 1970 concat# cat mountpoint/concatlatexmk -Crm -f *.sty *.tex *.ps *.pdf *.svg

latexmk -Crm -f *.sty *.tex *.ps *.pdf *.svg

# umount mountpoint/# ls -l mountpoint/total 0

Michael Burian, Bernhard Guillon und Stefan Huber

Page 13: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

concatfsSource Code

Makefile

MakefileCFLAGS := -Wall $(shell pkg-config fuse --cflags)LDFLAGS := $(shell pkg-config fuse --libs)

targets = concat

all: $(targets)

clean:rm -f *.orm -f $(targets)

Michael Burian, Bernhard Guillon und Stefan Huber

Page 14: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

concatfsSource Code

Datenstrukturen

struct fuse_operations concat_oper = {.getattr = concat_getattr,.readdir = concat_readdir,.open = concat_open,.read = concat_read,

};

struct entry {char *name;off_t size; // the physical size in bytesoff_t start; // absolute start address of this file within the concatenated fileint fd; // file descriptor

};

// global argc,argv style list of files to concatenatestruct entry **files = 0;int filesc = 0;off_t totalsize = 0;

Michael Burian, Bernhard Guillon und Stefan Huber

Page 15: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

concatfsSource Code

Ablauf

1 Kommandozeile parsen: fuse_opt_parse2 Files verwalten: add_file3 Callbacks registrieren, FUSE starten: fuse_main

Michael Burian, Bernhard Guillon und Stefan Huber

Page 16: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Read Callback (1)

static int concat_read(const char *path, char *buf, size_t size,off_t offset, struct fuse_file_info *fi){

size_t total = 0;size_t res = 0;int i = 0;

// we are only interested in read access to our single fileif (strcmp(path, concat_path) != 0) {

res = -ENOENT;goto out;

}// attempt to read beyond end of fileif (offset >= totalsize) {

goto ok;}// if we cannot satisfy the (usually last) read due to EOF// calculate the remaining sizeif (offset + size > totalsize) {

if (totalsize < offset)goto ok;

size = totalsize - offset;}

// to be continued ...

Page 17: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Read Callback (2)

static int concat_read(const char *path, char *buf, size_t size,off_t offset, struct fuse_file_info *fi){

// ... continued, with sanity checks omitted ...for (i = 0; i < filesc; i++) {

while (offset > files[i]->size) {// skip files before our offset// TODO: linear search, O(n)offset -= files[i++]->size;

}

size_t tmp = pread(files[i]->fd, buf + total, size,offset);

size -= tmp;total += tmp;offset = 0;

}

ok:res = total;

out:return res;

}

Page 18: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

ÜberblickBeispieleKurioses

Gliederung

1 Was ist FUSE?AllgemeinWh. Betriebssysteme und FUSE-AnsatzMotivation

2 ImplementierungconcatfsSource Code

3 AnwendungenÜberblickBeispiele

ntfs-3g, sshfs, gmailfs, clamfsKurioses

Michael Burian, Bernhard Guillon und Stefan Huber

Page 19: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

ÜberblickBeispieleKurioses

Überblick

ArchiveFileSystems (tar, cpio, zip, etc.)DatabaseFileSystems (MySQL, BerkeleyDB, etc.)MediaFileSystemsNetworkFileSystemsNonNativeFileSystemsetc.

Michael Burian, Bernhard Guillon und Stefan Huber

Page 20: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

ÜberblickBeispieleKurioses

Beispiele - ntfs-3g

NTFS-TreiberBearbeiten, Löschen und Anlegen von DateienFolgendes ist nicht möglich:

auf verschlüsselte Dateien zugreifenkomprimierte Dateien schreiben (lesen funktioniert)den Dateibesitzer und die Zugriffsrechte ändern

Michael Burian, Bernhard Guillon und Stefan Huber

Page 21: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

ÜberblickBeispieleKurioses

Beispiele - ntfs-3g (cont.)

Verwendung:mount -t ntfs-3g /dev/hdX /mnt/windowsfusermount -u /media/ntfs

Mount während des Bootvorgangs über /etc/fstab:/dev/sda1 /mnt/windows ntfs-3g defaults 0 0

Michael Burian, Bernhard Guillon und Stefan Huber

Page 22: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

ÜberblickBeispieleKurioses

Beispiele - sshfs

SSH File Transfer Protocol (SFTP)Verwendung:sshfs user@host:/path/ ~/mnt

Kombination mit SSH-Authentifizierung über Public-KeysAutomount über /etc/fstab

sshfs#USERNAME@REMOTE_HOST:REMOTE_PATHMOUNT_POINT fuse SSHFS_OPTIONS 0 0

Michael Burian, Bernhard Guillon und Stefan Huber

Page 23: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

ÜberblickBeispieleKurioses

Beispiele - gmailfs

gmail-account als externer Speicherplatz (ca. 7 GB)libgmail um mit Gmail zu kommunizierenmeisten Dateioperationen möglichDateien als Attachment

Michael Burian, Bernhard Guillon und Stefan Huber

Page 24: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

ÜberblickBeispieleKurioses

Beispiele - gmailfs (cont.)

Metainformation im Betreff:Informationen zur Dateifsname-Field (filesystem name)

Probleme:Alpha-Phase, d.h. buggysehr langsamnicht von Google unterstützt

Michael Burian, Bernhard Guillon und Stefan Huber

Page 25: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

ÜberblickBeispieleKurioses

Beispiele - clamfs

transparente Anti-Virus-Überprüfung durch den clamdDaemonclamd: File-Scanning-Service entwickelt vomClamAV-Projekt

Michael Burian, Bernhard Guillon und Stefan Huber

Page 26: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

ÜberblickBeispieleKurioses

Beispiele - clamfs (cont.)

Konfiguration über XML-FileAngabe des root-Verzeichnis und mountpointweitere Optionen: readonly, public, etc.Whitelist und Blacklist

Aufruf des System-Daemon:clamfs /etc/clamfs/<some_name>.xml

Michael Burian, Bernhard Guillon und Stefan Huber

Page 27: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

ÜberblickBeispieleKurioses

Beispiele - clamfs (cont.)

im

Cache?

Start

der Queueanfugen Scan Virus ge-

funden?

Warnung

schickendem Cachehinzufugen

Ende

Ja

Nein

JaNein

Michael Burian, Bernhard Guillon und Stefan Huber

Page 28: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

ÜberblickBeispieleKurioses

Kurioses - Hyppocampus

Zitat: “All files (...) are jails. In those jails, informations areimprisoned between formatting rules and useless data"(Roberto -MadBob- Guido)Experimentelles relationales FilesystemAbbildung der hierarchischen Organisation in einerelationale StrukturImplementiert mit FUSE und libdbi

Michael Burian, Bernhard Guillon und Stefan Huber

Page 29: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

ÜberblickBeispieleKurioses

Kurioses - Hyppocampus

Metainformationjede Datei besitzt eine IDAbfrage der Metainformation SQL-Queries

Michael Burian, Bernhard Guillon und Stefan Huber

Page 30: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Was ist FUSE?Implementierung

Anwendungen

ÜberblickBeispieleKurioses

Kurioses - Hyppocampus (cont.)

Beispiel von der Webpage:

madtablet:/# hattr -l "SELECT META_NAME WHERE META_ID= 2"pippo1 = pippo3 = 33152...9 = 0

10 = 611 = text/plainmadtablet:/# ls "/mnt/hyppo/SELECT 10 WHERE 1= ’pippo’"6

Michael Burian, Bernhard Guillon und Stefan Huber

Page 31: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Anhang Quellen

Quellen I

[1] Mikrokernel http://en.wikipedia.org/wiki/Microkernel[2] FUSE Sourceforge http://fuse.sourceforge.net/[3] Linux Kernel Source http://kernel.org/[4] Wikipedia FUSE

http://de.wikipedia.org/wiki/Filesystem_in_Userspace[5] NTFS-3g http://www.ntfs-3g.org/[6] SSH Filesystem http://fuse.sourceforge.net/sshfs.html[7] Jones R.: Gmail Filesystem

http://richard.jones.name/google-hacks/gmail-filesystem/gmail-filesystem.html

[8] Burghardt K.: ClamFS http://clamfs.sourceforge.net/

Michael Burian, Bernhard Guillon und Stefan Huber

Page 32: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Anhang Quellen

Quellen II

[9] Guido R.: Hyppocampushttp://lobotomy.sourceforge.net/Hyppocampus.php

[10] Grafik Fuse Structure adaptiert von Svenhttp://upload.wikimedia.org/wikipedia/commons/thumb/0/08/FUSE_structure.svg/320px-FUSE_structure.svg.png(GNU Free Documentation License)

[11] Grafik OS Structure adaptiert vonhttp://upload.wikimedia.org/wikipedia/commons/6/67/OS-structure.svg(Public Domain)

Michael Burian, Bernhard Guillon und Stefan Huber

Page 33: FUSE - Filesystem in Userspace - cosy.sbg.ac.atheld/teaching/wiss_arbeiten/slides_08-09/FUSE.pdf · Was ist FUSE? Implementierung Anwendungen FUSE Filesystem in Userspace Michael

Anhang Quellen

Quellen III

Andrew S. TanenbaumModern Operating Systems, 2/E .Addison-Wesley, 2001.

Michael Burian, Bernhard Guillon und Stefan Huber