0
FUSE Filesystem in Userspace
Ce este un sistem de fisiere? <ul><li>modul de organizare si stocare a informatiilor pe un suport de memorie extern in ved...
Ce este FUSE? <ul><li>librarie ce permite dezvoltarea propriului sistem de fisiere functional in Linux </li></ul><ul><li>i...
Ce ofera FUSE? <ul><li>API(Application   programming interface) simplu  ce poate fi accesat si de utilizatorii neprivilegi...
Cum functioneaza? <ul><li>Componente: </li></ul><ul><li>1. Libraria fuse </li></ul><ul><li>2. Modul nucleu </li></ul>
1. Libraria Fuse
2. Modul kernel <ul><li>Are 2 componente: </li></ul><ul><li>1. proc filesystem  </li></ul><ul><li>raspunde cererilor I/O p...
Cerinte si instalare <ul><li>Linux kernel, versiunea 2.6.x, x>=9 </li></ul><ul><li>Instalare </li></ul><ul><li>descarcati ...
Crearea primului sistem de fisiere <ul><li>Etape: </li></ul><ul><li>Editati exemplul fusexmp.c conform configurarilor dori...
Intrebari?
Detalii implementare <ul><li>includem headerele necesare </li></ul><ul><li>#include <fuse.h>  // si cele obisnuite </li></...
Structura fuse_operations <ul><li>struct fuse_operations {  </li></ul><ul><li>int (* getattr ) (const char *, struct stat ...
Structura fuse_operations <ul><li>Functiile enumerate nu sunt obligatorii dar multe din ele sunt necesare pentru functiona...
Aplicatii <ul><li>ExpanDrive : sistem de fisiere comercial ce implementeaza SFTP/FTP/FTPS folosind FUSE </li></ul><ul><li>...
Stiati ca… <ul><li>La momentul denumirii librariei exista un emulator Speccy(8-bit personal home computer) cu acelasi nume...
Bibliografie <ul><li>http://ebooks.unibuc.ro/informatica/Seiso/4.1_files/text.htm </li></ul><ul><li>http://www.ibm.com/dev...
Upcoming SlideShare
Loading in...5
×

Fuse

864

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
864
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
22
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Fuse"

  1. 1. FUSE Filesystem in Userspace
  2. 2. Ce este un sistem de fisiere? <ul><li>modul de organizare si stocare a informatiilor pe un suport de memorie extern in vederea accesarii si prelucrarii lor de catre sistemul de operare </li></ul><ul><li>sisteme virtuale de fisiere(VFS) – interfata intre nucleu si sistemul de fisiere concret; permite aplicatiilor client sa acceseze uniform sisteme de fisiere diferite </li></ul><ul><li>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 </li></ul>
  3. 3. Ce este FUSE? <ul><li>librarie ce permite dezvoltarea propriului sistem de fisiere functional in Linux </li></ul><ul><li>interfata simpla pentru programele din spatiul utilizator ce permite exportul unui sistem de fisiere virtual pe un nucleu Linux </li></ul><ul><li>util in scrierea sistemelor virtuale de fisiere; acestea nu salveaza datele propriu-zis ci sunt o traducere pentru un sistem de fisiere existent </li></ul><ul><li>detine recordul pentru stabilitate a aplicatiilor dezvoltate </li></ul><ul><li>suporta kernel 2.4.x si 2.6.x </li></ul><ul><li>suporta Java(FUSE-J) – nu doar C/C++ </li></ul>
  4. 4. Ce ofera FUSE? <ul><li>API(Application programming interface) simplu ce poate fi accesat si de utilizatorii neprivilegiati </li></ul><ul><li>implementare sigura </li></ul><ul><li>nu necesita cunostinte de programare a nucleului </li></ul><ul><li>debug simplu – foloseste fisiere executabile </li></ul><ul><li>modalitate simpla pentru useri neprivilegiati de a crea si incarca propriile implementari a unor sisteme de fisiere </li></ul>
  5. 5. Cum functioneaza? <ul><li>Componente: </li></ul><ul><li>1. Libraria fuse </li></ul><ul><li>2. Modul nucleu </li></ul>
  6. 6. 1. Libraria Fuse
  7. 7. 2. Modul kernel <ul><li>Are 2 componente: </li></ul><ul><li>1. proc filesystem </li></ul><ul><li>raspunde cererilor I/O pentru fisierul /dev/fuse </li></ul><ul><li>functii: </li></ul><ul><li>fuse_dev_read() – returneaza comenzi din lista de cereri </li></ul><ul><li>fuse_dev_write() - pune datele trimise in structura req->out, de unde pot fi returnate prin lista de cereri </li></ul><ul><li>2. apelurile sistem – apeleaza urmatoarele functii: </li></ul><ul><li>request_send() – adauga cererea in lista de cereri si asteapta raspunsul </li></ul><ul><li>request_send_nonblock() – comportament neblocant </li></ul><ul><li>request_send_noreply() - nu asteapta raspuns </li></ul>
  8. 8. Cerinte si instalare <ul><li>Linux kernel, versiunea 2.6.x, x>=9 </li></ul><ul><li>Instalare </li></ul><ul><li>descarcati codul sursa FUSE </li></ul><ul><li>dezarhivati pachetul tar –zxvf fuse2.8.1.tar.gz </li></ul><ul><li>-veti obtine un director FUSE ce va contine: </li></ul><ul><li>./doc – documentatia FUSE(install, faq etc) </li></ul><ul><li>./kernel – codul sursa al modului nucleu </li></ul><ul><li>./include – headerele necesare(fuse.h) </li></ul><ul><li>./lib – codul sursa pentru crearea librariei FUSE </li></ul><ul><li>./util – codul sursa pentru utilitatile librariei </li></ul><ul><li>./example – exemple de utilizare </li></ul><ul><li>./configure;make;make install; </li></ul>
  9. 9. Crearea primului sistem de fisiere <ul><li>Etape: </li></ul><ul><li>Editati exemplul fusexmp.c conform configurarilor dorite </li></ul><ul><li>Compilati fusexmp.c </li></ul><ul><li>Executati example/fusexmp /mnt/fuse –d </li></ul><ul><li>Ls –al /mnt/fuse </li></ul><ul><li>(Enjoy :d) </li></ul>
  10. 10. Intrebari?
  11. 11. Detalii implementare <ul><li>includem headerele necesare </li></ul><ul><li>#include <fuse.h> // si cele obisnuite </li></ul><ul><li>#include<fuse_lowlevel.h> //pentru a folosi functii low level </li></ul><ul><li>definim functiile cu care va opera sistemul nostru de fisiere </li></ul><ul><li>completam structura de tip fuse_operations cu asocierile corespunzatoare functiilor definite anterior </li></ul><ul><li>in functia main apelam fuse_main (vezi functionarea librariei fuse) </li></ul>
  12. 12. Structura fuse_operations <ul><li>struct fuse_operations { </li></ul><ul><li>int (* getattr ) (const char *, struct stat *); //similar comenzii stat </li></ul><ul><li>int (* readlink ) (const char *, char *, size_t); //citeste linkurile simbolice </li></ul><ul><li>int (* getdir ) (const char *, fuse_dirh_t, fuse_dirfil_t); //citeste continutul unui director </li></ul><ul><li>int (* mknod ) (const char *, mode_t, dev_t); //creaza un nou nod in ierarhia de fisiere </li></ul><ul><li>int (* mkdir ) (const char *, mode_t); //creaza director </li></ul><ul><li>int (* rmdir ) (const char *); //sterge director </li></ul><ul><li>int (* link ) (const char *, const char *); //creaza hard link </li></ul><ul><li>int (* unlink ) (const char *); //sterge un fisier </li></ul><ul><li>int (* symlink ) (const char *, const char *); //creaza link simbolic </li></ul><ul><li>int (* rename ) (const char *, const char *); //redenumeste un fisier </li></ul><ul><li>int (* chmod ) (const char *, mode_t); //schimba bitii pentru permisiuni </li></ul><ul><li>int (* chown ) (const char *, uid_t, gid_t); //schimba proprietarul si grupul fisierului </li></ul><ul><li>int (* truncate ) (const char *, off_t); //modifica marimea fisierului </li></ul><ul><li>int (* utime ) (const char *, struct utimbuf *); //modifica numarul de accesari/modificari ale fisierului </li></ul><ul><li>int (* open ) (const char *, struct fuse_file_info *); //deschide un fisier </li></ul><ul><li>int (* read ) (const char *, char *, size_t, off_t, struct fuse_file_info *); //citeste date dintr-un fisier deschis </li></ul><ul><li>int (* write ) (const char *, const char *, size_t, off_t,struct fuse_file_info *); //scrie date intr-un fisier deschis </li></ul><ul><li>int (* statfs ) (const char *, struct statfs *); //returneaza statistici ale sistemului de fisiere </li></ul><ul><li>int (* flush ) (const char *, struct fuse_file_info *); </li></ul><ul><li>int (* release ) (const char *, struct fuse_file_info *); //apelata cand nu mai exista referinte la un fisier deschis </li></ul><ul><li>int (* fsync ) (const char *, int, struct fuse_file_info *); //sincronizeaza/actualizeaza continuturile unui fisier </li></ul><ul><li>int (* setxattr ) (const char *, const char *, const char *, size_t, int); //seteaza atribute speciale </li></ul><ul><li>int (* getxattr ) (const char *, const char *, char *, size_t); //returneaza atribute speciale </li></ul><ul><li>int (* listxattr ) (const char *, char *, size_t); //listeaza atribute speciale </li></ul><ul><li>int (* removexattr ) (const char *, const char *); //sterge atribute speciale </li></ul><ul><li>}; </li></ul>
  13. 13. Structura fuse_operations <ul><li>Functiile enumerate nu sunt obligatorii dar multe din ele sunt necesare pentru functionarea corecta a sistemului de fisiere </li></ul><ul><li>Din motive tehnice urmatoarele explicatii vor fi facute pe baza exemplelor din documentatia librariei  </li></ul>
  14. 14. Aplicatii <ul><li>ExpanDrive : sistem de fisiere comercial ce implementeaza SFTP/FTP/FTPS folosind FUSE </li></ul><ul><li>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 </li></ul><ul><li>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 </li></ul>
  15. 15. Stiati ca… <ul><li>La momentul denumirii librariei exista un emulator Speccy(8-bit personal home computer) cu acelasi nume - Fuse (the Free Unix Spectrum Emulator) </li></ul><ul><li>Autorul librariei il cunostea pe autorul emulatorului si chiar crease si el un emulator asemanator </li></ul><ul><li>Numele se voia a fi un acronim ingenios pentru “ F ilesystem in USE rspace” dar s-a dovedit a fi o alegere nefericita </li></ul><ul><li>De atunci autorul si-a promis sa nu mai denumeasca niciun proiect dupa un termen comun </li></ul>
  16. 16. Bibliografie <ul><li>http://ebooks.unibuc.ro/informatica/Seiso/4.1_files/text.htm </li></ul><ul><li>http://www.ibm.com/developerworks/linux/library/l-fuse/ </li></ul><ul><li>http://en.wikipedia.org/wiki/Filesystem_in_Userspace </li></ul><ul><li>Documentatia oficiala FUSE </li></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×