FUSE, SSHFS és társaik - bármit láthatunk lokális fájlként!

Hasonló dokumentumok
Linux alapok gyakorlat

Operációs rendszerek. UNIX/Linux fájlrendszerek

UNIX: fájlrendszerek

OPERÁCIÓS RENDSZEREK I. BEVEZETÉS Koczka Ferenc -

UNIX fájlrendszerek alapismeretei

Operációs rendszerek. UNIX fájlrendszer

Virtualizációs Technológiák Operációs rendszer szintű virtualizáció Konténerek Forrás, BME-VIK Virtualizációs technológiák

Virtualizációs technológiák Linux alatt (teljesítményteszt)

1_Linux_bevezeto_bash

Operációs rendszerek gyakorlat

Operációs rendszerek gyakorlat

1.2. NFS kliens telepítése és beállítása

Operációs Rendszerek II. labor alkalom

Operációs rendszerek 1.

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Nyíregyházi Egyetem Matematika és Informatika Intézete. Fájl rendszer

Socket programozás Példák

Operációs rendszerek gyakorlat

Operációs Rendszerek II. Első verzió: 2009/2010. I. szemeszter Ez a verzió: 2009/2010. II. szemeszter

Az internet ökoszisztémája és evolúciója. Gyakorlat 1

Hálózatok építése és üzemeltetése

A L I N U X f e l é p í t é s e

Az internet ökoszisztémája és evolúciója. Gyakorlat 1

Synology NAS integrálása inels IMM szerverhez

Fájlrendszerek. A Windows operációs rendszerek fájlrendszere

Számítógépes munkakörnyezet II. Szoftver

Operációs rendszerek. 2. gyakorlat. Munka állományokkal UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

UNIX: folyamatok kommunikációja

Linux alapok. Parancsok általános alakja parancs kapcsolók paraméterek

A Linux operációs rendszer 2017.

Operációs rendszerek gyak.

Operációs rendszerek gyakorlat

Ismerkedjünk meg a Linuxszal!

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Hálózatkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Hálózatkezelés / 20

UNIX fájlrendszerek alapismeretei

Alternatív processz állapot és statisztika lekérdezési módszer a Linux kernelben

Linux alapok és használatuk

Informatikai Rendszerek Intézete Gábor Dénes Foiskola. Operációs rendszerek oldal LINUX

Dr. Schuster György október 30.

Opensuse automatikus telepítése

Operációs rendszerek I. IIII. gyakorlat

Operációs rendszerek. Az NT folyamatok kezelése

Operációs rendszerek. 1. gyakorlat. Bevezetés, követelmények UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Debian mint Desktop Operációs rendszer

NIS + NFS+Automount. Összeállította: Sallai András

Legfontosabb tulajdonságai. UNIX rendszer felhasználói és fejlesztői felülete (1-4. ea.) Unix hagymahéj struktúrája. Legfontosabb tulajdonságai

Egy egyszerű, gyors és szabad újratelepítő eszköz: upi

Fájl rendszer. Fájl koncepció Elérési módok Könyvtár szerkezet Védelem Konzisztencia szemantika

4. Laborgyakorlat. A fájlokról ezeket az adatokat, a fájlrendszer tárolja. Számunkra az 1, 3, 4. oszlopok lesznek az érdekesek.

Hálózati rendszerek adminisztrációja JunOS OS alapokon

EgroupWare: A csoportmunka megoldás

S z á m í t ó g é p e s a l a p i s m e r e t e k

A L i n u x r u h á j a

Veeam Agent for Windows and Linux

Programozás alapjai óra. Morvai Flórián, 2010 Dr. Dévényi Károly előadásvázlata alapján

eszemélyi Kliens Szoftvercsomag

Konkurens TCP Szerver

LINUX LDAP címtár. Mi a címtár?

Hálózati architektúrák laborgyakorlat

eszemélyi Kliens Szoftvercsomag

ERserver. iseries. Az iseries Access for Windows használatának megkezdése

Operációs rendszerek. 6. gyakorlat: Processzusok közti kommunikáció (osztott memória, üzenetsor)

HÁLÓZATI HASZNÁLATI ÚTMUTATÓ

Unix-Linux alapok I. gyakorlatvezető: Lutár Patrícia

Szerver-üzemeltetés - Tudásközpont, Pécs

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

Tájékoztató. Használható segédeszköz: -

Az operációs rendszer. Az operációs rendszer feladatai, részei, fajtái Az operációs rendszer beállítása

OPERÁCIÓS RENDSZEREK II GYAKORLAT

Szilipet programok telepítése Hálózatos (kliens/szerver) telepítés Windows 7 operációs rendszer alatt

iseries Client Access Express - Mielőtt elkezdi

chmod umask chown, chgrp

Windows XP. és Ubuntu. mi a különbség? Mátó Péter <mato.peter@fsf.hu> Windows XP vs Ubuntu Mátó Péter <mato.peter@fsf.

ELTE, IK, Információs Rendszerek Tanszék

Nyíregyházi Egyetem Matematika és Informatika Intézete. Fájl rendszer

KnowledgeTree dokumentumkezelő rendszer

Könyvtári címkéző munkahely

Utolsó módosítás:

Dr. Varga Imre Debreceni Egyetem, Informatikai Kar. Socket-programozás. C nyelven, Linux alatt

A számítástechnika gyakorlata WIN 2000 I. Szerver, ügyfél Protokoll NT domain, Peer to Peer Internet o WWW oftp opop3, SMTP. Webmail (levelező)

Szalai Ferenc

UNIX bevezető. kiegészítő fóliák az előadáshoz. Mészáros Tamás

Unix fájl-hierarchia

Linux fájlrendszerek. Papp Zsolt. Rendszermérnök, Novell PSH.

1. Használatba vétel. 1.1 Biztonsági előírások. 1.2 Rendszerkövetelmények. 1.3 A csomag tartalma

Hálózati architektúrák és Protokollok GI Kocsis Gergely

Operációs rendszerek. 2. gyakorlat. Munka állományokkal UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Linux parancsok összefoglaló.

18. témakör. Jogosultságok (Windows és Linux jogosultságok összehasonlítása, helyi és megosztási jogosultságok)

Hálózati adminisztráció Linux (Ubuntu 8.04) 7. gyakorlat

Programozás II. 2. Dr. Iványi Péter

A GeoEasy telepítése. Tartalomjegyzék. Hardver, szoftver igények. GeoEasy telepítése. GeoEasy V2.05+ Geodéziai Feldolgozó Program

Saját Subversion tároló üzemeltetése i. Saját Subversion tároló üzemeltetése

A GeoEasy telepítése. Tartalomjegyzék. Hardver, szoftver igények. GeoEasy telepítése. GeoEasy V2.05 Geodéziai Feldolgozó Program

Az Intel gyorsindító készlete a Linux*-hoz v1.2 Gyorstájékoztató. Megrendelési szám: C

Utolsó módosítás:

Körkörös listák. fej. utolsó. utolsó. fej

UNIX folyamatok kommunikációja

Átírás:

FUSE, SSHFS és társaik - bármit láthatunk lokális fájlként! Szeredi Miklós miklos@szeredi.hu SUSE Labs/Novell 2010.11.24 FUSE, SSHFS és társaik 1

Fjúz Fu-se Fjúzi Fusze 2010.11.24 FUSE, SSHFS és társaik 2

Tartalom FUSE alapú fájlrendszerek használata Általános tudnivalók Egyes fájlrendszerek bemutatása Elméleti háttér Fájlrendszerek FUSE működése Továbbfejlesztési lehetőségek FUSE alapú fájlrendszerek fejlesztése Egyszerű példák 2010.11.24 FUSE, SSHFS és társaik 3

I. rész FUSE alapú fájlrendszerek használata 2010.11.24 FUSE, SSHFS és társaik 4

Általános tudnivalók Nem kell root jog De a csatolási ponthoz írás jog szükséges fuse csoport tagság kell egyes disztribúciókon: $ sudo adduser $USER fuse Normál program (ps, kill, stb.) Háttérben fut (démon) 2010.11.24 FUSE, SSHFS és társaik 5

Indítás hello: példa fájlrendszer http://fuse.sourceforge.net/ipszilon/ $ hello /tmp/valami Fájlrendszer neve Csatolási pont 2010.11.24 FUSE, SSHFS és társaik 6

Leállítás Segédprogram: $ fusermount u /tmp/valami Root-ként: $ sudo umount /tmp/valami Erőszakos módszerek: kill 9 umount f /sys/fs/fuse/connections/n/abort 2010.11.24 FUSE, SSHFS és társaik 7

Általános opciók h segítség d nyomkövetés f előtérben futás s egy szálú futás o opció mount(8) opció, pl. ro, noatime, suid, fuse opció fájlrendszer saját opciói 2010.11.24 FUSE, SSHFS és társaik 8

Néhány FUSE opció o allow_other Más felhasználó is láthatja a fájlrendszer tartalmát o kernel_cache Fájlok tartalmának tárolása a kernelben o nonempty Nem üres könyvtárra is csatolható o big_writes Nagyobb mint 4kb méretű írás műveletek 2010.11.24 FUSE, SSHFS és társaik 9

Modulok Szűrő o modules=m1[:m2...] Például karakterkészlet konvertálás: o modules=iconv,from_code=cp852, to_code=utf8 2010.11.24 FUSE, SSHFS és társaik 10

NTFS-3G (Szakacsits Szabolcs) Első GPL-es írható NTFS implementáció Legjobban elterjedt FUSE alapú fájlrendszer Sok felhasználó sok tesztelő kevés hiba Mozgatóerő FUSE más operációs rendszerekre való hordozása mögött $ mount /dev/sda1 /mnt/ntfs 2010.11.24 FUSE, SSHFS és társaik 11

SSHFS Ötletadó: Florin Malita (LUFS szerzője) SFTP az SSH része: nincs szerver oldali konfigurálás Más mint a többi hálózati fájlrendszer NFS: egy példány több felhasználó SSHFS: egy példány egy felhasználó 2010.11.24 FUSE, SSHFS és társaik 12

SSHFS (folyt.) $ sshfs [név@]hoszt:[könyvtár] Hasznos opciók: C tömörítés o SSH OPCIÓ (man ssh_config) o reconnect újracsatlakozás o cache_timeout=n kesselési idő o workaround=rename o transform_symlinks 2010.11.24 FUSE, SSHFS és társaik 13

mount program használata Például csatolás /etc/fstab-ból indításkor Régi: sshfs#név@hoszt:/ /mnt/hoszt fuse allow_other 0 0 Új: név@hoszt:/ /mnt/hoszt fuse.sshfs allow_other 0 0 2010.11.24 FUSE, SSHFS és társaik 14

CurlFtpFS (Robson Braga Araujo) FTP fájlrendszer, libcurl-ra épül FTP protokoll nem fájlrendszerekhez lett kitalálva $ curlftpfs ftp://ftp.fsn.hu/ Érdemes hosszú ideig kesselni: ocache_timeout=600 2010.11.24 FUSE, SSHFS és társaik 15

afuse (Jacob Bower) Automatikus csatolás (automount-hoz hasonló) Opciók: mount_template="sshfs %r:/ %m" unmount_template="fusermount u z %m" timeout=600 2010.11.24 FUSE, SSHFS és társaik 16

EncFS (Valient Gough) Titkosított fájlrendszer $ encfs /tmp/titkos /tmp/valami Hasznos opciók: i PERC Automatikus kilépés 2010.11.24 FUSE, SSHFS és társaik 17

FuseSMB (Vincent Wagelaar) Windows megosztott könyvtárak automatikus csatolása $ fusesmb /tmp/halozat /tmp/halozat/workgroup/host/share/ Konfiguráció: ~/.smb/fusesmb.conf CIFS: Egy könyvtár csatolása egyszerre Nincs automatikus feltérlépezés 2010.11.24 FUSE, SSHFS és társaik 18

gphotofs (Philip Langdale) Fényképezőgépen található képekhez hozzáférés gphoto2 program fájlrendszer változata Több mint 1300 géptípust támogat gphotofs /tmp/fenykepek 2010.11.24 FUSE, SSHFS és társaik 19

AVFS Virtuális fájlrendszerek gyűjteménye Archívumok: tar, zip, rar, ar, rpm, deb,... Tömörítők: gzip, bzip2, lzma, Hálózati: FTP, http, ssh, rsh,... Egyéb: lslr, patch, avfsstat, $ avfsd /tmp/avfs Példa: /tmp/avfs/tmp/xyz.tgz#/ 2010.11.24 FUSE, SSHFS és társaik 20

ObexFS (Christian W. Zuckschwerdt) OBEX protokoll (Infra, USB, Bluetooth) Például egyes mobiltelefonokkal kapcsolat: $ obexautofs /tmp/valami /tmp/valami/00:11:22:33:44:55/c:/ Néha elszáll: Transport endpoint is not connected 2010.11.24 FUSE, SSHFS és társaik 21

FuseISO (Dmitry Morozhnikov) iso9660 implementáció (CD/DVD image) $ fuseiso xyz.img /tmp/valami Hasonló mint a $ mount o loop xyz.img /tmp/valami...de nem kell hozzá root jog 2010.11.24 FUSE, SSHFS és társaik 22

mountlo Szintén a mount o loop helyettesítés Összes Linux által támogatott fájlrendszer UML (User Mode Linux) segítsével: Egy teljes virtuális Linux példány fut minden egyes csatolásnál 2010.11.24 FUSE, SSHFS és társaik 23

vmware-mount VMWare diszk image-ek csatolása $ vmware mount OpenSUSE.vmdk 2 $ vmware mount d 2010.11.24 FUSE, SSHFS és társaik 24

Egy kis kombinálás curlftpfs ftp://ftp.fsn.hu/ /11.3/iso/ /tmp/ftp fuseiso /tmp/ftp/ DVD i586.iso /tmp/dvd avfsd ~/avfs cd /tmp/avfs/tmp/dvd/suse/i586/ cd sshfs 2.2 5.1.i586.rpm#/ cd CONTENTS.cpio#/usr/bin/./sshfs 2010.11.24 FUSE, SSHFS és társaik 25

II. rész Elméleti háttér 2010.11.24 FUSE, SSHFS és társaik 26

Fájlrendszerek 2010.11.24 FUSE, SSHFS és társaik 27

Modern fájlrendszerek UNIX (Dennis Ritchie, Ken Thompson) Hierarchikus Egységes névtér csatolás Bármit láthatunk fájlként koncepció Pipe, eszközök (terminál, diszk), socket, 2010.11.24 FUSE, SSHFS és társaik 28

Operációs rendszer felépítése 2010.11.24 FUSE, SSHFS és társaik 29

Rendszerhívások nyomkövetése $ strace cat valami... open("valami", O_RDONLY) = 3 read(3, "semmi\n", 4096) = 6 write(1, "semmi\n", 6) = 6 read(3, "", 4096) = 0 close(3) = 0 2010.11.24 FUSE, SSHFS és társaik 30

Fájlokat közvetlenül érintő rendszerhívások stat, access chmod, chown, utimes, truncate readlink, symlink open, read, write, fsync, lseek, getdents, close mknod, creat, unlink, mkdir, rmdir, link, rename statfs, sync (getxattr, setxattr, listxattr, removexattr) 2010.11.24 FUSE, SSHFS és társaik 31

Fájlrendszerek 2010.11.24 FUSE, SSHFS és társaik 32

VFS Elérési útvonal feldolgozása Csatolások követése A. és.. kezelése, szimbolikus linkek követése Megfelelő fájlrendszer hívása Kesselés fájlok adatai és metaadatai útvonal kikeresés (lookup) 2010.11.24 FUSE, SSHFS és társaik 33

VFS adatstruktúrái Dentry: Egy könyvtárbejegyzés Fájlnév Hivatkozás az inode-ra Inode: Köznyelven: fájl Fájl adatok és attribútumok Hard link esetén több dentry egy inode 2010.11.24 FUSE, SSHFS és társaik 34

VFS adatstruktúrái (folyt.) File: Megnyitott fájl File descriptor: Adott processzen belül egyedi azonosító több file descriptor egy file 2010.11.24 FUSE, SSHFS és társaik 35

FUSE: Fájlrendszer Userspace-ben 2010.11.24 FUSE, SSHFS és társaik 36

Miért jó? Bármit láthatunk fájlként koncepció továbbvitele Archívumok, tömörített fájlok Titkosítás Különleges hardverhez hozzáférés Különböző kütyük adatai Távoli gépeken lévő fájlok Adatbázisok tartalma Régi verziók CVS/SVN/...-ben stb... 2010.11.24 FUSE, SSHFS és társaik 37

Probléma: kernel programozás Nem használhatóak könyvtárak Csak C nyelven Különleges szabályok Egy apró hiba is fagyáshoz vezethet Nehéz hibát keresni 2010.11.24 FUSE, SSHFS és társaik 38

Előzmények Fájl menedzserek Norton Commander, Gnome VFS, KDE KIO Korlátozott körben működnek Összes alkalmazás használhatja: userfs (Jeremy Fitzhardinge) PODFUK (Pavel Machek) AVFS LUFS (Florin Malita) 2010.11.24 FUSE, SSHFS és társaik 39

Történet 2003.02 FUSE-1.0 2004.12 FUSE-2.1 2005.09 Támogatás a hivatalos kernelben 2005.11 FreeBSD port (Henk Csaba) 2007.01 MacFUSE (Amit Singh) 2010.09 FUSE-2.8.5????.?? FUSE-3.0 2010.11.24 FUSE, SSHFS és társaik 40

FUSE részei Kernel modul ~8 500 sor libfuse könyvtár (nem kötelező, de ajánlott) ~10 000 sor Nyelvi illesztő ( C esetén nem kell) Fájlrendszer démon 2010.11.24 FUSE, SSHFS és társaik 41

FUSE kernel modul 2010.11.24 FUSE, SSHFS és társaik 42

Libfuse 2010.11.24 FUSE, SSHFS és társaik 43

Statisztika Web: http://fuse.sourceforge.net/ Wiki: http://sourceforge.net/apps/mediawiki/fuse > 500 000 letöltés 198 FUSE alapú fájlrendszert regisztráltak 22 programozási nyelvi illesztő 7 operációs rendszer 2010.11.24 FUSE, SSHFS és társaik 44

Továbbfejlesztési lehetőségek 2010.11.24 FUSE, SSHFS és társaik 45

TODO lista Jelenleg kb. 50 elemű libfuse 3.0-ás verzió: rendcsinálás Nem kell kompatibilisnek maradni Rossz/kevéssé használt API-k ki lesznek dobálva Jó API-k megmaradnak nagyjából változatlanul Memória fogyasztás optimalizálása Dokumentáció készítése 2010.11.24 FUSE, SSHFS és társaik 46

Kernel Felfüggesztés/hibernálás problémák Privilégium mentes csatolás Jobb támogatás valódi fájlrendszereknek Hibrid objektumok: Fájl mint könyvtár AVFS ahogyan ki lett találva Gyors fájl másolás 2010.11.24 FUSE, SSHFS és társaik 47

III. rész FUSE alapú fájlrendszerek fejlesztése 2010.11.24 FUSE, SSHFS és társaik 48

Interfészek Kernel userspace kommunikáció: /dev/fuse Különböző méretű üzenetek libfuse API-k: alacsony szintű (<fuse_lowlevel.h> hasonlít a VFS API-hoz magas szintű (<fuse.h>) hasonlít a POSIX API-hoz 2010.11.24 FUSE, SSHFS és társaik 49

hello.c Egy 100 soros fájlrendszer Magas szintű API Kiindulási pontul szolgálhat új fájlrendszerekhez Program eleje: #define FUSE_USE_VERSION 26 #include <fuse.h> 2010.11.24 FUSE, SSHFS és társaik 50

hello.c: program vége static struct fuse_operations hello_oper = {.getattr = hello_getattr,.readdir = hello_readdir,.open = hello_open,.read = hello_read, }; int main(int argc, char *argv[]) { return fuse_main(argc, argv, &hello_oper, NULL); } 2010.11.24 FUSE, SSHFS és társaik 51

Első példa hello.c módosításával 'hello' helyett hálózati interfészek Tartalom: összes eddigi forgalom byte-ban Módosítások, egyenként kipróbálva: 1. hello_readdir() 2. hello_getattr() 3. hello_read() 2010.11.24 FUSE, SSHFS és társaik 52

static int hello_readdir( ) { FILE *f; char ifname[256]; filler(buf, "..", NULL, 0); f = popen("ip link show grep '^[0-9]' cut -f2 -d:", "r"); if (f == NULL) return -errno; while (fscanf(f, "%255s", ifname) == 1) filler(buf, ifname, NULL, 0); } pclose(f); return 0; 2010.11.24 FUSE, SSHFS és társaik 53

static int hello_getattr( ) { stbuf->st_nlink = 2; } else { char cmd[320]; } snprintf(cmd,sizeof(cmd),"ip link show %s",path+1); res = system(cmd); if (res == 0) { stbuf->st_mode = S_IFREG 0444; stbuf->st_nlink = 1; stbuf->st_size = 32; } else { 2010.11.24 FUSE, SSHFS és társaik 54

static int hello_read( ) { char num_str[32]; unsigned long long total_bytes; if (strlen(path) > 256) return -EIO; } total_bytes = get_interface_bytes(path + 1); len = snprintf(num_str,sizeof(num_str),"%llu\n",total_bytes); if (offset < len) { if (offset + size > len) size = len - offset; memcpy(buf, num_str + offset, size); 2010.11.24 FUSE, SSHFS és társaik 55

Második példa xmp.py: 188 sor Tükrözi a gyökér könyvtár tartalmát (loopback) hasonló: fusexmp.c, fusexmp_fh.c szintén jó kiindulópont más fájlrendszerekhez Módosítsuk xmp.py-t, hogy valóban tükrözze a fájlokat 2010.11.24 FUSE, SSHFS és társaik 56

Transzformáció def transform(path): q = "." for name in path.split("/"): q += "/" + name[::-1] return q $ nib/tac corp/fles/spam 2010.11.24 FUSE, SSHFS és társaik 57

Vége 2010.11.24 FUSE, SSHFS és társaik 58