fuse

16
FUSE Filesystem in Userspace

Upload: anca

Post on 16-Jan-2015

819 views

Category:

Technology


4 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Fuse

FUSEFilesystem in Userspace

Page 2: Fuse

Ce este un sistem de fisiere?• modul de organizare si stocare a informatiilor pe un

suport de memorie extern in vederea accesarii si prelucrarii lor de catre sistemul de operare

• sisteme virtuale de fisiere(VFS) – interfata intre nucleu si sistemul de fisiere concret; permite aplicatiilor client sa acceseze uniform sisteme de fisiere diferite

• inainte de aparitia sistemelor de fisiere in spatiul

utilizator dezvoltarea lor era facuta de catre programatorul nucleului, fapt ce necesita cunostinte in tehnologia si programarea nucleului

Page 3: Fuse

Ce este FUSE?librarie ce permite dezvoltarea propriului sistem de

fisiere functional in Linuxinterfata simpla pentru programele din spatiul utilizator

ce permite exportul unui sistem de fisiere virtual pe un nucleu Linux

util in scrierea sistemelor virtuale de fisiere; acestea nu salveaza datele propriu-zis ci sunt o traducere pentru un sistem de fisiere existent

detine recordul pentru stabilitate a aplicatiilor dezvoltatesuporta kernel 2.4.x si 2.6.xsuporta Java(FUSE-J) – nu doar C/C++

Page 4: Fuse

Ce ofera FUSE?API(Application programming interface) simplu

ce poate fi accesat si de utilizatorii neprivilegiatiimplementare siguranu necesita cunostinte de programare a

nucleuluidebug simplu – foloseste fisiere executabile modalitate simpla pentru useri neprivilegiati de

a crea si incarca propriile implementari a unor sisteme de fisiere

Page 5: Fuse

Cum functioneaza?

Componente:1. Libraria fuse2. Modul nucleu

Page 6: Fuse

1. Libraria Fuse

Page 7: Fuse

2. Modul kernelAre 2 componente:1. proc filesystem raspunde cererilor I/O pentru fisierul /dev/fuse functii: fuse_dev_read() – returneaza comenzi din lista de cereri fuse_dev_write() - pune datele trimise in structura req->out, de unde pot fi

returnate prin lista de cereri

2. apelurile sistem – apeleaza urmatoarele functii: request_send() – adauga cererea in lista de cereri si asteapta raspunsul request_send_nonblock() – comportament neblocant request_send_noreply() - nu asteapta raspuns

Page 8: Fuse

Cerinte si instalareo Linux kernel, versiunea 2.6.x, x>=9o Instalaredescarcati codul sursa FUSEdezarhivati pachetul tar –zxvf fuse2.8.1.tar.gz -veti obtine un director FUSE ce va contine:• ./doc – documentatia FUSE(install, faq etc)• ./kernel – codul sursa al modului nucleu• ./include – headerele necesare(fuse.h)• ./lib – codul sursa pentru crearea librariei FUSE• ./util – codul sursa pentru utilitatile librariei• ./example – exemple de utilizare./configure;make;make install;

Page 9: Fuse

Crearea primului sistem de fisiereEtape:1.Editati exemplul fusexmp.c conform configurarilor dorite2.Compilati fusexmp.c

3.Executati example/fusexmp /mnt/fuse –d4.Ls –al /mnt/fuse5.(Enjoy :d)

Page 10: Fuse

Intrebari?

Page 11: Fuse

Detalii implementare includem headerele necesare#include <fuse.h> // si cele obisnuite

#include<fuse_lowlevel.h>//pentru a folosi functii low level

definim functiile cu care va opera sistemul nostru de fisiere

completam structura de tip fuse_operations cu asocierile corespunzatoare functiilor definite anterior

in functia main apelam fuse_main(vezi functionarea librariei fuse)

Page 12: Fuse

Structura fuse_operations• struct fuse_operations {

int (*getattr) (const char *, struct stat *); //similar comenzii stat

int (*readlink) (const char *, char *, size_t); //citeste linkurile simbolice

int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t); //citeste continutul unui director

int (*mknod) (const char *, mode_t, dev_t); //creaza un nou nod in ierarhia de fisiere

int (*mkdir) (const char *, mode_t); //creaza director

int (*rmdir) (const char *); //sterge director

int (*link) (const char *, const char *); //creaza hard link

int (*unlink) (const char *); //sterge un fisier

int (*symlink) (const char *, const char *); //creaza link simbolic

int (*rename) (const char *, const char *); //redenumeste un fisier

int (*chmod) (const char *, mode_t); //schimba bitii pentru permisiuni

int (*chown) (const char *, uid_t, gid_t); //schimba proprietarul si grupul fisierului

int (*truncate) (const char *, off_t); //modifica marimea fisierului

int (*utime) (const char *, struct utimbuf *); //modifica numarul de accesari/modificari ale fisierului

int (*open) (const char *, struct fuse_file_info *); //deschide un fisier

int (*read) (const char *, char *, size_t, off_t, struct fuse_file_info *); //citeste date dintr-un fisier deschis

int (*write) (const char *, const char *, size_t, off_t,struct fuse_file_info *); //scrie date intr-un fisier deschis

int (*statfs) (const char *, struct statfs *); //returneaza statistici ale sistemului de fisiere

int (*flush) (const char *, struct fuse_file_info *);

int (*release) (const char *, struct fuse_file_info *); //apelata cand nu mai exista referinte la un fisier deschis

int (*fsync) (const char *, int, struct fuse_file_info *); //sincronizeaza/actualizeaza continuturile unui fisier

int (*setxattr) (const char *, const char *, const char *, size_t, int); //seteaza atribute speciale

int (*getxattr) (const char *, const char *, char *, size_t); //returneaza atribute speciale

int (*listxattr) (const char *, char *, size_t); //listeaza atribute speciale

int (*removexattr) (const char *, const char *); //sterge atribute speciale

};

Page 13: Fuse

Structura fuse_operations• Functiile enumerate nu sunt obligatorii dar multe din ele

sunt necesare pentru functionarea corecta a sistemului de fisiere

• Din motive tehnice urmatoarele explicatii vor fi facute pe baza exemplelor din documentatia librariei

Page 14: Fuse

Aplicatii• ExpanDrive: sistem de fisiere comercial ce implementeaza

SFTP/FTP/FTPS folosind FUSE• sistemul de fisiere Lustre cluster al Sun Mycrosystem va folosi

FUSE pentru a-I permite sa ruleze in spatiul utilizatorului, pentru a putea folosi FreeBSD

• Sector File System(sistem distribuit de fisiere dezvoltat pentru un numar mare de commodity computers): utilizeaza FUSE pentru a oferi o interfata montabila a unui sistem de fisiere locale

Page 15: Fuse

Stiati ca…• La momentul denumirii librariei exista un emulator

Speccy(8-bit personal home computer) cu acelasi nume - Fuse (the Free Unix Spectrum Emulator)

• Autorul librariei il cunostea pe autorul emulatorului si chiar crease si el un emulator asemanator

• Numele se voia a fi un acronim ingenios pentru “Filesystem in USErspace” dar s-a dovedit a fi o alegere nefericita

• De atunci autorul si-a promis sa nu mai denumeasca niciun proiect dupa un termen comun

Page 16: Fuse

Bibliografie• http://ebooks.unibuc.ro/informatica/Seiso/4.1_files/text.htm• http://www.ibm.com/developerworks/linux/library/l-fuse/• http://en.wikipedia.org/wiki/Filesystem_in_Userspace• Documentatia oficiala FUSE