Știu că unele sisteme de fișiere se prezintă prin Fuse și mă întrebam despre avantajele și dezavantajele acestei abordări.
Răspuns
Nu „sunt pozitiv dacă vrei să spui sisteme de fișiere reale pe disc sau orice sistem de fișiere. Nu am văzut niciodată un sistem de fișiere normal folosind FUSE, deși presupun că” Este posibil; principalul beneficiu al FUSE este că vă permite să prezentați ceva aplicațiilor (sau utilizatorului) care arată ca un sistem de fișiere, dar chiar apelează funcții din aplicația dvs. atunci când utilizatorul încearcă să facă lucruri precum listarea fișierelor dintr-un director sau creați un fișier nou. Plan9 este bine cunoscut pentru că încearcă să facă totul accesibil prin sistemul de fișiere și pseudo /proc
-filesystem vine de la ei; FUSE este o modalitate prin care aplicațiile pot urma cu ușurință acel tipar
De exemplu, aici „o captură de ecran a unui sistem de fișiere FUSE (foarte fără caracteristici) care oferă acces la datele site-ului SE:
Desigur, niciunul dintre aceste fișiere nu există; când ls
a cerut lista de fișiere din directorul FUSE a apelat o funcție din programul meu care a făcut o cerere API către acest site pentru a încărca informații despre utilizatorul 73 (eu); cat
încercând să citească din display_name
și website_url
a apelat mai multe funcții care au returnat datele din cache memorie, fără să existe nimic de fapt pe disc
Comentarii
- Există implementări FUSE ale FAT , NTFS , iso9660 , ext2 și mai multe .
- Veți găsi sisteme de fișiere pentru aplicații grele implementate în siguranță: LessFS, GlusterFS, MooseFS . Google ' GFS (nu POSIX) rulează și în spațiul utilizatorilor.
- Unde ai găsit aplicația respectivă?!?!
- @George L-am scris când mă încurcam cu SO API. Nu ' nu folosește niciun traseu cu excepția / users, așa că ' rețineți practic toate caracteristicile implementate în acea captură de ecran; a fost doar pentru a vedea cât de greu ar fi
- @George l-am pus pe github
Răspuns
Sistemele de fișiere Unix sunt implementate în mod tradițional în kernel. FUSE permite implementarea sistemelor de fișiere de către un program de utilizator.
Sistemele de fișiere din kernel sunt mai potrivite pentru sistemele de fișiere principale pentru programe și date:
- Acestea pot fi utilizate pe suporturi de încărcare (programul care implementează un sistem de fișiere FUSE trebuie încărcat de undeva).
- „Sunt mai robuste, în sensul că nu au câștigat” dispare din cauza unui proces care se prăbușește sau a fost ucis din greșeală.
- Acestea sunt oarecum mai rapide.
Sistemele de fișiere FUSE au și alte avantaje, în special în jurul flexibilității lor:
- Acestea pot fi încărcate și montate de utilizatori obișnuiți, așa că sunt „convenabile pentru sistemele de fișiere pe care utilizatorii tind să le monteze singuri: pentru accesul la rețea, pentru trecerea prin fișiere de arhivă, pentru suporturi amovibile etc. .
- Dacă un driver de sistem de fișiere FUSE se blochează, nu va panica nucleul: nu veți vedea nimic mai rău decât erorile de I / O în aplicațiile care accesau sistemul de fișiere.
- poate fi programat foarte repede; există legături FUSE pentru multe limbaje de scriptare în care un driver de sistem de fișiere FUSE util poate fi scris în câteva sute de linii de cod.
- să fie implementat foarte repede, atât pentru că nu este nevoie de intervenția administratorului pentru a le instala, cât și pentru că pot fi portate cu ușurință între sisteme de operare acceptate .
- Nu există probleme de licențiere legate de legarea statică cu un nucleu (acest lucru afectează zfs ).
Răspuns
FUSE nu este într-adevăr un sistem de fișiere în sine, ci cod care permite sistemelor de fișiere să fie implementate ca procese în loc de module kernel.
Unul dintre cele mai utile beneficii ale FUSE este de a permite codului GPL să „se amestece” cu unul care nu este GPL. De exemplu, Gnu / Linux și ZFS http://zfs-fuse.net/ sau NTFS-3G pe multe sisteme de operare precum OpenSolaris și * BSD http://www.tuxera.com/community/ntfs-3g-download/
Principalul dezavantaj este impactul asupra performanței în comparație cu driverele native (kernel).