Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
VYSOKEacute UCENIacute TECHNICKEacute V BRNEBRNO UNIVERSITY OF TECHNOLOGY
FAKULTA INFORMACNIacuteCH TECHNOLOGIIacuteUacuteSTAV INTELIGENTNIacuteCH SYSTEacuteMU
FACULTY OF INFORMATION TECHNOLOGYDEPARTMENT OF INTELLIGENT SYSTEMS
SKRYTYacute SOUBOROVYacute SYSTEacuteM PRO GNULINUXA HIDDEN GNULINUX FILE SYSTEM
BAKALAacuteRSKAacute PRAacuteCEBACHELORrsquoS THESIS
AUTOR PRAacuteCE MARTIN PAVLAacuteSEKAUTHOR
VEDOUCIacute PRAacuteCE Ing ONDREJ LENGAacuteLSUPERVISOR
BRNO 2012
AbstraktNektera citliva data vyzadujı takovy zpusob ukrytı ktery skryje nejen obsah dat ale i sa-motnou jejich existenci Cılem teto bakalarske prace je vytvorenı souboroveho systemuktery umoznuje skryvanı souboru s citlivymi daty do jinych souboru Prace obsahujeprehled principu pouzıvanych v souborovych systemech a popis struktury a pouzitı tech-nologie FUSE Dale je v praci popsan navrh souboroveho systemu skryvajıcıho soubororydo ID3 znacek hudebnıch souboru ve formatu MP3 a jeho implementace v jazyce C++V zaveru prace je vznikly souborovy system experimentalne overen a zhodnocen
AbstractSome sensitive data need such a way of hiding that hides not only the content of the databut its preserve itself The goal of this Bachelorrsquos thesis is to create a file system thatenables hiding of files with sensitive data to other files This text contains an overview ofprinciples used in current file systems and a description of the structure and use of theFUSE technology Further the work describes the design of a filesystem that hides filesinto ID3 tags of MP3 music files and itrsquos implementation in C++ The created filesystemis experimentally assessed and evaluated
Klıcova slovaFUSE souborovy system linux steganografie knihovna C++
KeywordsFUSE file system linux steganography library C++
CitaceMartin Pavlasek Skryty souborovy system pro GNULinux bakalarska prace BrnoFIT VUT v Brne 2012
Skryty souborovy system pro GNULinux
ProhlasenıProhlasuji ze jsem tuto bakalarskou praci vypracoval samostatne pod vedenım panaIng Ondreje Lengala Uvedl jsem vsechny literarnı prameny a publikace ze kterychjsem cerpal
Martin Pavlasek16 kvetna 2012
PodekovanıDekuji Ing Ondreji Lengalovi za vedenı pomoc lidsky prıstup a predevsım podnetnekonzultace pri tvorbe teto prace
ccopy Martin Pavlasek 2012Tato prace vznikla jako skolnı dılo na Vysokem ucenı technickem v Brne Fakulte in-formacnıch technologiı Prace je chranena autorskym zakonem a jejı uzitı bez udelenıopravnenı autorem je nezakonne s vyjimkou zakonem definovanych prıpadu
Obsah
1 Uvod 5
2 Teoreticka cast 721 Souborove systemy 822 Koncepty souborovych systemu 8
221 Datove bloky a metody jejich alokace 8222 Reprezentace souboru 9223 Reprezentace adresaru 9224 Zurnalovanı 10
23 FUSE 10231 Struktura 11232 Prıklady souborovych systemu vyuzıvajıcı FUSE 12233 Zpusob pouzitı 12
24 Zabezpecenı citlivych dat 13241 Steganografie 13242 Digitalnı steganografie 14243 Kryptografie 15
3 Analyza 1631 Pozadavky na souborovy system 16
4 Navrh souboroveho systemu 1841 Uloziste 1842 Vymezenı termınu 1843 Zpusob organizace souboru 1844 Organizace metadat 19
441 Struktura souboru 19442 Obsah souboru 19443 Ulozenı metadat 20
45 Varianty alokatoru 2046 Programovacı jazyk 2147 Diagram trıd 2248 Odolnost vuci chybejıcım blokum 22
1
49 Popis behu programu 22410 Alokator bloku 23
4101 Atributy alokace 234102 Typy alokatoru 23
5 Implementace 2451 Indexace uloziste 2452 Kontext souboru 2553 Alokator 2654 Obecny format bloku 27
541 Identifikacnı byte 2755 Format ulozenı bloku typu DataBlock 2856 Format ulozenı bloku typu SuperBlock 2857 Format ulozenı bloku typu Chain 2958 Format serializovane entity 2959 Organizace metadat 29
591 Tabulka struktury 29592 Tabulka obsahu 30593 Tabulka fyzickych souboru 30594 Superblok 31
510 Operace nad soubory 325101 Ctenı 325102 Zapis 325103 Vytvorenı bezneho souboru 335104 Vytvorenı adresare 335105 Ctenı obsahu adresare 345106 Prejmenovanı presun souboru 345107 Odstranenı souboru 345108 Odstranenı adresare 345109 Odhad volneho mısta 34
511 Zname chyby 35
6 Experimentalnı overenı 3661 Metoda merenı 3662 Podmınky merenı 3663 Prubeh a vysledky experimentu 3664 Shrnutı 37
7 Zaver 3971 Dalsı rozsırenı prace 39
Literatura 41
2
Prılohy 43Seznam prıloh 44
A Obsah CD 45
3
Seznam obrazku
21 Prubeh zpracovanı pozadavku ve FUSE 1222 Ukazka pouzitı knihovny FUSE 1323 Ukazka implementace operace read 14
41 Ukazka obsahu tabulky uchovavajıcı obsah souboru 2042 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru 21
51 Struktura souboru formatu MP3 2552 Struktura obecneho formatu bloku a delky jednotlivych castı 2753 Struktura obsahu bloku se superblokem 2854 Struktura obsahu bloku se serializovanymi entitami 29
61 Prehled namerenych prenosovych rychlostı 38
4
Kapitola 1
Uvod
Dıky masovemu rozsırenı vypocetnı techniky a internetu se dnesnı doba casto oznacujejako doba informacnı Celosvetovy objem informacı neustale rychle roste [17] prıklademmohou byt vedecke clanky kterych je behem jedineho dne verejne publikovano mezisesti a sedmi tisıci Nenı to vsak jediny druh informacı Patrı zde mnoho dalsıch druhuvcetne napr fotografiı z rodinnych oslav nebo soukrome korespondence V techto prı-padech (opomineme-li typicky socialnı sıte) muze byt mnozstvı osob kterym jsou tytoinformace urceny z ruznych duvodu omezeno (rodina pratele ) Lide informace castouchovavajı v pocıtacıch na svych pevnych discıch opatrnejsı z nich je chranı hesly Lzetak omezit prıstup neopravenym osobam a chranit tak data pred prıpadnym zneuzitımPouzitı sifrovanı pro ochranu dat ma vsak omezenı v tom ze skryva pouze obsah data nikoli jiz jejich prıtomnost Potencialnımu utocnıkovi stacı mnohdy jen zjistit hesloatrsquo uz za pomoci utoku hrubou silou slovnıkoveho utoku socialnıho inzenyrstvı nebov extremnım prıpade mucenım Prave prıtomnost sifrovanych dat muze v mnoha prıpa-dech pritahnout nezadoucı pozornost proto je casto vhodne skryt samotnou prıtomnostcitlivych dat cımz se zabyva steganografie
Soucasne nastroje pro digitalnı steganografii jsou casto velmi omezene co se tycehlavne pouziteho steganografickeho prıstupu Snad jedinou znamou vyjimkou je pro-gram TrueCrypt [7] jenz umoznuje v jiz existujıcım sifrovanem oddılu vytvorit dalsımibeznymi motodami neodhalitelny pododdıl ktery lze pri znalosti sifrovacıho klıce pripojitjako bezny souborovy system
Cılem teto prace je navrhnout souborovy system ktery bude umoznovat skryvanısouboru do jinych a za pouzitı technologie FUSE jej implementovat Jejı teoreticka castposkytuje nahled do souvisejıcıch oblastı a naleza se v nı take prehled obecnych konceptupouzıvanych pri implementaci souborovych systemu Dale jsou popsany mozne zpusobyskryvanı dat a v poslednı casti se okrajove venuje kryptografii
Kapitola 3 se zabyva analyzou a spolu s navrhem v kapitole 4 uz popisujı samotnoutvorbu souboroveho systemu umoznujıcı skryvanı dat do ID3 tagu ktere jsou soucastıhudebnıho formatu MP3 Kapitola 5 se venuje resenım konkretnıch problemu v jazyceC++ a v predposlednı 6 casti cele prace jsou zdokumentovany vysledky experimen-talnıho overenı vlastnostı vytvoreneho souboroveho systemu Kapitola 7 praci shrnuje a
5
diskutuje dalsı moznosti rozsırenı
6
Kapitola 2
Teoreticka cast
Tato kapitola se zameruje na prehled souborovych systemu (v anglictine file system dalejen FS) jejich principsect a vyuzitı
Operacnı system GNULinux je inspirovan OX UNIX a jednou z vlastnostı kterousi zachoval je rozdelenı souboru na zakladnıch 6 typu [16]
1 obcejny soubor ndash patrı zde textove spustitelne binarnı soubory obrazky ve for-matu JPEG
2 adresar ndash umoznuje organizovat soubory do stromove struktury
3 symbolicky odkaz ndash zastupce za jiny soubor cıl odkazu je urcen pomocı cestyadresarove struktury je tak mozne vytvaret odkazy i mimo aktualnı svazek
4 specialnı blokovy soubor ndash podstatnou vlastnostı je moznost provadenı zaklad-nıch operacı pomocı adresace bloku Typickym predstavitelem jsou oddıly pevnychdisku
5 specialnı znakovy soubor ndash ctenı a zapis se provadı formou proudu dat po-uzıva se pro koumunikaci s nekterymi periferiemi naprıklad zarızenı pripojenychk seriovemu portu
6 pojmenovana roura ndash je jednım z prostredku komunikace mezi procesy a umoz-nuje manipulaci se standardnım vstupem a vystupem jako operace ctenı a zapissouboru V systemu GNULinux jej lze vytvorit pomocı prıkazu mkfifo
Pro jednoznacnou identifikaci jednoho souboru v ramci souboroveho systemu se pouzıvatermın inode
V systemu Linux se vyuzıvajı systemova volanı i k manipulaci se soubory Zakladnıoperace jsou provadeny pomocı nasledujıcıch volanı (pouze prehled)
bull open - otevrenı souboru pro dalsı praci s jeho obsahem
bull read - ctenı obsahu souboru
7
bull write - zapis do souboru
bull mknod - vytvorenı inode (pouzıvane pro adresare i specialnı soubory)
bull readdir - ctenı obsahu adresare
bull link - vytvorenı noveho odkazu na iuzel
bull unlink - zrusenı odkazu na iuzel souboru
bull chmod - zmena prıstupovych prav k souboru
bull chown - zmena vlastnıka souboru
21 Souborove systemy
Souborove systemy jsou prostredkem ktery umoznuje abstrakci dat formou souborufyzicky zapsanych v uloznych zarızenıch Temi byvajı nejcasteji pevne disky USB flashdisky opticka a paskova zarızenı Jejich obsah je smesicı jednicek a nul kterym davavyznam teprve az souborovy system Podle zpusobu uzitı je muzeme delit do nekolikazakladnıch kategoriı
bull bezne ndash vhodne pro obecne vyuzitı prıkladem jsou ext4 [11] NTFS BTRFS adalsı
bull sıtrsquoove (distribuovane) ndash ulozne zarızenı se fyzicky nenachazı v pocıtaci ale jedostupne skrze sıtrsquoove rozhranı Typickym predstavitelem teto skupiny je NFS [4]
bull specializovane ndash naprıklad pri zalohovanı velkych diskovych polı se casto vyuzı-vajı paskove mechaniky LTO pro ktere byl vyvinut soucasny LTFS [3]
22 Koncepty souborovych systemu
Souborove systemy majı v zakladu spolecny ucel uchovavat a organizovat data Existujerada systemu ruznych vlastnostı ktere vsak vyuzıvajı stejne principy protoze se v pru-behu casu ukazaly jako nejvhodnejsı pro dany ucel V teto casti budou tyto prıstupydetailneji popsany jejich detailnejsı popis lze nalezt v [18]
221 Datove bloky a metody jejich alokace
Datovym blokem oznacujeme nejmensı objem dat se kterym je souborovy system scho-pen pracovat V ruznych systemech je zazity termın alokacnı jednotka coz je synony-mum a s nı souvisı velikost alokacnı jednotky Pokud provedeme zapis souboru o velikostinaprıklad 1 kB pri velikosti bloku 4 kB budou na disk zapsany 4 kB dat i kdyz je vyuzityobsah bloku mensı Tento prıstup je jednoduchy pro organizaci dat ale zpusobuje ztratukapacity disku protoze poslednı ze sekvence bloku nalezıcıch danemu souboru s velkou
8
pravdepodobnostı nebude obsazen az do sveho plneho objemu a je tak pro male souboryneefektivnı
Prıstupu pro alokaci bloku pro zapis noveho souboru existuje nekolik V souborovychsystemech extended file system (ext234) tuto praci obstarava tzv block allocator Tenma prehled o aktualne obsazenych blocıch a ma za ukol vyhledat vhodne volne mısto Dodoby zverejnenı FS ext4 pracoval vzdy nad jednım konkretnım souborem V ext4 ale bylprepracovan protoze tento system vyuzıva tzv extenty coz vyzaduje vetsı kontrolu nadrozmıstenım bloku na disku Extentem oznacujeme (pokud mozno) souvislou sekvencibloku tvorıcı jeden soubor ktera je urcena pocatecnım blokem a delkou Odtud plynezasadnı rozdıl bezne organizace (jejımz prıkladem je souborovy system FAT1) ndash velikostbloku Extenty totiz majı promenlivou delku v zavislosti na obsahu Aby bloky mohlybyt ukladany souvisle vyuzıva se odlozeneho zapisu Pozadavky na zapis bloku nejsouobslouzeny okamzite ale az je jich dostatecne mnozstvı Teprve pak se provadı zapis jakojedina operace Vyuzıvanım extentu odpada nutnost velke rezie pri ukladanı objemnychsouboru Souvisle ctenı je vzhledem k sekvencnı povaze stale prevazne rotacnıch fyzickychmediı vyhodne protoze tak umoznuje maximalne vyuzıt jejich vykon
222 Reprezentace souboru
Soubor je tvoren nazvem atributy a obsahem Nazvu se take nekdy rıka symbolicke jmenoa to proto ze z pohledu souborovych systemu se jedna jen o jiny zpusob identifikaceJednoznacnym identifikatorem je v systemu Linux tzv inode Tento termın je odvozenze slov index node a jedna se o poradove cıslo souboru ve svazku
Nazev souboru je retezec znaku a jeho delka byla napr u souborovych systemuFAT1632 pevna ndash 8 znaku (a to jeste ne vsechny ASCII znaky) pro samotny nazevsouboru a 3 znaky pro prıponu [13] Tento format jmen se uznacuje jako short filenamenebo format 83 Casem se tento prıstup ukazal jako nevyhovujıcı a proto vznikla nad-stavba LFN (long filenames) ktera umoznovala v techto systemech souboru (v dnesnıdobe uz zastaralych) pouzıvat jmena az 255 znaku dlouhe Tato delka je typicka prosystemy ext234 UDF XFS a mnoho dalsıch Nektere systemy majı tuto hranici posu-nutou jeste mnohem dale ndash naprıklad u ReFS je pro nazev souboru vyhrazeno az 32 kBV nazvech souboru take byvajı omezenı na pouzitelne znaky nebo konkretnı retezcektere majı svuj specialnı vyznam Typicky se jedna o retezce
rdquoldquo ci
rdquoldquo Z implementac-
nıch duvodu nebyva povolen znak 0 (ASCII hodnota 0x00)
223 Reprezentace adresaru
Adresar je samostatny typ souboru a jeho obsahem je mnozina souboru Reprezentaciteto mnoziny lze implementovat ruznymi zpusoby z cehoz plynou i prıpadna omezenı namaximalnı pocet souboru obsazenych v jedinem adresari
Souborovy system ext2 ma v kazdem inode rezervovano 12 mıst pro ukazatele nabloky (tzv prıme adresovanı) Pokud je obsah souboru (nebo pocet souboru v adresari)
1File Allocation Table
9
bull Writeback mode ndash provadı se zalohovanı struktury souboroveho systemu takzepri poruse sice nedojde ke ztrate metadat souboroveho systemu ale obsah zapi-sovaneho bloku nemusı byt korektnı To je zpusobeno poradım operacı zapis dozurnalu zapis metadat zapis datoveho bloku
bull Ordered mode ndash podobne jako writeback mode zalohujı se pouze metadataavsak zde je rozdıl v poradı provadenych operacı Nejdrıve se zapisujı data a azpote metadata do zurnalu
bull Data mode ndash nejvyssı uroven ochrany zalohujı se metadata i datove bloky To jeale vyvazeno nizsım vykonem protoze jsou veskera data ukladana dvakrat nejdrıvedo zurnalu a pote na skutecnou adresu
maly vyuzıvajı se prımo tato mısta pro ulozenı dat Delsı obsah se uklada do samostat-nych skupin bloku (tzv neprıme adresovanı prvnı az tretı urovne) ktere jsou adresovanyz mıst prımeho adresovanı
BFS (Berkley Fast Filesystem) pracuje s promennou delkou adresaru trochu jinymzpusobem Pri zakladanı adresare se alokuje prostor nejen pro prave zapisovany obsahale i rezervuje prostor pro prıpadne rozsırenı obsahu Soucastı metadat adresare jsoupro tyto ucely vyhrazeny dva ukazatele Prvnı smeruje na poslednı obsazeny zaznam adruhy na konec celkove alokovane oblasti (obsazena + rezervovana oblast)
224 Zurnalovanı
Pro zabezpecenı konzistence ukladanych dat v prıpade vypadku napajenı byla vyvinutatechnika zurnalovanı Jde o techniku kdy se na disk zapisujı krome uzivatelskych dati dalsı zaznamy ktere umoznujı v prıpade potreby obnovit konkretnı obsah datovehobloku a zajistit tak konzistenci bloku Tento specialnı zaznam se nazyva zurnal a jeto klasicky soubor ktery nenı beznemu uzivateli prıstupny Zurnalovanı lze realizovatpomocı nekolika prıstupu z nichz se vyuzıva predevsım
23 FUSE
FUSE [19] filesystem in userspace je technologie umoznujıcı neprivilegiovanym uzivate-lum pripojovanı a odpojovanı specialnıch souborovych systemu Projekt byl puvodnevyvıjen pro system GNULinux avsak v dnesnı dobe je k dispozici i pro platformyFreeBSD Mac OS X OpenSolaris a rada dalsıch Pri beznem pripojenı svazku pomocımount je totiz nutne mıt opravnenı spravce systemu (root) Implementace FUSE je bez-nym programem ktery je spousten pod aktualne prihlasenym uzivatelem (samozrejmepokud nenı modifikovan prıkazy chmod ci chown) Z tohoto faktu vyplyvajı i dalsı vlast-nosti ze kterych zminme odstınenı programatora od nutnosti znat a dodrzovat pravidlapro tvorbu modulu jadra operacnıho systemu Bezne FS totiz byvajı do jadra zaclenenyprave touto formou
10
231 Struktura
FUSE se sklada ze trı vzajemne komunikujıcıch castı kterymi jsou
bull modul pro jadro ndash drıvejsı verze modulu FUSE byly sıreny samostatne avsak odverze jadra Linuxu 2614 je jiz zaclenen do hlavnı vyvojove vetve nenı protozpravidla nutne jej dodatecne zavadet pomocı modprobe
bull rozhranı knihovny FUSE ndash je nativne tvoreno nekolika hlavickovymi soubory v ja-zyce C poskytuje deklarace metod pro implementaci rady systemovych volanı
bull specialnı soubor devfuse ndash zprostredkovava koumunikaci mezi modulem v jadrea rozhranım knihovny Pri pripojovanı souboroveho systemu vyuzıvajıcı FUSE seprovede otevrenı tohoto specialnıho souboru a nasledna komunikace probıha uz jenskrze takto zıskany popisovac (file descriptor)
Modul v jadre je prave jeden ale rozhranı knihovny je implementovano v rade programo-vacıch jazyku Pro strucny prehled jimi jsou C C++ Java C Haskell Python PerlRuby PHP ci Lua Uplny vypis je dostupny na oficialnıch webovych strankach projektuFUSE Nasleduje obrazek 21 se znaroznenım prubehu systemoveho volanı readdiravsak princip komunikace je spolecny pro vsechna podporovana systemova volanı
11
Obrazek 21 Prubeh zpracovanı pozadavku ve FUSE Obrazek byl prevzat z [19]
Je zde videt prenos pozadavku na zobrazenı obsahu adresare prochazejıcı uzivatel-skym prostorem (userspace) skrze obecnou vrstvu VFS (Virtual File System) a nasled-neho predanı modulu FUSE v jadru systemu To jej dale distribuuje zpet do uzivatel-skeho prostoru kde se nachazı implementace rozhranı FUSE (examplehello) Volanıse vyhodnotı vykonanım prıslusne metody a vysledek operace putuje stejnou cestou zpet
232 Prıklady souborovych systemu vyuzıvajıcı FUSE
Technologie FUSE se drzı hesla systemu UNIXrdquovse je souborldquo a nasla si tak sve prız-
nivce Svedcı o tom mnozstvı vytvorenych souborovych systemu ktere tuto technologiivyuzıvajı Mezi ty znamejsı patrı
bull sshfs [6] ndash umoznuje pripojenı vzdaleneho adresare pomocı protokolu SSH
bull CurlFtpFS [2] ndash zprostredkovava pripojenı FTP serveru jako lokalnıho adresare
bull WikipediaFS [9] ndash prace s clanky z portalu zalozenych na systemu Wiki jakos beznymi soubory
bull BloggerFS [1] ndash manipulace s prıspevky na blogovacım portalu Bloggercom veforme beznych souboru
233 Zpusob pouzitı
Pouzitı knihovny FUSE spocıva ve vlastnı implementaci obsluznych funkcı (tzv han-dlers) pro jednotlive ukony ktere lze se soubory provadet a jejiz nazvy odpovıdajı sys-temovym volanım FUSE definuje pro manipulaci se soubory az 39 (od verze knihovny
12
26) obsluznych funkcı avsak pro zakladnı pouzitı nenı nutne implementovat vsechnyJednoduchy avsak jiz funkcnı souborovy system lze sestavit pomocı getattr openopendir a read Ukazka implementace tohoto FS je v jazyce C na obrazcıch 22 a 23Deklarace vsech obsluznych funkcı lze nalezt v hlavickovem souboru fuseh ktery byva
include ltstdiohgt
include ltfusehgt
static int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
int main(int argc char argv[])
struct fuse_operations fsOperations
fsOperationsgetattr = fuse_getattr
fsOperationsopen = fuse_open
fsOperationsread = fuse_read
fsOperationsreaddir = fuse_readdir
return fuse_main(argc argv ampfsOperations NULL)
Obrazek 22 Ukazka pouzitı knihovny FUSE
umısten v usrincludefuse (tato cesta se ale muze mezi linuxovymi distribucemilisit) Soubory zde nejsou identifikovany pomocı inode jak je zvykem ve skutecnych FSale pouze pomocı cesty kterou lze nalezt ve vetsine obsluznych funkcı na mıste prvnıhoparametru Pokud byla operace provedena korektne obsluzna funkce by mela ve vetsineprıpadu vracet cıslo 0 Vsechny druhy chyb jsou indikovany zapornou hodnotou kon-stant definujıcıch druh chyby Jejich soupis se naleza v hlavickovem souboru errorh
(umıstenı souboru se muze lisit)
24 Zabezpecenı citlivych dat
Potreba chranit data pred cizımi osobami vznikla uz v davnych dobach jeste pred rozvo-jem vypocetnı techniky Jednım z odvetvı ktere se ochranou dat zabyva je kryptografieData lze chranit vıce prostredky a jejich sifrovanı je pouze jednou z aplikacı Nasledujıcıcast poskytuje prehled o dalsıch zpusobech ochrany dat [15]
241 Steganografie
Steganografie spocıva ve skrytı zpravy Zasadnım rozdılem oproti kryptografii je prede-vsım snaha o skrytı samotne existence zpravy V minulosti se vyuzıvaly tzv neviditelne
13
Pro ukazku nasleduje prıklad implementace operace read
int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
char msg[] = Pokusny text pro ctenı
int msgLength = strlen(msg)
if(strcmp(path example) == 0)
memcpy(buffer msg msgLength)
return msgLength
else if(strcmp(path null) == 0)
return 0
else
return -ENOENT
Obrazek 23 Ukazka implementace operace read
inkousty jimiz byla napsana zprava na papır Jejı prıjemce pak cely list nahral a ter-mochemickou reakcı se text objevil Dokonce bylo pouzito i hlavy otroka kdy mu bylanejdrıve oholena hlava a pote na ni vytetovana zprava Az mu vlasy zpet dorostly bylvyslan na cestu pres nepratelske uzemı a prıjemce mu ji opet oholil aby si zpravu mohlprecıst Tento zpusob samozrejme nebyl vzdy vhodny a proto se lide snazili vymysletdalsı zpusoby skrytı dat Pri pouzitı psaneho textu (rukou ci na psacım stroji) jako nos-neho materialu se da vyuzıt mechanismu psacıho stroje Do volneho prostoru mezi radkyse skryvaly zpravy psanım bez barevne pasky takze v papıru zustal pouze otlak pısmenNebo se tajna zprava mnohonasobne zmensila aby pri letmem pohledu pripomınala jed-nolity cerny bod Ten se pak vlepil do tisteneho textu jako tecka na konci vety tzvmikrotecky
242 Digitalnı steganografie
I v digitalnı dobe stale existujı postupy jak skryvat data Naprıklad u fotografiı mu-zeme dobre vyuzıt nedokonalosti lidskeho oka Pokud zmenıme jen nepatrne barevnyodstın v nektere casti fotografie nenı tato uprava na pohled zretelna ndash nemusı se jednato anomalii ale ucel Stejny princip lze aplikovat i na zvuky Hudba se po digitalizacicasto komprimuje Podle druhu pouziteho algoritmu muze dochazet ke ztrate hudebnıinformace Pokud zmenıme nejnizsı bit u cısla reprezentujıcıho frekvenci stejne jakou obrazku nebude tato zmena pri poslechu patrna Tento typ techniky se oznacuje jakozmena hodnoty LSB (least significant bit) Pokud nekdo tento soubor jakkoliv bezneupravı (orıznutı obrazku zmena bitrate zvuku) znamena to ve vetsine prıpadu po-skozenı nebo uplnou ztratu skryte informace U pruznych disku (disket) umı nektere
14
programy zamerne oznacit sektory na jejım magnetickem povrchu jako poskozene Tımsice dojde k castecnemu snızenı kapacity pro bezne soubory ale nehrozı zde nebezpecıprepisu ztracenych dat pri bezne praci Pokud uzivatel chce zapsat soubor na disketuoperacnı system pro nej vyuzije pouze volne sektory ktere jsou v poradku a chybnevzdy preskocı Skrytı dat nemusı ale nutne znamenat rozpoznatelnou zmenu vystupuObrazovy format BMP svou stavbou umoznuje doslova neviditelne skrytı (omezeneho)mnozstvı dat Jedinym prıpadnym vodıtkem k odhalenı je zvyseny objem dat
243 Kryptografie
Kryptografie jinymi slovy sifrovanı je postup transformace originalnı zpravy do podobyktera je v idealnım prıpade citelna pouze se znalostı tzv klıce Prı pouzitı stejne vstupnızpravy sifrovacıho algoritmu ale jineho klıce zıskame odlisny vystup Mıra zabezpecenızpravy zavisı na zvolenem algoritmu a sifrovacım klıci Proto pri chybnem pouzitı nekte-reho z bezne pouzıvanych algoritmu (napr RSA) a klıce (pouzitı retezce
rdquohesloldquo) nemusı
byt pro utocnıka velkou prekazkou zjistit obsah puvodnı zpravySifrovacı algoritmy rozdelujeme do dvou zakladnıch skupin podle typu klıce
bull Symetricka kryptografie ndash pouzıva pro sifrovanı i desifrovanı stejny klıc kteryby mel zustat v tajnosti Patrı zde naprıklad algoritmy DES [14] TwoFish [8] av dnesnı dobe v teto kategorii nejpouzıvanejsı AES [10]
bull Asymetricka kryptografie ndash vyuzıva dva typy klıcu verejny a privatnı Verejnyklıc ktery slouzı pro desifrovanı (uz podle nazvu) je mozne jej zaslat prıjemncisifrovane zpravy beznou nezabezpecenou elektronickou postou nebo jej zverejnitna svych webovych strankach Oproti tomu privatnı klıc musı zustat v tajnostiu sveho majitele Zastupcem teto kategorie je algoritmus RSA [5]
Sifrovana komunikace pak probıha podle nasledujıcıho scenare pripomınajıcıho kla-sickou postovnı korespondenci
1 Odesilatel (osoba A) si zajistı verejny klıc prıjemce (osoba B) naprıklad jejımstazenım z osobnıho blogu osoby B
2 Osoba A zasifruje svou zpravu pomocı verejneho klıce B a odesle ji jako beznye-mail
3 Osoba B zpravu desifruje pomocı sveho privatnıho klıce a zıska tak puvodnıobsah
Oba typy klıcu se generujı vzdy jako par Pro jejich vytvorenı je nutne dodat radunahodnych cısel Jednou z pouzitych metod jejich generovanı je prectenı hodnotynahodne adresy v pameti nebo sledovanı pozice kurzoru mysi uzivatele
15
Kapitola 3
Analyza
V nasledujıcı casti budou popsany pozadavky na navrhovany souborovy system a prehledzakladnıch problemu ktere bude nutne behem navrhu resit
31 Pozadavky na souborovy system
Pro uceleny pohled a dalsı postup je vhodne nejprve specifikovat pozadavky na vytvarenysystem Jsou jimi predevsım
bull Ochrana obsahu FS heslem ndash skryty FS by mel idealne tajit nejen svou vlastnıexistenci ale predevsım by nemel dovolit uzivatelum neznajıcıch klıc prıstupovatk jeho obsahu
bull Existence vıce FS nad jednım ulozistem ndash tento pozadavek muze plnit hned dvefunkce V prve rade jde o castecne nezavisle varianty FS pro organizaci obsahunicmene dalsım dusledkem muze byt jeho vlastnı ochrana Pokud bychom uvazo-vali scenar kdy osoba-utocnık pod pohruzkou donutı svou obetrsquo k vyzrazenı heslado skryteho FS obetrsquo ma sanci sdelit jine nez skutecne heslo a tım dojde ke zprı-stupnenı odlisneho obsahu (pochopitelne za predpokladu ze byl drıve vytvoren)
bull Nezavislost na uloznem mediu ndash knihovna by mela poskytovat dostatecne obecnerozhranı ktere by bylo mozne vyuzıt pro implementaci ruznych typu ulozistrsquo beznutnosti hlubokych zasahu do knihovny samotne Prıkladem typu ulozistrsquo mohoubyt soubory MP3 JPG webova sluzba
bull Alespon castecna odolnost proti chybejıcım fragmentum ndash v prıpade ze bude ulo-zistem naprıklad adresar s MP3 soubory lze v prubehu casu predpokladat jeho mo-difikace ruzne zavazneho charaketru (platı pochopitelne nejen pro soubory MP3)Mohou jimi byt zmena umıstenı souboru v adresarıch i kompletnı odstranenı celehoalba Tyto zasahy ruznou merou ovlivnujı spolehlivost skryteho FS a bude nutneje v navrhu zohlednit
16
bull Jednouzivatelsky rezim ndash skryty FS ze sve podstaty nenı urcen pro kazdeho uziva-tele ktery ma prıstup k ulozisti Predpokladem je uzky okruh osob ktere budouznat heslo pro prıstup
Vyvoj aplikace splnujıcı vyse uvedena kriteria se muze ubırat dvema smery V prve radelze vytvorit tzv aplikaci na mıru To znamena kompletnı prizpusobenı vyvoje zakom-ponovanı optimalizacı vhodnych pro specificke pouzitı atd Dalsım smerem je knihovnaposkytujıcı obecne rozhranı v takove forme aby bylo mozne vyhovet pozadavkum nasystem Vyhodou muze byt dalsı samostatne pouzitı konkretnıch modulu bez nutnostihlubokych zasahu do puvodnıch zdrojovych kodu Konecne rozhodnutı pro perspektiv-nejsı pouzitı tak padlo na variantu vytvorenı knihovny ktera bude schopna vytvorit aspravovat skryty souborovy system
17
Kapitola 4
Navrh souboroveho systemu
Kapitola navrhu popisuje obecne postupy resenı problemu ktere jsou spojeny s nasled-nym vyvojem skryteho souboroveho systemu Jejich soupis je uveden v kapitole 3 Tyjsou dale detailneji rozvedeny v kapitole 5 zabyvajıcı se implementacı
41 Uloziste
Cılem prace je zajistit ukladanı souboru do jinych Umıstenı techto jinych souboru budedale oznacovano jako uloziste
42 Vymezenı termınu
Pro ujasnenı vyznamu nekterych termınu dale obsazenych v teto prace nasleduje jejichprehled s podrobnejsım vysvetlenım
bull hash ndash jednoznacna identifikace prave jedne entitiy v ulozisti
bull fragment ndash souvisı se skrytym souborem a jde o poradove cıslo useku dat kterepredstavuje cast obsahu skryteho souboru Slozenım vsech fragmentu dostanemekompletnı obsah souboru proto jeho hodnota v ramci skryteho FS musı byt jedi-necna
bull blok ndash souvisı s entitou v ulozisti jedna se o poradove cıslo dılcı casti obsahufyzickeho souboru Tento identifikator musı byt unikatnı v ramci hash
bull vnoreny FS ndash samostatny prostor pro skryvanı souboru v ramci stejneho ulozisteImplementace systemu je muze rozlisovat naprıklad pomocı zadaneho hesla
43 Zpusob organizace souboru
Jak jiz bylo v zmıneno v teoreticke casti 221 nejpouzıvanejsımi druhy organizace obsahusouboru je fragmentace a spojita alokace Uloziste je jen obecne rozhranı a muze mıt
18
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
AbstraktNektera citliva data vyzadujı takovy zpusob ukrytı ktery skryje nejen obsah dat ale i sa-motnou jejich existenci Cılem teto bakalarske prace je vytvorenı souboroveho systemuktery umoznuje skryvanı souboru s citlivymi daty do jinych souboru Prace obsahujeprehled principu pouzıvanych v souborovych systemech a popis struktury a pouzitı tech-nologie FUSE Dale je v praci popsan navrh souboroveho systemu skryvajıcıho soubororydo ID3 znacek hudebnıch souboru ve formatu MP3 a jeho implementace v jazyce C++V zaveru prace je vznikly souborovy system experimentalne overen a zhodnocen
AbstractSome sensitive data need such a way of hiding that hides not only the content of the databut its preserve itself The goal of this Bachelorrsquos thesis is to create a file system thatenables hiding of files with sensitive data to other files This text contains an overview ofprinciples used in current file systems and a description of the structure and use of theFUSE technology Further the work describes the design of a filesystem that hides filesinto ID3 tags of MP3 music files and itrsquos implementation in C++ The created filesystemis experimentally assessed and evaluated
Klıcova slovaFUSE souborovy system linux steganografie knihovna C++
KeywordsFUSE file system linux steganography library C++
CitaceMartin Pavlasek Skryty souborovy system pro GNULinux bakalarska prace BrnoFIT VUT v Brne 2012
Skryty souborovy system pro GNULinux
ProhlasenıProhlasuji ze jsem tuto bakalarskou praci vypracoval samostatne pod vedenım panaIng Ondreje Lengala Uvedl jsem vsechny literarnı prameny a publikace ze kterychjsem cerpal
Martin Pavlasek16 kvetna 2012
PodekovanıDekuji Ing Ondreji Lengalovi za vedenı pomoc lidsky prıstup a predevsım podnetnekonzultace pri tvorbe teto prace
ccopy Martin Pavlasek 2012Tato prace vznikla jako skolnı dılo na Vysokem ucenı technickem v Brne Fakulte in-formacnıch technologiı Prace je chranena autorskym zakonem a jejı uzitı bez udelenıopravnenı autorem je nezakonne s vyjimkou zakonem definovanych prıpadu
Obsah
1 Uvod 5
2 Teoreticka cast 721 Souborove systemy 822 Koncepty souborovych systemu 8
221 Datove bloky a metody jejich alokace 8222 Reprezentace souboru 9223 Reprezentace adresaru 9224 Zurnalovanı 10
23 FUSE 10231 Struktura 11232 Prıklady souborovych systemu vyuzıvajıcı FUSE 12233 Zpusob pouzitı 12
24 Zabezpecenı citlivych dat 13241 Steganografie 13242 Digitalnı steganografie 14243 Kryptografie 15
3 Analyza 1631 Pozadavky na souborovy system 16
4 Navrh souboroveho systemu 1841 Uloziste 1842 Vymezenı termınu 1843 Zpusob organizace souboru 1844 Organizace metadat 19
441 Struktura souboru 19442 Obsah souboru 19443 Ulozenı metadat 20
45 Varianty alokatoru 2046 Programovacı jazyk 2147 Diagram trıd 2248 Odolnost vuci chybejıcım blokum 22
1
49 Popis behu programu 22410 Alokator bloku 23
4101 Atributy alokace 234102 Typy alokatoru 23
5 Implementace 2451 Indexace uloziste 2452 Kontext souboru 2553 Alokator 2654 Obecny format bloku 27
541 Identifikacnı byte 2755 Format ulozenı bloku typu DataBlock 2856 Format ulozenı bloku typu SuperBlock 2857 Format ulozenı bloku typu Chain 2958 Format serializovane entity 2959 Organizace metadat 29
591 Tabulka struktury 29592 Tabulka obsahu 30593 Tabulka fyzickych souboru 30594 Superblok 31
510 Operace nad soubory 325101 Ctenı 325102 Zapis 325103 Vytvorenı bezneho souboru 335104 Vytvorenı adresare 335105 Ctenı obsahu adresare 345106 Prejmenovanı presun souboru 345107 Odstranenı souboru 345108 Odstranenı adresare 345109 Odhad volneho mısta 34
511 Zname chyby 35
6 Experimentalnı overenı 3661 Metoda merenı 3662 Podmınky merenı 3663 Prubeh a vysledky experimentu 3664 Shrnutı 37
7 Zaver 3971 Dalsı rozsırenı prace 39
Literatura 41
2
Prılohy 43Seznam prıloh 44
A Obsah CD 45
3
Seznam obrazku
21 Prubeh zpracovanı pozadavku ve FUSE 1222 Ukazka pouzitı knihovny FUSE 1323 Ukazka implementace operace read 14
41 Ukazka obsahu tabulky uchovavajıcı obsah souboru 2042 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru 21
51 Struktura souboru formatu MP3 2552 Struktura obecneho formatu bloku a delky jednotlivych castı 2753 Struktura obsahu bloku se superblokem 2854 Struktura obsahu bloku se serializovanymi entitami 29
61 Prehled namerenych prenosovych rychlostı 38
4
Kapitola 1
Uvod
Dıky masovemu rozsırenı vypocetnı techniky a internetu se dnesnı doba casto oznacujejako doba informacnı Celosvetovy objem informacı neustale rychle roste [17] prıklademmohou byt vedecke clanky kterych je behem jedineho dne verejne publikovano mezisesti a sedmi tisıci Nenı to vsak jediny druh informacı Patrı zde mnoho dalsıch druhuvcetne napr fotografiı z rodinnych oslav nebo soukrome korespondence V techto prı-padech (opomineme-li typicky socialnı sıte) muze byt mnozstvı osob kterym jsou tytoinformace urceny z ruznych duvodu omezeno (rodina pratele ) Lide informace castouchovavajı v pocıtacıch na svych pevnych discıch opatrnejsı z nich je chranı hesly Lzetak omezit prıstup neopravenym osobam a chranit tak data pred prıpadnym zneuzitımPouzitı sifrovanı pro ochranu dat ma vsak omezenı v tom ze skryva pouze obsah data nikoli jiz jejich prıtomnost Potencialnımu utocnıkovi stacı mnohdy jen zjistit hesloatrsquo uz za pomoci utoku hrubou silou slovnıkoveho utoku socialnıho inzenyrstvı nebov extremnım prıpade mucenım Prave prıtomnost sifrovanych dat muze v mnoha prıpa-dech pritahnout nezadoucı pozornost proto je casto vhodne skryt samotnou prıtomnostcitlivych dat cımz se zabyva steganografie
Soucasne nastroje pro digitalnı steganografii jsou casto velmi omezene co se tycehlavne pouziteho steganografickeho prıstupu Snad jedinou znamou vyjimkou je pro-gram TrueCrypt [7] jenz umoznuje v jiz existujıcım sifrovanem oddılu vytvorit dalsımibeznymi motodami neodhalitelny pododdıl ktery lze pri znalosti sifrovacıho klıce pripojitjako bezny souborovy system
Cılem teto prace je navrhnout souborovy system ktery bude umoznovat skryvanısouboru do jinych a za pouzitı technologie FUSE jej implementovat Jejı teoreticka castposkytuje nahled do souvisejıcıch oblastı a naleza se v nı take prehled obecnych konceptupouzıvanych pri implementaci souborovych systemu Dale jsou popsany mozne zpusobyskryvanı dat a v poslednı casti se okrajove venuje kryptografii
Kapitola 3 se zabyva analyzou a spolu s navrhem v kapitole 4 uz popisujı samotnoutvorbu souboroveho systemu umoznujıcı skryvanı dat do ID3 tagu ktere jsou soucastıhudebnıho formatu MP3 Kapitola 5 se venuje resenım konkretnıch problemu v jazyceC++ a v predposlednı 6 casti cele prace jsou zdokumentovany vysledky experimen-talnıho overenı vlastnostı vytvoreneho souboroveho systemu Kapitola 7 praci shrnuje a
5
diskutuje dalsı moznosti rozsırenı
6
Kapitola 2
Teoreticka cast
Tato kapitola se zameruje na prehled souborovych systemu (v anglictine file system dalejen FS) jejich principsect a vyuzitı
Operacnı system GNULinux je inspirovan OX UNIX a jednou z vlastnostı kterousi zachoval je rozdelenı souboru na zakladnıch 6 typu [16]
1 obcejny soubor ndash patrı zde textove spustitelne binarnı soubory obrazky ve for-matu JPEG
2 adresar ndash umoznuje organizovat soubory do stromove struktury
3 symbolicky odkaz ndash zastupce za jiny soubor cıl odkazu je urcen pomocı cestyadresarove struktury je tak mozne vytvaret odkazy i mimo aktualnı svazek
4 specialnı blokovy soubor ndash podstatnou vlastnostı je moznost provadenı zaklad-nıch operacı pomocı adresace bloku Typickym predstavitelem jsou oddıly pevnychdisku
5 specialnı znakovy soubor ndash ctenı a zapis se provadı formou proudu dat po-uzıva se pro koumunikaci s nekterymi periferiemi naprıklad zarızenı pripojenychk seriovemu portu
6 pojmenovana roura ndash je jednım z prostredku komunikace mezi procesy a umoz-nuje manipulaci se standardnım vstupem a vystupem jako operace ctenı a zapissouboru V systemu GNULinux jej lze vytvorit pomocı prıkazu mkfifo
Pro jednoznacnou identifikaci jednoho souboru v ramci souboroveho systemu se pouzıvatermın inode
V systemu Linux se vyuzıvajı systemova volanı i k manipulaci se soubory Zakladnıoperace jsou provadeny pomocı nasledujıcıch volanı (pouze prehled)
bull open - otevrenı souboru pro dalsı praci s jeho obsahem
bull read - ctenı obsahu souboru
7
bull write - zapis do souboru
bull mknod - vytvorenı inode (pouzıvane pro adresare i specialnı soubory)
bull readdir - ctenı obsahu adresare
bull link - vytvorenı noveho odkazu na iuzel
bull unlink - zrusenı odkazu na iuzel souboru
bull chmod - zmena prıstupovych prav k souboru
bull chown - zmena vlastnıka souboru
21 Souborove systemy
Souborove systemy jsou prostredkem ktery umoznuje abstrakci dat formou souborufyzicky zapsanych v uloznych zarızenıch Temi byvajı nejcasteji pevne disky USB flashdisky opticka a paskova zarızenı Jejich obsah je smesicı jednicek a nul kterym davavyznam teprve az souborovy system Podle zpusobu uzitı je muzeme delit do nekolikazakladnıch kategoriı
bull bezne ndash vhodne pro obecne vyuzitı prıkladem jsou ext4 [11] NTFS BTRFS adalsı
bull sıtrsquoove (distribuovane) ndash ulozne zarızenı se fyzicky nenachazı v pocıtaci ale jedostupne skrze sıtrsquoove rozhranı Typickym predstavitelem teto skupiny je NFS [4]
bull specializovane ndash naprıklad pri zalohovanı velkych diskovych polı se casto vyuzı-vajı paskove mechaniky LTO pro ktere byl vyvinut soucasny LTFS [3]
22 Koncepty souborovych systemu
Souborove systemy majı v zakladu spolecny ucel uchovavat a organizovat data Existujerada systemu ruznych vlastnostı ktere vsak vyuzıvajı stejne principy protoze se v pru-behu casu ukazaly jako nejvhodnejsı pro dany ucel V teto casti budou tyto prıstupydetailneji popsany jejich detailnejsı popis lze nalezt v [18]
221 Datove bloky a metody jejich alokace
Datovym blokem oznacujeme nejmensı objem dat se kterym je souborovy system scho-pen pracovat V ruznych systemech je zazity termın alokacnı jednotka coz je synony-mum a s nı souvisı velikost alokacnı jednotky Pokud provedeme zapis souboru o velikostinaprıklad 1 kB pri velikosti bloku 4 kB budou na disk zapsany 4 kB dat i kdyz je vyuzityobsah bloku mensı Tento prıstup je jednoduchy pro organizaci dat ale zpusobuje ztratukapacity disku protoze poslednı ze sekvence bloku nalezıcıch danemu souboru s velkou
8
pravdepodobnostı nebude obsazen az do sveho plneho objemu a je tak pro male souboryneefektivnı
Prıstupu pro alokaci bloku pro zapis noveho souboru existuje nekolik V souborovychsystemech extended file system (ext234) tuto praci obstarava tzv block allocator Tenma prehled o aktualne obsazenych blocıch a ma za ukol vyhledat vhodne volne mısto Dodoby zverejnenı FS ext4 pracoval vzdy nad jednım konkretnım souborem V ext4 ale bylprepracovan protoze tento system vyuzıva tzv extenty coz vyzaduje vetsı kontrolu nadrozmıstenım bloku na disku Extentem oznacujeme (pokud mozno) souvislou sekvencibloku tvorıcı jeden soubor ktera je urcena pocatecnım blokem a delkou Odtud plynezasadnı rozdıl bezne organizace (jejımz prıkladem je souborovy system FAT1) ndash velikostbloku Extenty totiz majı promenlivou delku v zavislosti na obsahu Aby bloky mohlybyt ukladany souvisle vyuzıva se odlozeneho zapisu Pozadavky na zapis bloku nejsouobslouzeny okamzite ale az je jich dostatecne mnozstvı Teprve pak se provadı zapis jakojedina operace Vyuzıvanım extentu odpada nutnost velke rezie pri ukladanı objemnychsouboru Souvisle ctenı je vzhledem k sekvencnı povaze stale prevazne rotacnıch fyzickychmediı vyhodne protoze tak umoznuje maximalne vyuzıt jejich vykon
222 Reprezentace souboru
Soubor je tvoren nazvem atributy a obsahem Nazvu se take nekdy rıka symbolicke jmenoa to proto ze z pohledu souborovych systemu se jedna jen o jiny zpusob identifikaceJednoznacnym identifikatorem je v systemu Linux tzv inode Tento termın je odvozenze slov index node a jedna se o poradove cıslo souboru ve svazku
Nazev souboru je retezec znaku a jeho delka byla napr u souborovych systemuFAT1632 pevna ndash 8 znaku (a to jeste ne vsechny ASCII znaky) pro samotny nazevsouboru a 3 znaky pro prıponu [13] Tento format jmen se uznacuje jako short filenamenebo format 83 Casem se tento prıstup ukazal jako nevyhovujıcı a proto vznikla nad-stavba LFN (long filenames) ktera umoznovala v techto systemech souboru (v dnesnıdobe uz zastaralych) pouzıvat jmena az 255 znaku dlouhe Tato delka je typicka prosystemy ext234 UDF XFS a mnoho dalsıch Nektere systemy majı tuto hranici posu-nutou jeste mnohem dale ndash naprıklad u ReFS je pro nazev souboru vyhrazeno az 32 kBV nazvech souboru take byvajı omezenı na pouzitelne znaky nebo konkretnı retezcektere majı svuj specialnı vyznam Typicky se jedna o retezce
rdquoldquo ci
rdquoldquo Z implementac-
nıch duvodu nebyva povolen znak 0 (ASCII hodnota 0x00)
223 Reprezentace adresaru
Adresar je samostatny typ souboru a jeho obsahem je mnozina souboru Reprezentaciteto mnoziny lze implementovat ruznymi zpusoby z cehoz plynou i prıpadna omezenı namaximalnı pocet souboru obsazenych v jedinem adresari
Souborovy system ext2 ma v kazdem inode rezervovano 12 mıst pro ukazatele nabloky (tzv prıme adresovanı) Pokud je obsah souboru (nebo pocet souboru v adresari)
1File Allocation Table
9
bull Writeback mode ndash provadı se zalohovanı struktury souboroveho systemu takzepri poruse sice nedojde ke ztrate metadat souboroveho systemu ale obsah zapi-sovaneho bloku nemusı byt korektnı To je zpusobeno poradım operacı zapis dozurnalu zapis metadat zapis datoveho bloku
bull Ordered mode ndash podobne jako writeback mode zalohujı se pouze metadataavsak zde je rozdıl v poradı provadenych operacı Nejdrıve se zapisujı data a azpote metadata do zurnalu
bull Data mode ndash nejvyssı uroven ochrany zalohujı se metadata i datove bloky To jeale vyvazeno nizsım vykonem protoze jsou veskera data ukladana dvakrat nejdrıvedo zurnalu a pote na skutecnou adresu
maly vyuzıvajı se prımo tato mısta pro ulozenı dat Delsı obsah se uklada do samostat-nych skupin bloku (tzv neprıme adresovanı prvnı az tretı urovne) ktere jsou adresovanyz mıst prımeho adresovanı
BFS (Berkley Fast Filesystem) pracuje s promennou delkou adresaru trochu jinymzpusobem Pri zakladanı adresare se alokuje prostor nejen pro prave zapisovany obsahale i rezervuje prostor pro prıpadne rozsırenı obsahu Soucastı metadat adresare jsoupro tyto ucely vyhrazeny dva ukazatele Prvnı smeruje na poslednı obsazeny zaznam adruhy na konec celkove alokovane oblasti (obsazena + rezervovana oblast)
224 Zurnalovanı
Pro zabezpecenı konzistence ukladanych dat v prıpade vypadku napajenı byla vyvinutatechnika zurnalovanı Jde o techniku kdy se na disk zapisujı krome uzivatelskych dati dalsı zaznamy ktere umoznujı v prıpade potreby obnovit konkretnı obsah datovehobloku a zajistit tak konzistenci bloku Tento specialnı zaznam se nazyva zurnal a jeto klasicky soubor ktery nenı beznemu uzivateli prıstupny Zurnalovanı lze realizovatpomocı nekolika prıstupu z nichz se vyuzıva predevsım
23 FUSE
FUSE [19] filesystem in userspace je technologie umoznujıcı neprivilegiovanym uzivate-lum pripojovanı a odpojovanı specialnıch souborovych systemu Projekt byl puvodnevyvıjen pro system GNULinux avsak v dnesnı dobe je k dispozici i pro platformyFreeBSD Mac OS X OpenSolaris a rada dalsıch Pri beznem pripojenı svazku pomocımount je totiz nutne mıt opravnenı spravce systemu (root) Implementace FUSE je bez-nym programem ktery je spousten pod aktualne prihlasenym uzivatelem (samozrejmepokud nenı modifikovan prıkazy chmod ci chown) Z tohoto faktu vyplyvajı i dalsı vlast-nosti ze kterych zminme odstınenı programatora od nutnosti znat a dodrzovat pravidlapro tvorbu modulu jadra operacnıho systemu Bezne FS totiz byvajı do jadra zaclenenyprave touto formou
10
231 Struktura
FUSE se sklada ze trı vzajemne komunikujıcıch castı kterymi jsou
bull modul pro jadro ndash drıvejsı verze modulu FUSE byly sıreny samostatne avsak odverze jadra Linuxu 2614 je jiz zaclenen do hlavnı vyvojove vetve nenı protozpravidla nutne jej dodatecne zavadet pomocı modprobe
bull rozhranı knihovny FUSE ndash je nativne tvoreno nekolika hlavickovymi soubory v ja-zyce C poskytuje deklarace metod pro implementaci rady systemovych volanı
bull specialnı soubor devfuse ndash zprostredkovava koumunikaci mezi modulem v jadrea rozhranım knihovny Pri pripojovanı souboroveho systemu vyuzıvajıcı FUSE seprovede otevrenı tohoto specialnıho souboru a nasledna komunikace probıha uz jenskrze takto zıskany popisovac (file descriptor)
Modul v jadre je prave jeden ale rozhranı knihovny je implementovano v rade programo-vacıch jazyku Pro strucny prehled jimi jsou C C++ Java C Haskell Python PerlRuby PHP ci Lua Uplny vypis je dostupny na oficialnıch webovych strankach projektuFUSE Nasleduje obrazek 21 se znaroznenım prubehu systemoveho volanı readdiravsak princip komunikace je spolecny pro vsechna podporovana systemova volanı
11
Obrazek 21 Prubeh zpracovanı pozadavku ve FUSE Obrazek byl prevzat z [19]
Je zde videt prenos pozadavku na zobrazenı obsahu adresare prochazejıcı uzivatel-skym prostorem (userspace) skrze obecnou vrstvu VFS (Virtual File System) a nasled-neho predanı modulu FUSE v jadru systemu To jej dale distribuuje zpet do uzivatel-skeho prostoru kde se nachazı implementace rozhranı FUSE (examplehello) Volanıse vyhodnotı vykonanım prıslusne metody a vysledek operace putuje stejnou cestou zpet
232 Prıklady souborovych systemu vyuzıvajıcı FUSE
Technologie FUSE se drzı hesla systemu UNIXrdquovse je souborldquo a nasla si tak sve prız-
nivce Svedcı o tom mnozstvı vytvorenych souborovych systemu ktere tuto technologiivyuzıvajı Mezi ty znamejsı patrı
bull sshfs [6] ndash umoznuje pripojenı vzdaleneho adresare pomocı protokolu SSH
bull CurlFtpFS [2] ndash zprostredkovava pripojenı FTP serveru jako lokalnıho adresare
bull WikipediaFS [9] ndash prace s clanky z portalu zalozenych na systemu Wiki jakos beznymi soubory
bull BloggerFS [1] ndash manipulace s prıspevky na blogovacım portalu Bloggercom veforme beznych souboru
233 Zpusob pouzitı
Pouzitı knihovny FUSE spocıva ve vlastnı implementaci obsluznych funkcı (tzv han-dlers) pro jednotlive ukony ktere lze se soubory provadet a jejiz nazvy odpovıdajı sys-temovym volanım FUSE definuje pro manipulaci se soubory az 39 (od verze knihovny
12
26) obsluznych funkcı avsak pro zakladnı pouzitı nenı nutne implementovat vsechnyJednoduchy avsak jiz funkcnı souborovy system lze sestavit pomocı getattr openopendir a read Ukazka implementace tohoto FS je v jazyce C na obrazcıch 22 a 23Deklarace vsech obsluznych funkcı lze nalezt v hlavickovem souboru fuseh ktery byva
include ltstdiohgt
include ltfusehgt
static int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
int main(int argc char argv[])
struct fuse_operations fsOperations
fsOperationsgetattr = fuse_getattr
fsOperationsopen = fuse_open
fsOperationsread = fuse_read
fsOperationsreaddir = fuse_readdir
return fuse_main(argc argv ampfsOperations NULL)
Obrazek 22 Ukazka pouzitı knihovny FUSE
umısten v usrincludefuse (tato cesta se ale muze mezi linuxovymi distribucemilisit) Soubory zde nejsou identifikovany pomocı inode jak je zvykem ve skutecnych FSale pouze pomocı cesty kterou lze nalezt ve vetsine obsluznych funkcı na mıste prvnıhoparametru Pokud byla operace provedena korektne obsluzna funkce by mela ve vetsineprıpadu vracet cıslo 0 Vsechny druhy chyb jsou indikovany zapornou hodnotou kon-stant definujıcıch druh chyby Jejich soupis se naleza v hlavickovem souboru errorh
(umıstenı souboru se muze lisit)
24 Zabezpecenı citlivych dat
Potreba chranit data pred cizımi osobami vznikla uz v davnych dobach jeste pred rozvo-jem vypocetnı techniky Jednım z odvetvı ktere se ochranou dat zabyva je kryptografieData lze chranit vıce prostredky a jejich sifrovanı je pouze jednou z aplikacı Nasledujıcıcast poskytuje prehled o dalsıch zpusobech ochrany dat [15]
241 Steganografie
Steganografie spocıva ve skrytı zpravy Zasadnım rozdılem oproti kryptografii je prede-vsım snaha o skrytı samotne existence zpravy V minulosti se vyuzıvaly tzv neviditelne
13
Pro ukazku nasleduje prıklad implementace operace read
int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
char msg[] = Pokusny text pro ctenı
int msgLength = strlen(msg)
if(strcmp(path example) == 0)
memcpy(buffer msg msgLength)
return msgLength
else if(strcmp(path null) == 0)
return 0
else
return -ENOENT
Obrazek 23 Ukazka implementace operace read
inkousty jimiz byla napsana zprava na papır Jejı prıjemce pak cely list nahral a ter-mochemickou reakcı se text objevil Dokonce bylo pouzito i hlavy otroka kdy mu bylanejdrıve oholena hlava a pote na ni vytetovana zprava Az mu vlasy zpet dorostly bylvyslan na cestu pres nepratelske uzemı a prıjemce mu ji opet oholil aby si zpravu mohlprecıst Tento zpusob samozrejme nebyl vzdy vhodny a proto se lide snazili vymysletdalsı zpusoby skrytı dat Pri pouzitı psaneho textu (rukou ci na psacım stroji) jako nos-neho materialu se da vyuzıt mechanismu psacıho stroje Do volneho prostoru mezi radkyse skryvaly zpravy psanım bez barevne pasky takze v papıru zustal pouze otlak pısmenNebo se tajna zprava mnohonasobne zmensila aby pri letmem pohledu pripomınala jed-nolity cerny bod Ten se pak vlepil do tisteneho textu jako tecka na konci vety tzvmikrotecky
242 Digitalnı steganografie
I v digitalnı dobe stale existujı postupy jak skryvat data Naprıklad u fotografiı mu-zeme dobre vyuzıt nedokonalosti lidskeho oka Pokud zmenıme jen nepatrne barevnyodstın v nektere casti fotografie nenı tato uprava na pohled zretelna ndash nemusı se jednato anomalii ale ucel Stejny princip lze aplikovat i na zvuky Hudba se po digitalizacicasto komprimuje Podle druhu pouziteho algoritmu muze dochazet ke ztrate hudebnıinformace Pokud zmenıme nejnizsı bit u cısla reprezentujıcıho frekvenci stejne jakou obrazku nebude tato zmena pri poslechu patrna Tento typ techniky se oznacuje jakozmena hodnoty LSB (least significant bit) Pokud nekdo tento soubor jakkoliv bezneupravı (orıznutı obrazku zmena bitrate zvuku) znamena to ve vetsine prıpadu po-skozenı nebo uplnou ztratu skryte informace U pruznych disku (disket) umı nektere
14
programy zamerne oznacit sektory na jejım magnetickem povrchu jako poskozene Tımsice dojde k castecnemu snızenı kapacity pro bezne soubory ale nehrozı zde nebezpecıprepisu ztracenych dat pri bezne praci Pokud uzivatel chce zapsat soubor na disketuoperacnı system pro nej vyuzije pouze volne sektory ktere jsou v poradku a chybnevzdy preskocı Skrytı dat nemusı ale nutne znamenat rozpoznatelnou zmenu vystupuObrazovy format BMP svou stavbou umoznuje doslova neviditelne skrytı (omezeneho)mnozstvı dat Jedinym prıpadnym vodıtkem k odhalenı je zvyseny objem dat
243 Kryptografie
Kryptografie jinymi slovy sifrovanı je postup transformace originalnı zpravy do podobyktera je v idealnım prıpade citelna pouze se znalostı tzv klıce Prı pouzitı stejne vstupnızpravy sifrovacıho algoritmu ale jineho klıce zıskame odlisny vystup Mıra zabezpecenızpravy zavisı na zvolenem algoritmu a sifrovacım klıci Proto pri chybnem pouzitı nekte-reho z bezne pouzıvanych algoritmu (napr RSA) a klıce (pouzitı retezce
rdquohesloldquo) nemusı
byt pro utocnıka velkou prekazkou zjistit obsah puvodnı zpravySifrovacı algoritmy rozdelujeme do dvou zakladnıch skupin podle typu klıce
bull Symetricka kryptografie ndash pouzıva pro sifrovanı i desifrovanı stejny klıc kteryby mel zustat v tajnosti Patrı zde naprıklad algoritmy DES [14] TwoFish [8] av dnesnı dobe v teto kategorii nejpouzıvanejsı AES [10]
bull Asymetricka kryptografie ndash vyuzıva dva typy klıcu verejny a privatnı Verejnyklıc ktery slouzı pro desifrovanı (uz podle nazvu) je mozne jej zaslat prıjemncisifrovane zpravy beznou nezabezpecenou elektronickou postou nebo jej zverejnitna svych webovych strankach Oproti tomu privatnı klıc musı zustat v tajnostiu sveho majitele Zastupcem teto kategorie je algoritmus RSA [5]
Sifrovana komunikace pak probıha podle nasledujıcıho scenare pripomınajıcıho kla-sickou postovnı korespondenci
1 Odesilatel (osoba A) si zajistı verejny klıc prıjemce (osoba B) naprıklad jejımstazenım z osobnıho blogu osoby B
2 Osoba A zasifruje svou zpravu pomocı verejneho klıce B a odesle ji jako beznye-mail
3 Osoba B zpravu desifruje pomocı sveho privatnıho klıce a zıska tak puvodnıobsah
Oba typy klıcu se generujı vzdy jako par Pro jejich vytvorenı je nutne dodat radunahodnych cısel Jednou z pouzitych metod jejich generovanı je prectenı hodnotynahodne adresy v pameti nebo sledovanı pozice kurzoru mysi uzivatele
15
Kapitola 3
Analyza
V nasledujıcı casti budou popsany pozadavky na navrhovany souborovy system a prehledzakladnıch problemu ktere bude nutne behem navrhu resit
31 Pozadavky na souborovy system
Pro uceleny pohled a dalsı postup je vhodne nejprve specifikovat pozadavky na vytvarenysystem Jsou jimi predevsım
bull Ochrana obsahu FS heslem ndash skryty FS by mel idealne tajit nejen svou vlastnıexistenci ale predevsım by nemel dovolit uzivatelum neznajıcıch klıc prıstupovatk jeho obsahu
bull Existence vıce FS nad jednım ulozistem ndash tento pozadavek muze plnit hned dvefunkce V prve rade jde o castecne nezavisle varianty FS pro organizaci obsahunicmene dalsım dusledkem muze byt jeho vlastnı ochrana Pokud bychom uvazo-vali scenar kdy osoba-utocnık pod pohruzkou donutı svou obetrsquo k vyzrazenı heslado skryteho FS obetrsquo ma sanci sdelit jine nez skutecne heslo a tım dojde ke zprı-stupnenı odlisneho obsahu (pochopitelne za predpokladu ze byl drıve vytvoren)
bull Nezavislost na uloznem mediu ndash knihovna by mela poskytovat dostatecne obecnerozhranı ktere by bylo mozne vyuzıt pro implementaci ruznych typu ulozistrsquo beznutnosti hlubokych zasahu do knihovny samotne Prıkladem typu ulozistrsquo mohoubyt soubory MP3 JPG webova sluzba
bull Alespon castecna odolnost proti chybejıcım fragmentum ndash v prıpade ze bude ulo-zistem naprıklad adresar s MP3 soubory lze v prubehu casu predpokladat jeho mo-difikace ruzne zavazneho charaketru (platı pochopitelne nejen pro soubory MP3)Mohou jimi byt zmena umıstenı souboru v adresarıch i kompletnı odstranenı celehoalba Tyto zasahy ruznou merou ovlivnujı spolehlivost skryteho FS a bude nutneje v navrhu zohlednit
16
bull Jednouzivatelsky rezim ndash skryty FS ze sve podstaty nenı urcen pro kazdeho uziva-tele ktery ma prıstup k ulozisti Predpokladem je uzky okruh osob ktere budouznat heslo pro prıstup
Vyvoj aplikace splnujıcı vyse uvedena kriteria se muze ubırat dvema smery V prve radelze vytvorit tzv aplikaci na mıru To znamena kompletnı prizpusobenı vyvoje zakom-ponovanı optimalizacı vhodnych pro specificke pouzitı atd Dalsım smerem je knihovnaposkytujıcı obecne rozhranı v takove forme aby bylo mozne vyhovet pozadavkum nasystem Vyhodou muze byt dalsı samostatne pouzitı konkretnıch modulu bez nutnostihlubokych zasahu do puvodnıch zdrojovych kodu Konecne rozhodnutı pro perspektiv-nejsı pouzitı tak padlo na variantu vytvorenı knihovny ktera bude schopna vytvorit aspravovat skryty souborovy system
17
Kapitola 4
Navrh souboroveho systemu
Kapitola navrhu popisuje obecne postupy resenı problemu ktere jsou spojeny s nasled-nym vyvojem skryteho souboroveho systemu Jejich soupis je uveden v kapitole 3 Tyjsou dale detailneji rozvedeny v kapitole 5 zabyvajıcı se implementacı
41 Uloziste
Cılem prace je zajistit ukladanı souboru do jinych Umıstenı techto jinych souboru budedale oznacovano jako uloziste
42 Vymezenı termınu
Pro ujasnenı vyznamu nekterych termınu dale obsazenych v teto prace nasleduje jejichprehled s podrobnejsım vysvetlenım
bull hash ndash jednoznacna identifikace prave jedne entitiy v ulozisti
bull fragment ndash souvisı se skrytym souborem a jde o poradove cıslo useku dat kterepredstavuje cast obsahu skryteho souboru Slozenım vsech fragmentu dostanemekompletnı obsah souboru proto jeho hodnota v ramci skryteho FS musı byt jedi-necna
bull blok ndash souvisı s entitou v ulozisti jedna se o poradove cıslo dılcı casti obsahufyzickeho souboru Tento identifikator musı byt unikatnı v ramci hash
bull vnoreny FS ndash samostatny prostor pro skryvanı souboru v ramci stejneho ulozisteImplementace systemu je muze rozlisovat naprıklad pomocı zadaneho hesla
43 Zpusob organizace souboru
Jak jiz bylo v zmıneno v teoreticke casti 221 nejpouzıvanejsımi druhy organizace obsahusouboru je fragmentace a spojita alokace Uloziste je jen obecne rozhranı a muze mıt
18
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
Skryty souborovy system pro GNULinux
ProhlasenıProhlasuji ze jsem tuto bakalarskou praci vypracoval samostatne pod vedenım panaIng Ondreje Lengala Uvedl jsem vsechny literarnı prameny a publikace ze kterychjsem cerpal
Martin Pavlasek16 kvetna 2012
PodekovanıDekuji Ing Ondreji Lengalovi za vedenı pomoc lidsky prıstup a predevsım podnetnekonzultace pri tvorbe teto prace
ccopy Martin Pavlasek 2012Tato prace vznikla jako skolnı dılo na Vysokem ucenı technickem v Brne Fakulte in-formacnıch technologiı Prace je chranena autorskym zakonem a jejı uzitı bez udelenıopravnenı autorem je nezakonne s vyjimkou zakonem definovanych prıpadu
Obsah
1 Uvod 5
2 Teoreticka cast 721 Souborove systemy 822 Koncepty souborovych systemu 8
221 Datove bloky a metody jejich alokace 8222 Reprezentace souboru 9223 Reprezentace adresaru 9224 Zurnalovanı 10
23 FUSE 10231 Struktura 11232 Prıklady souborovych systemu vyuzıvajıcı FUSE 12233 Zpusob pouzitı 12
24 Zabezpecenı citlivych dat 13241 Steganografie 13242 Digitalnı steganografie 14243 Kryptografie 15
3 Analyza 1631 Pozadavky na souborovy system 16
4 Navrh souboroveho systemu 1841 Uloziste 1842 Vymezenı termınu 1843 Zpusob organizace souboru 1844 Organizace metadat 19
441 Struktura souboru 19442 Obsah souboru 19443 Ulozenı metadat 20
45 Varianty alokatoru 2046 Programovacı jazyk 2147 Diagram trıd 2248 Odolnost vuci chybejıcım blokum 22
1
49 Popis behu programu 22410 Alokator bloku 23
4101 Atributy alokace 234102 Typy alokatoru 23
5 Implementace 2451 Indexace uloziste 2452 Kontext souboru 2553 Alokator 2654 Obecny format bloku 27
541 Identifikacnı byte 2755 Format ulozenı bloku typu DataBlock 2856 Format ulozenı bloku typu SuperBlock 2857 Format ulozenı bloku typu Chain 2958 Format serializovane entity 2959 Organizace metadat 29
591 Tabulka struktury 29592 Tabulka obsahu 30593 Tabulka fyzickych souboru 30594 Superblok 31
510 Operace nad soubory 325101 Ctenı 325102 Zapis 325103 Vytvorenı bezneho souboru 335104 Vytvorenı adresare 335105 Ctenı obsahu adresare 345106 Prejmenovanı presun souboru 345107 Odstranenı souboru 345108 Odstranenı adresare 345109 Odhad volneho mısta 34
511 Zname chyby 35
6 Experimentalnı overenı 3661 Metoda merenı 3662 Podmınky merenı 3663 Prubeh a vysledky experimentu 3664 Shrnutı 37
7 Zaver 3971 Dalsı rozsırenı prace 39
Literatura 41
2
Prılohy 43Seznam prıloh 44
A Obsah CD 45
3
Seznam obrazku
21 Prubeh zpracovanı pozadavku ve FUSE 1222 Ukazka pouzitı knihovny FUSE 1323 Ukazka implementace operace read 14
41 Ukazka obsahu tabulky uchovavajıcı obsah souboru 2042 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru 21
51 Struktura souboru formatu MP3 2552 Struktura obecneho formatu bloku a delky jednotlivych castı 2753 Struktura obsahu bloku se superblokem 2854 Struktura obsahu bloku se serializovanymi entitami 29
61 Prehled namerenych prenosovych rychlostı 38
4
Kapitola 1
Uvod
Dıky masovemu rozsırenı vypocetnı techniky a internetu se dnesnı doba casto oznacujejako doba informacnı Celosvetovy objem informacı neustale rychle roste [17] prıklademmohou byt vedecke clanky kterych je behem jedineho dne verejne publikovano mezisesti a sedmi tisıci Nenı to vsak jediny druh informacı Patrı zde mnoho dalsıch druhuvcetne napr fotografiı z rodinnych oslav nebo soukrome korespondence V techto prı-padech (opomineme-li typicky socialnı sıte) muze byt mnozstvı osob kterym jsou tytoinformace urceny z ruznych duvodu omezeno (rodina pratele ) Lide informace castouchovavajı v pocıtacıch na svych pevnych discıch opatrnejsı z nich je chranı hesly Lzetak omezit prıstup neopravenym osobam a chranit tak data pred prıpadnym zneuzitımPouzitı sifrovanı pro ochranu dat ma vsak omezenı v tom ze skryva pouze obsah data nikoli jiz jejich prıtomnost Potencialnımu utocnıkovi stacı mnohdy jen zjistit hesloatrsquo uz za pomoci utoku hrubou silou slovnıkoveho utoku socialnıho inzenyrstvı nebov extremnım prıpade mucenım Prave prıtomnost sifrovanych dat muze v mnoha prıpa-dech pritahnout nezadoucı pozornost proto je casto vhodne skryt samotnou prıtomnostcitlivych dat cımz se zabyva steganografie
Soucasne nastroje pro digitalnı steganografii jsou casto velmi omezene co se tycehlavne pouziteho steganografickeho prıstupu Snad jedinou znamou vyjimkou je pro-gram TrueCrypt [7] jenz umoznuje v jiz existujıcım sifrovanem oddılu vytvorit dalsımibeznymi motodami neodhalitelny pododdıl ktery lze pri znalosti sifrovacıho klıce pripojitjako bezny souborovy system
Cılem teto prace je navrhnout souborovy system ktery bude umoznovat skryvanısouboru do jinych a za pouzitı technologie FUSE jej implementovat Jejı teoreticka castposkytuje nahled do souvisejıcıch oblastı a naleza se v nı take prehled obecnych konceptupouzıvanych pri implementaci souborovych systemu Dale jsou popsany mozne zpusobyskryvanı dat a v poslednı casti se okrajove venuje kryptografii
Kapitola 3 se zabyva analyzou a spolu s navrhem v kapitole 4 uz popisujı samotnoutvorbu souboroveho systemu umoznujıcı skryvanı dat do ID3 tagu ktere jsou soucastıhudebnıho formatu MP3 Kapitola 5 se venuje resenım konkretnıch problemu v jazyceC++ a v predposlednı 6 casti cele prace jsou zdokumentovany vysledky experimen-talnıho overenı vlastnostı vytvoreneho souboroveho systemu Kapitola 7 praci shrnuje a
5
diskutuje dalsı moznosti rozsırenı
6
Kapitola 2
Teoreticka cast
Tato kapitola se zameruje na prehled souborovych systemu (v anglictine file system dalejen FS) jejich principsect a vyuzitı
Operacnı system GNULinux je inspirovan OX UNIX a jednou z vlastnostı kterousi zachoval je rozdelenı souboru na zakladnıch 6 typu [16]
1 obcejny soubor ndash patrı zde textove spustitelne binarnı soubory obrazky ve for-matu JPEG
2 adresar ndash umoznuje organizovat soubory do stromove struktury
3 symbolicky odkaz ndash zastupce za jiny soubor cıl odkazu je urcen pomocı cestyadresarove struktury je tak mozne vytvaret odkazy i mimo aktualnı svazek
4 specialnı blokovy soubor ndash podstatnou vlastnostı je moznost provadenı zaklad-nıch operacı pomocı adresace bloku Typickym predstavitelem jsou oddıly pevnychdisku
5 specialnı znakovy soubor ndash ctenı a zapis se provadı formou proudu dat po-uzıva se pro koumunikaci s nekterymi periferiemi naprıklad zarızenı pripojenychk seriovemu portu
6 pojmenovana roura ndash je jednım z prostredku komunikace mezi procesy a umoz-nuje manipulaci se standardnım vstupem a vystupem jako operace ctenı a zapissouboru V systemu GNULinux jej lze vytvorit pomocı prıkazu mkfifo
Pro jednoznacnou identifikaci jednoho souboru v ramci souboroveho systemu se pouzıvatermın inode
V systemu Linux se vyuzıvajı systemova volanı i k manipulaci se soubory Zakladnıoperace jsou provadeny pomocı nasledujıcıch volanı (pouze prehled)
bull open - otevrenı souboru pro dalsı praci s jeho obsahem
bull read - ctenı obsahu souboru
7
bull write - zapis do souboru
bull mknod - vytvorenı inode (pouzıvane pro adresare i specialnı soubory)
bull readdir - ctenı obsahu adresare
bull link - vytvorenı noveho odkazu na iuzel
bull unlink - zrusenı odkazu na iuzel souboru
bull chmod - zmena prıstupovych prav k souboru
bull chown - zmena vlastnıka souboru
21 Souborove systemy
Souborove systemy jsou prostredkem ktery umoznuje abstrakci dat formou souborufyzicky zapsanych v uloznych zarızenıch Temi byvajı nejcasteji pevne disky USB flashdisky opticka a paskova zarızenı Jejich obsah je smesicı jednicek a nul kterym davavyznam teprve az souborovy system Podle zpusobu uzitı je muzeme delit do nekolikazakladnıch kategoriı
bull bezne ndash vhodne pro obecne vyuzitı prıkladem jsou ext4 [11] NTFS BTRFS adalsı
bull sıtrsquoove (distribuovane) ndash ulozne zarızenı se fyzicky nenachazı v pocıtaci ale jedostupne skrze sıtrsquoove rozhranı Typickym predstavitelem teto skupiny je NFS [4]
bull specializovane ndash naprıklad pri zalohovanı velkych diskovych polı se casto vyuzı-vajı paskove mechaniky LTO pro ktere byl vyvinut soucasny LTFS [3]
22 Koncepty souborovych systemu
Souborove systemy majı v zakladu spolecny ucel uchovavat a organizovat data Existujerada systemu ruznych vlastnostı ktere vsak vyuzıvajı stejne principy protoze se v pru-behu casu ukazaly jako nejvhodnejsı pro dany ucel V teto casti budou tyto prıstupydetailneji popsany jejich detailnejsı popis lze nalezt v [18]
221 Datove bloky a metody jejich alokace
Datovym blokem oznacujeme nejmensı objem dat se kterym je souborovy system scho-pen pracovat V ruznych systemech je zazity termın alokacnı jednotka coz je synony-mum a s nı souvisı velikost alokacnı jednotky Pokud provedeme zapis souboru o velikostinaprıklad 1 kB pri velikosti bloku 4 kB budou na disk zapsany 4 kB dat i kdyz je vyuzityobsah bloku mensı Tento prıstup je jednoduchy pro organizaci dat ale zpusobuje ztratukapacity disku protoze poslednı ze sekvence bloku nalezıcıch danemu souboru s velkou
8
pravdepodobnostı nebude obsazen az do sveho plneho objemu a je tak pro male souboryneefektivnı
Prıstupu pro alokaci bloku pro zapis noveho souboru existuje nekolik V souborovychsystemech extended file system (ext234) tuto praci obstarava tzv block allocator Tenma prehled o aktualne obsazenych blocıch a ma za ukol vyhledat vhodne volne mısto Dodoby zverejnenı FS ext4 pracoval vzdy nad jednım konkretnım souborem V ext4 ale bylprepracovan protoze tento system vyuzıva tzv extenty coz vyzaduje vetsı kontrolu nadrozmıstenım bloku na disku Extentem oznacujeme (pokud mozno) souvislou sekvencibloku tvorıcı jeden soubor ktera je urcena pocatecnım blokem a delkou Odtud plynezasadnı rozdıl bezne organizace (jejımz prıkladem je souborovy system FAT1) ndash velikostbloku Extenty totiz majı promenlivou delku v zavislosti na obsahu Aby bloky mohlybyt ukladany souvisle vyuzıva se odlozeneho zapisu Pozadavky na zapis bloku nejsouobslouzeny okamzite ale az je jich dostatecne mnozstvı Teprve pak se provadı zapis jakojedina operace Vyuzıvanım extentu odpada nutnost velke rezie pri ukladanı objemnychsouboru Souvisle ctenı je vzhledem k sekvencnı povaze stale prevazne rotacnıch fyzickychmediı vyhodne protoze tak umoznuje maximalne vyuzıt jejich vykon
222 Reprezentace souboru
Soubor je tvoren nazvem atributy a obsahem Nazvu se take nekdy rıka symbolicke jmenoa to proto ze z pohledu souborovych systemu se jedna jen o jiny zpusob identifikaceJednoznacnym identifikatorem je v systemu Linux tzv inode Tento termın je odvozenze slov index node a jedna se o poradove cıslo souboru ve svazku
Nazev souboru je retezec znaku a jeho delka byla napr u souborovych systemuFAT1632 pevna ndash 8 znaku (a to jeste ne vsechny ASCII znaky) pro samotny nazevsouboru a 3 znaky pro prıponu [13] Tento format jmen se uznacuje jako short filenamenebo format 83 Casem se tento prıstup ukazal jako nevyhovujıcı a proto vznikla nad-stavba LFN (long filenames) ktera umoznovala v techto systemech souboru (v dnesnıdobe uz zastaralych) pouzıvat jmena az 255 znaku dlouhe Tato delka je typicka prosystemy ext234 UDF XFS a mnoho dalsıch Nektere systemy majı tuto hranici posu-nutou jeste mnohem dale ndash naprıklad u ReFS je pro nazev souboru vyhrazeno az 32 kBV nazvech souboru take byvajı omezenı na pouzitelne znaky nebo konkretnı retezcektere majı svuj specialnı vyznam Typicky se jedna o retezce
rdquoldquo ci
rdquoldquo Z implementac-
nıch duvodu nebyva povolen znak 0 (ASCII hodnota 0x00)
223 Reprezentace adresaru
Adresar je samostatny typ souboru a jeho obsahem je mnozina souboru Reprezentaciteto mnoziny lze implementovat ruznymi zpusoby z cehoz plynou i prıpadna omezenı namaximalnı pocet souboru obsazenych v jedinem adresari
Souborovy system ext2 ma v kazdem inode rezervovano 12 mıst pro ukazatele nabloky (tzv prıme adresovanı) Pokud je obsah souboru (nebo pocet souboru v adresari)
1File Allocation Table
9
bull Writeback mode ndash provadı se zalohovanı struktury souboroveho systemu takzepri poruse sice nedojde ke ztrate metadat souboroveho systemu ale obsah zapi-sovaneho bloku nemusı byt korektnı To je zpusobeno poradım operacı zapis dozurnalu zapis metadat zapis datoveho bloku
bull Ordered mode ndash podobne jako writeback mode zalohujı se pouze metadataavsak zde je rozdıl v poradı provadenych operacı Nejdrıve se zapisujı data a azpote metadata do zurnalu
bull Data mode ndash nejvyssı uroven ochrany zalohujı se metadata i datove bloky To jeale vyvazeno nizsım vykonem protoze jsou veskera data ukladana dvakrat nejdrıvedo zurnalu a pote na skutecnou adresu
maly vyuzıvajı se prımo tato mısta pro ulozenı dat Delsı obsah se uklada do samostat-nych skupin bloku (tzv neprıme adresovanı prvnı az tretı urovne) ktere jsou adresovanyz mıst prımeho adresovanı
BFS (Berkley Fast Filesystem) pracuje s promennou delkou adresaru trochu jinymzpusobem Pri zakladanı adresare se alokuje prostor nejen pro prave zapisovany obsahale i rezervuje prostor pro prıpadne rozsırenı obsahu Soucastı metadat adresare jsoupro tyto ucely vyhrazeny dva ukazatele Prvnı smeruje na poslednı obsazeny zaznam adruhy na konec celkove alokovane oblasti (obsazena + rezervovana oblast)
224 Zurnalovanı
Pro zabezpecenı konzistence ukladanych dat v prıpade vypadku napajenı byla vyvinutatechnika zurnalovanı Jde o techniku kdy se na disk zapisujı krome uzivatelskych dati dalsı zaznamy ktere umoznujı v prıpade potreby obnovit konkretnı obsah datovehobloku a zajistit tak konzistenci bloku Tento specialnı zaznam se nazyva zurnal a jeto klasicky soubor ktery nenı beznemu uzivateli prıstupny Zurnalovanı lze realizovatpomocı nekolika prıstupu z nichz se vyuzıva predevsım
23 FUSE
FUSE [19] filesystem in userspace je technologie umoznujıcı neprivilegiovanym uzivate-lum pripojovanı a odpojovanı specialnıch souborovych systemu Projekt byl puvodnevyvıjen pro system GNULinux avsak v dnesnı dobe je k dispozici i pro platformyFreeBSD Mac OS X OpenSolaris a rada dalsıch Pri beznem pripojenı svazku pomocımount je totiz nutne mıt opravnenı spravce systemu (root) Implementace FUSE je bez-nym programem ktery je spousten pod aktualne prihlasenym uzivatelem (samozrejmepokud nenı modifikovan prıkazy chmod ci chown) Z tohoto faktu vyplyvajı i dalsı vlast-nosti ze kterych zminme odstınenı programatora od nutnosti znat a dodrzovat pravidlapro tvorbu modulu jadra operacnıho systemu Bezne FS totiz byvajı do jadra zaclenenyprave touto formou
10
231 Struktura
FUSE se sklada ze trı vzajemne komunikujıcıch castı kterymi jsou
bull modul pro jadro ndash drıvejsı verze modulu FUSE byly sıreny samostatne avsak odverze jadra Linuxu 2614 je jiz zaclenen do hlavnı vyvojove vetve nenı protozpravidla nutne jej dodatecne zavadet pomocı modprobe
bull rozhranı knihovny FUSE ndash je nativne tvoreno nekolika hlavickovymi soubory v ja-zyce C poskytuje deklarace metod pro implementaci rady systemovych volanı
bull specialnı soubor devfuse ndash zprostredkovava koumunikaci mezi modulem v jadrea rozhranım knihovny Pri pripojovanı souboroveho systemu vyuzıvajıcı FUSE seprovede otevrenı tohoto specialnıho souboru a nasledna komunikace probıha uz jenskrze takto zıskany popisovac (file descriptor)
Modul v jadre je prave jeden ale rozhranı knihovny je implementovano v rade programo-vacıch jazyku Pro strucny prehled jimi jsou C C++ Java C Haskell Python PerlRuby PHP ci Lua Uplny vypis je dostupny na oficialnıch webovych strankach projektuFUSE Nasleduje obrazek 21 se znaroznenım prubehu systemoveho volanı readdiravsak princip komunikace je spolecny pro vsechna podporovana systemova volanı
11
Obrazek 21 Prubeh zpracovanı pozadavku ve FUSE Obrazek byl prevzat z [19]
Je zde videt prenos pozadavku na zobrazenı obsahu adresare prochazejıcı uzivatel-skym prostorem (userspace) skrze obecnou vrstvu VFS (Virtual File System) a nasled-neho predanı modulu FUSE v jadru systemu To jej dale distribuuje zpet do uzivatel-skeho prostoru kde se nachazı implementace rozhranı FUSE (examplehello) Volanıse vyhodnotı vykonanım prıslusne metody a vysledek operace putuje stejnou cestou zpet
232 Prıklady souborovych systemu vyuzıvajıcı FUSE
Technologie FUSE se drzı hesla systemu UNIXrdquovse je souborldquo a nasla si tak sve prız-
nivce Svedcı o tom mnozstvı vytvorenych souborovych systemu ktere tuto technologiivyuzıvajı Mezi ty znamejsı patrı
bull sshfs [6] ndash umoznuje pripojenı vzdaleneho adresare pomocı protokolu SSH
bull CurlFtpFS [2] ndash zprostredkovava pripojenı FTP serveru jako lokalnıho adresare
bull WikipediaFS [9] ndash prace s clanky z portalu zalozenych na systemu Wiki jakos beznymi soubory
bull BloggerFS [1] ndash manipulace s prıspevky na blogovacım portalu Bloggercom veforme beznych souboru
233 Zpusob pouzitı
Pouzitı knihovny FUSE spocıva ve vlastnı implementaci obsluznych funkcı (tzv han-dlers) pro jednotlive ukony ktere lze se soubory provadet a jejiz nazvy odpovıdajı sys-temovym volanım FUSE definuje pro manipulaci se soubory az 39 (od verze knihovny
12
26) obsluznych funkcı avsak pro zakladnı pouzitı nenı nutne implementovat vsechnyJednoduchy avsak jiz funkcnı souborovy system lze sestavit pomocı getattr openopendir a read Ukazka implementace tohoto FS je v jazyce C na obrazcıch 22 a 23Deklarace vsech obsluznych funkcı lze nalezt v hlavickovem souboru fuseh ktery byva
include ltstdiohgt
include ltfusehgt
static int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
int main(int argc char argv[])
struct fuse_operations fsOperations
fsOperationsgetattr = fuse_getattr
fsOperationsopen = fuse_open
fsOperationsread = fuse_read
fsOperationsreaddir = fuse_readdir
return fuse_main(argc argv ampfsOperations NULL)
Obrazek 22 Ukazka pouzitı knihovny FUSE
umısten v usrincludefuse (tato cesta se ale muze mezi linuxovymi distribucemilisit) Soubory zde nejsou identifikovany pomocı inode jak je zvykem ve skutecnych FSale pouze pomocı cesty kterou lze nalezt ve vetsine obsluznych funkcı na mıste prvnıhoparametru Pokud byla operace provedena korektne obsluzna funkce by mela ve vetsineprıpadu vracet cıslo 0 Vsechny druhy chyb jsou indikovany zapornou hodnotou kon-stant definujıcıch druh chyby Jejich soupis se naleza v hlavickovem souboru errorh
(umıstenı souboru se muze lisit)
24 Zabezpecenı citlivych dat
Potreba chranit data pred cizımi osobami vznikla uz v davnych dobach jeste pred rozvo-jem vypocetnı techniky Jednım z odvetvı ktere se ochranou dat zabyva je kryptografieData lze chranit vıce prostredky a jejich sifrovanı je pouze jednou z aplikacı Nasledujıcıcast poskytuje prehled o dalsıch zpusobech ochrany dat [15]
241 Steganografie
Steganografie spocıva ve skrytı zpravy Zasadnım rozdılem oproti kryptografii je prede-vsım snaha o skrytı samotne existence zpravy V minulosti se vyuzıvaly tzv neviditelne
13
Pro ukazku nasleduje prıklad implementace operace read
int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
char msg[] = Pokusny text pro ctenı
int msgLength = strlen(msg)
if(strcmp(path example) == 0)
memcpy(buffer msg msgLength)
return msgLength
else if(strcmp(path null) == 0)
return 0
else
return -ENOENT
Obrazek 23 Ukazka implementace operace read
inkousty jimiz byla napsana zprava na papır Jejı prıjemce pak cely list nahral a ter-mochemickou reakcı se text objevil Dokonce bylo pouzito i hlavy otroka kdy mu bylanejdrıve oholena hlava a pote na ni vytetovana zprava Az mu vlasy zpet dorostly bylvyslan na cestu pres nepratelske uzemı a prıjemce mu ji opet oholil aby si zpravu mohlprecıst Tento zpusob samozrejme nebyl vzdy vhodny a proto se lide snazili vymysletdalsı zpusoby skrytı dat Pri pouzitı psaneho textu (rukou ci na psacım stroji) jako nos-neho materialu se da vyuzıt mechanismu psacıho stroje Do volneho prostoru mezi radkyse skryvaly zpravy psanım bez barevne pasky takze v papıru zustal pouze otlak pısmenNebo se tajna zprava mnohonasobne zmensila aby pri letmem pohledu pripomınala jed-nolity cerny bod Ten se pak vlepil do tisteneho textu jako tecka na konci vety tzvmikrotecky
242 Digitalnı steganografie
I v digitalnı dobe stale existujı postupy jak skryvat data Naprıklad u fotografiı mu-zeme dobre vyuzıt nedokonalosti lidskeho oka Pokud zmenıme jen nepatrne barevnyodstın v nektere casti fotografie nenı tato uprava na pohled zretelna ndash nemusı se jednato anomalii ale ucel Stejny princip lze aplikovat i na zvuky Hudba se po digitalizacicasto komprimuje Podle druhu pouziteho algoritmu muze dochazet ke ztrate hudebnıinformace Pokud zmenıme nejnizsı bit u cısla reprezentujıcıho frekvenci stejne jakou obrazku nebude tato zmena pri poslechu patrna Tento typ techniky se oznacuje jakozmena hodnoty LSB (least significant bit) Pokud nekdo tento soubor jakkoliv bezneupravı (orıznutı obrazku zmena bitrate zvuku) znamena to ve vetsine prıpadu po-skozenı nebo uplnou ztratu skryte informace U pruznych disku (disket) umı nektere
14
programy zamerne oznacit sektory na jejım magnetickem povrchu jako poskozene Tımsice dojde k castecnemu snızenı kapacity pro bezne soubory ale nehrozı zde nebezpecıprepisu ztracenych dat pri bezne praci Pokud uzivatel chce zapsat soubor na disketuoperacnı system pro nej vyuzije pouze volne sektory ktere jsou v poradku a chybnevzdy preskocı Skrytı dat nemusı ale nutne znamenat rozpoznatelnou zmenu vystupuObrazovy format BMP svou stavbou umoznuje doslova neviditelne skrytı (omezeneho)mnozstvı dat Jedinym prıpadnym vodıtkem k odhalenı je zvyseny objem dat
243 Kryptografie
Kryptografie jinymi slovy sifrovanı je postup transformace originalnı zpravy do podobyktera je v idealnım prıpade citelna pouze se znalostı tzv klıce Prı pouzitı stejne vstupnızpravy sifrovacıho algoritmu ale jineho klıce zıskame odlisny vystup Mıra zabezpecenızpravy zavisı na zvolenem algoritmu a sifrovacım klıci Proto pri chybnem pouzitı nekte-reho z bezne pouzıvanych algoritmu (napr RSA) a klıce (pouzitı retezce
rdquohesloldquo) nemusı
byt pro utocnıka velkou prekazkou zjistit obsah puvodnı zpravySifrovacı algoritmy rozdelujeme do dvou zakladnıch skupin podle typu klıce
bull Symetricka kryptografie ndash pouzıva pro sifrovanı i desifrovanı stejny klıc kteryby mel zustat v tajnosti Patrı zde naprıklad algoritmy DES [14] TwoFish [8] av dnesnı dobe v teto kategorii nejpouzıvanejsı AES [10]
bull Asymetricka kryptografie ndash vyuzıva dva typy klıcu verejny a privatnı Verejnyklıc ktery slouzı pro desifrovanı (uz podle nazvu) je mozne jej zaslat prıjemncisifrovane zpravy beznou nezabezpecenou elektronickou postou nebo jej zverejnitna svych webovych strankach Oproti tomu privatnı klıc musı zustat v tajnostiu sveho majitele Zastupcem teto kategorie je algoritmus RSA [5]
Sifrovana komunikace pak probıha podle nasledujıcıho scenare pripomınajıcıho kla-sickou postovnı korespondenci
1 Odesilatel (osoba A) si zajistı verejny klıc prıjemce (osoba B) naprıklad jejımstazenım z osobnıho blogu osoby B
2 Osoba A zasifruje svou zpravu pomocı verejneho klıce B a odesle ji jako beznye-mail
3 Osoba B zpravu desifruje pomocı sveho privatnıho klıce a zıska tak puvodnıobsah
Oba typy klıcu se generujı vzdy jako par Pro jejich vytvorenı je nutne dodat radunahodnych cısel Jednou z pouzitych metod jejich generovanı je prectenı hodnotynahodne adresy v pameti nebo sledovanı pozice kurzoru mysi uzivatele
15
Kapitola 3
Analyza
V nasledujıcı casti budou popsany pozadavky na navrhovany souborovy system a prehledzakladnıch problemu ktere bude nutne behem navrhu resit
31 Pozadavky na souborovy system
Pro uceleny pohled a dalsı postup je vhodne nejprve specifikovat pozadavky na vytvarenysystem Jsou jimi predevsım
bull Ochrana obsahu FS heslem ndash skryty FS by mel idealne tajit nejen svou vlastnıexistenci ale predevsım by nemel dovolit uzivatelum neznajıcıch klıc prıstupovatk jeho obsahu
bull Existence vıce FS nad jednım ulozistem ndash tento pozadavek muze plnit hned dvefunkce V prve rade jde o castecne nezavisle varianty FS pro organizaci obsahunicmene dalsım dusledkem muze byt jeho vlastnı ochrana Pokud bychom uvazo-vali scenar kdy osoba-utocnık pod pohruzkou donutı svou obetrsquo k vyzrazenı heslado skryteho FS obetrsquo ma sanci sdelit jine nez skutecne heslo a tım dojde ke zprı-stupnenı odlisneho obsahu (pochopitelne za predpokladu ze byl drıve vytvoren)
bull Nezavislost na uloznem mediu ndash knihovna by mela poskytovat dostatecne obecnerozhranı ktere by bylo mozne vyuzıt pro implementaci ruznych typu ulozistrsquo beznutnosti hlubokych zasahu do knihovny samotne Prıkladem typu ulozistrsquo mohoubyt soubory MP3 JPG webova sluzba
bull Alespon castecna odolnost proti chybejıcım fragmentum ndash v prıpade ze bude ulo-zistem naprıklad adresar s MP3 soubory lze v prubehu casu predpokladat jeho mo-difikace ruzne zavazneho charaketru (platı pochopitelne nejen pro soubory MP3)Mohou jimi byt zmena umıstenı souboru v adresarıch i kompletnı odstranenı celehoalba Tyto zasahy ruznou merou ovlivnujı spolehlivost skryteho FS a bude nutneje v navrhu zohlednit
16
bull Jednouzivatelsky rezim ndash skryty FS ze sve podstaty nenı urcen pro kazdeho uziva-tele ktery ma prıstup k ulozisti Predpokladem je uzky okruh osob ktere budouznat heslo pro prıstup
Vyvoj aplikace splnujıcı vyse uvedena kriteria se muze ubırat dvema smery V prve radelze vytvorit tzv aplikaci na mıru To znamena kompletnı prizpusobenı vyvoje zakom-ponovanı optimalizacı vhodnych pro specificke pouzitı atd Dalsım smerem je knihovnaposkytujıcı obecne rozhranı v takove forme aby bylo mozne vyhovet pozadavkum nasystem Vyhodou muze byt dalsı samostatne pouzitı konkretnıch modulu bez nutnostihlubokych zasahu do puvodnıch zdrojovych kodu Konecne rozhodnutı pro perspektiv-nejsı pouzitı tak padlo na variantu vytvorenı knihovny ktera bude schopna vytvorit aspravovat skryty souborovy system
17
Kapitola 4
Navrh souboroveho systemu
Kapitola navrhu popisuje obecne postupy resenı problemu ktere jsou spojeny s nasled-nym vyvojem skryteho souboroveho systemu Jejich soupis je uveden v kapitole 3 Tyjsou dale detailneji rozvedeny v kapitole 5 zabyvajıcı se implementacı
41 Uloziste
Cılem prace je zajistit ukladanı souboru do jinych Umıstenı techto jinych souboru budedale oznacovano jako uloziste
42 Vymezenı termınu
Pro ujasnenı vyznamu nekterych termınu dale obsazenych v teto prace nasleduje jejichprehled s podrobnejsım vysvetlenım
bull hash ndash jednoznacna identifikace prave jedne entitiy v ulozisti
bull fragment ndash souvisı se skrytym souborem a jde o poradove cıslo useku dat kterepredstavuje cast obsahu skryteho souboru Slozenım vsech fragmentu dostanemekompletnı obsah souboru proto jeho hodnota v ramci skryteho FS musı byt jedi-necna
bull blok ndash souvisı s entitou v ulozisti jedna se o poradove cıslo dılcı casti obsahufyzickeho souboru Tento identifikator musı byt unikatnı v ramci hash
bull vnoreny FS ndash samostatny prostor pro skryvanı souboru v ramci stejneho ulozisteImplementace systemu je muze rozlisovat naprıklad pomocı zadaneho hesla
43 Zpusob organizace souboru
Jak jiz bylo v zmıneno v teoreticke casti 221 nejpouzıvanejsımi druhy organizace obsahusouboru je fragmentace a spojita alokace Uloziste je jen obecne rozhranı a muze mıt
18
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
Obsah
1 Uvod 5
2 Teoreticka cast 721 Souborove systemy 822 Koncepty souborovych systemu 8
221 Datove bloky a metody jejich alokace 8222 Reprezentace souboru 9223 Reprezentace adresaru 9224 Zurnalovanı 10
23 FUSE 10231 Struktura 11232 Prıklady souborovych systemu vyuzıvajıcı FUSE 12233 Zpusob pouzitı 12
24 Zabezpecenı citlivych dat 13241 Steganografie 13242 Digitalnı steganografie 14243 Kryptografie 15
3 Analyza 1631 Pozadavky na souborovy system 16
4 Navrh souboroveho systemu 1841 Uloziste 1842 Vymezenı termınu 1843 Zpusob organizace souboru 1844 Organizace metadat 19
441 Struktura souboru 19442 Obsah souboru 19443 Ulozenı metadat 20
45 Varianty alokatoru 2046 Programovacı jazyk 2147 Diagram trıd 2248 Odolnost vuci chybejıcım blokum 22
1
49 Popis behu programu 22410 Alokator bloku 23
4101 Atributy alokace 234102 Typy alokatoru 23
5 Implementace 2451 Indexace uloziste 2452 Kontext souboru 2553 Alokator 2654 Obecny format bloku 27
541 Identifikacnı byte 2755 Format ulozenı bloku typu DataBlock 2856 Format ulozenı bloku typu SuperBlock 2857 Format ulozenı bloku typu Chain 2958 Format serializovane entity 2959 Organizace metadat 29
591 Tabulka struktury 29592 Tabulka obsahu 30593 Tabulka fyzickych souboru 30594 Superblok 31
510 Operace nad soubory 325101 Ctenı 325102 Zapis 325103 Vytvorenı bezneho souboru 335104 Vytvorenı adresare 335105 Ctenı obsahu adresare 345106 Prejmenovanı presun souboru 345107 Odstranenı souboru 345108 Odstranenı adresare 345109 Odhad volneho mısta 34
511 Zname chyby 35
6 Experimentalnı overenı 3661 Metoda merenı 3662 Podmınky merenı 3663 Prubeh a vysledky experimentu 3664 Shrnutı 37
7 Zaver 3971 Dalsı rozsırenı prace 39
Literatura 41
2
Prılohy 43Seznam prıloh 44
A Obsah CD 45
3
Seznam obrazku
21 Prubeh zpracovanı pozadavku ve FUSE 1222 Ukazka pouzitı knihovny FUSE 1323 Ukazka implementace operace read 14
41 Ukazka obsahu tabulky uchovavajıcı obsah souboru 2042 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru 21
51 Struktura souboru formatu MP3 2552 Struktura obecneho formatu bloku a delky jednotlivych castı 2753 Struktura obsahu bloku se superblokem 2854 Struktura obsahu bloku se serializovanymi entitami 29
61 Prehled namerenych prenosovych rychlostı 38
4
Kapitola 1
Uvod
Dıky masovemu rozsırenı vypocetnı techniky a internetu se dnesnı doba casto oznacujejako doba informacnı Celosvetovy objem informacı neustale rychle roste [17] prıklademmohou byt vedecke clanky kterych je behem jedineho dne verejne publikovano mezisesti a sedmi tisıci Nenı to vsak jediny druh informacı Patrı zde mnoho dalsıch druhuvcetne napr fotografiı z rodinnych oslav nebo soukrome korespondence V techto prı-padech (opomineme-li typicky socialnı sıte) muze byt mnozstvı osob kterym jsou tytoinformace urceny z ruznych duvodu omezeno (rodina pratele ) Lide informace castouchovavajı v pocıtacıch na svych pevnych discıch opatrnejsı z nich je chranı hesly Lzetak omezit prıstup neopravenym osobam a chranit tak data pred prıpadnym zneuzitımPouzitı sifrovanı pro ochranu dat ma vsak omezenı v tom ze skryva pouze obsah data nikoli jiz jejich prıtomnost Potencialnımu utocnıkovi stacı mnohdy jen zjistit hesloatrsquo uz za pomoci utoku hrubou silou slovnıkoveho utoku socialnıho inzenyrstvı nebov extremnım prıpade mucenım Prave prıtomnost sifrovanych dat muze v mnoha prıpa-dech pritahnout nezadoucı pozornost proto je casto vhodne skryt samotnou prıtomnostcitlivych dat cımz se zabyva steganografie
Soucasne nastroje pro digitalnı steganografii jsou casto velmi omezene co se tycehlavne pouziteho steganografickeho prıstupu Snad jedinou znamou vyjimkou je pro-gram TrueCrypt [7] jenz umoznuje v jiz existujıcım sifrovanem oddılu vytvorit dalsımibeznymi motodami neodhalitelny pododdıl ktery lze pri znalosti sifrovacıho klıce pripojitjako bezny souborovy system
Cılem teto prace je navrhnout souborovy system ktery bude umoznovat skryvanısouboru do jinych a za pouzitı technologie FUSE jej implementovat Jejı teoreticka castposkytuje nahled do souvisejıcıch oblastı a naleza se v nı take prehled obecnych konceptupouzıvanych pri implementaci souborovych systemu Dale jsou popsany mozne zpusobyskryvanı dat a v poslednı casti se okrajove venuje kryptografii
Kapitola 3 se zabyva analyzou a spolu s navrhem v kapitole 4 uz popisujı samotnoutvorbu souboroveho systemu umoznujıcı skryvanı dat do ID3 tagu ktere jsou soucastıhudebnıho formatu MP3 Kapitola 5 se venuje resenım konkretnıch problemu v jazyceC++ a v predposlednı 6 casti cele prace jsou zdokumentovany vysledky experimen-talnıho overenı vlastnostı vytvoreneho souboroveho systemu Kapitola 7 praci shrnuje a
5
diskutuje dalsı moznosti rozsırenı
6
Kapitola 2
Teoreticka cast
Tato kapitola se zameruje na prehled souborovych systemu (v anglictine file system dalejen FS) jejich principsect a vyuzitı
Operacnı system GNULinux je inspirovan OX UNIX a jednou z vlastnostı kterousi zachoval je rozdelenı souboru na zakladnıch 6 typu [16]
1 obcejny soubor ndash patrı zde textove spustitelne binarnı soubory obrazky ve for-matu JPEG
2 adresar ndash umoznuje organizovat soubory do stromove struktury
3 symbolicky odkaz ndash zastupce za jiny soubor cıl odkazu je urcen pomocı cestyadresarove struktury je tak mozne vytvaret odkazy i mimo aktualnı svazek
4 specialnı blokovy soubor ndash podstatnou vlastnostı je moznost provadenı zaklad-nıch operacı pomocı adresace bloku Typickym predstavitelem jsou oddıly pevnychdisku
5 specialnı znakovy soubor ndash ctenı a zapis se provadı formou proudu dat po-uzıva se pro koumunikaci s nekterymi periferiemi naprıklad zarızenı pripojenychk seriovemu portu
6 pojmenovana roura ndash je jednım z prostredku komunikace mezi procesy a umoz-nuje manipulaci se standardnım vstupem a vystupem jako operace ctenı a zapissouboru V systemu GNULinux jej lze vytvorit pomocı prıkazu mkfifo
Pro jednoznacnou identifikaci jednoho souboru v ramci souboroveho systemu se pouzıvatermın inode
V systemu Linux se vyuzıvajı systemova volanı i k manipulaci se soubory Zakladnıoperace jsou provadeny pomocı nasledujıcıch volanı (pouze prehled)
bull open - otevrenı souboru pro dalsı praci s jeho obsahem
bull read - ctenı obsahu souboru
7
bull write - zapis do souboru
bull mknod - vytvorenı inode (pouzıvane pro adresare i specialnı soubory)
bull readdir - ctenı obsahu adresare
bull link - vytvorenı noveho odkazu na iuzel
bull unlink - zrusenı odkazu na iuzel souboru
bull chmod - zmena prıstupovych prav k souboru
bull chown - zmena vlastnıka souboru
21 Souborove systemy
Souborove systemy jsou prostredkem ktery umoznuje abstrakci dat formou souborufyzicky zapsanych v uloznych zarızenıch Temi byvajı nejcasteji pevne disky USB flashdisky opticka a paskova zarızenı Jejich obsah je smesicı jednicek a nul kterym davavyznam teprve az souborovy system Podle zpusobu uzitı je muzeme delit do nekolikazakladnıch kategoriı
bull bezne ndash vhodne pro obecne vyuzitı prıkladem jsou ext4 [11] NTFS BTRFS adalsı
bull sıtrsquoove (distribuovane) ndash ulozne zarızenı se fyzicky nenachazı v pocıtaci ale jedostupne skrze sıtrsquoove rozhranı Typickym predstavitelem teto skupiny je NFS [4]
bull specializovane ndash naprıklad pri zalohovanı velkych diskovych polı se casto vyuzı-vajı paskove mechaniky LTO pro ktere byl vyvinut soucasny LTFS [3]
22 Koncepty souborovych systemu
Souborove systemy majı v zakladu spolecny ucel uchovavat a organizovat data Existujerada systemu ruznych vlastnostı ktere vsak vyuzıvajı stejne principy protoze se v pru-behu casu ukazaly jako nejvhodnejsı pro dany ucel V teto casti budou tyto prıstupydetailneji popsany jejich detailnejsı popis lze nalezt v [18]
221 Datove bloky a metody jejich alokace
Datovym blokem oznacujeme nejmensı objem dat se kterym je souborovy system scho-pen pracovat V ruznych systemech je zazity termın alokacnı jednotka coz je synony-mum a s nı souvisı velikost alokacnı jednotky Pokud provedeme zapis souboru o velikostinaprıklad 1 kB pri velikosti bloku 4 kB budou na disk zapsany 4 kB dat i kdyz je vyuzityobsah bloku mensı Tento prıstup je jednoduchy pro organizaci dat ale zpusobuje ztratukapacity disku protoze poslednı ze sekvence bloku nalezıcıch danemu souboru s velkou
8
pravdepodobnostı nebude obsazen az do sveho plneho objemu a je tak pro male souboryneefektivnı
Prıstupu pro alokaci bloku pro zapis noveho souboru existuje nekolik V souborovychsystemech extended file system (ext234) tuto praci obstarava tzv block allocator Tenma prehled o aktualne obsazenych blocıch a ma za ukol vyhledat vhodne volne mısto Dodoby zverejnenı FS ext4 pracoval vzdy nad jednım konkretnım souborem V ext4 ale bylprepracovan protoze tento system vyuzıva tzv extenty coz vyzaduje vetsı kontrolu nadrozmıstenım bloku na disku Extentem oznacujeme (pokud mozno) souvislou sekvencibloku tvorıcı jeden soubor ktera je urcena pocatecnım blokem a delkou Odtud plynezasadnı rozdıl bezne organizace (jejımz prıkladem je souborovy system FAT1) ndash velikostbloku Extenty totiz majı promenlivou delku v zavislosti na obsahu Aby bloky mohlybyt ukladany souvisle vyuzıva se odlozeneho zapisu Pozadavky na zapis bloku nejsouobslouzeny okamzite ale az je jich dostatecne mnozstvı Teprve pak se provadı zapis jakojedina operace Vyuzıvanım extentu odpada nutnost velke rezie pri ukladanı objemnychsouboru Souvisle ctenı je vzhledem k sekvencnı povaze stale prevazne rotacnıch fyzickychmediı vyhodne protoze tak umoznuje maximalne vyuzıt jejich vykon
222 Reprezentace souboru
Soubor je tvoren nazvem atributy a obsahem Nazvu se take nekdy rıka symbolicke jmenoa to proto ze z pohledu souborovych systemu se jedna jen o jiny zpusob identifikaceJednoznacnym identifikatorem je v systemu Linux tzv inode Tento termın je odvozenze slov index node a jedna se o poradove cıslo souboru ve svazku
Nazev souboru je retezec znaku a jeho delka byla napr u souborovych systemuFAT1632 pevna ndash 8 znaku (a to jeste ne vsechny ASCII znaky) pro samotny nazevsouboru a 3 znaky pro prıponu [13] Tento format jmen se uznacuje jako short filenamenebo format 83 Casem se tento prıstup ukazal jako nevyhovujıcı a proto vznikla nad-stavba LFN (long filenames) ktera umoznovala v techto systemech souboru (v dnesnıdobe uz zastaralych) pouzıvat jmena az 255 znaku dlouhe Tato delka je typicka prosystemy ext234 UDF XFS a mnoho dalsıch Nektere systemy majı tuto hranici posu-nutou jeste mnohem dale ndash naprıklad u ReFS je pro nazev souboru vyhrazeno az 32 kBV nazvech souboru take byvajı omezenı na pouzitelne znaky nebo konkretnı retezcektere majı svuj specialnı vyznam Typicky se jedna o retezce
rdquoldquo ci
rdquoldquo Z implementac-
nıch duvodu nebyva povolen znak 0 (ASCII hodnota 0x00)
223 Reprezentace adresaru
Adresar je samostatny typ souboru a jeho obsahem je mnozina souboru Reprezentaciteto mnoziny lze implementovat ruznymi zpusoby z cehoz plynou i prıpadna omezenı namaximalnı pocet souboru obsazenych v jedinem adresari
Souborovy system ext2 ma v kazdem inode rezervovano 12 mıst pro ukazatele nabloky (tzv prıme adresovanı) Pokud je obsah souboru (nebo pocet souboru v adresari)
1File Allocation Table
9
bull Writeback mode ndash provadı se zalohovanı struktury souboroveho systemu takzepri poruse sice nedojde ke ztrate metadat souboroveho systemu ale obsah zapi-sovaneho bloku nemusı byt korektnı To je zpusobeno poradım operacı zapis dozurnalu zapis metadat zapis datoveho bloku
bull Ordered mode ndash podobne jako writeback mode zalohujı se pouze metadataavsak zde je rozdıl v poradı provadenych operacı Nejdrıve se zapisujı data a azpote metadata do zurnalu
bull Data mode ndash nejvyssı uroven ochrany zalohujı se metadata i datove bloky To jeale vyvazeno nizsım vykonem protoze jsou veskera data ukladana dvakrat nejdrıvedo zurnalu a pote na skutecnou adresu
maly vyuzıvajı se prımo tato mısta pro ulozenı dat Delsı obsah se uklada do samostat-nych skupin bloku (tzv neprıme adresovanı prvnı az tretı urovne) ktere jsou adresovanyz mıst prımeho adresovanı
BFS (Berkley Fast Filesystem) pracuje s promennou delkou adresaru trochu jinymzpusobem Pri zakladanı adresare se alokuje prostor nejen pro prave zapisovany obsahale i rezervuje prostor pro prıpadne rozsırenı obsahu Soucastı metadat adresare jsoupro tyto ucely vyhrazeny dva ukazatele Prvnı smeruje na poslednı obsazeny zaznam adruhy na konec celkove alokovane oblasti (obsazena + rezervovana oblast)
224 Zurnalovanı
Pro zabezpecenı konzistence ukladanych dat v prıpade vypadku napajenı byla vyvinutatechnika zurnalovanı Jde o techniku kdy se na disk zapisujı krome uzivatelskych dati dalsı zaznamy ktere umoznujı v prıpade potreby obnovit konkretnı obsah datovehobloku a zajistit tak konzistenci bloku Tento specialnı zaznam se nazyva zurnal a jeto klasicky soubor ktery nenı beznemu uzivateli prıstupny Zurnalovanı lze realizovatpomocı nekolika prıstupu z nichz se vyuzıva predevsım
23 FUSE
FUSE [19] filesystem in userspace je technologie umoznujıcı neprivilegiovanym uzivate-lum pripojovanı a odpojovanı specialnıch souborovych systemu Projekt byl puvodnevyvıjen pro system GNULinux avsak v dnesnı dobe je k dispozici i pro platformyFreeBSD Mac OS X OpenSolaris a rada dalsıch Pri beznem pripojenı svazku pomocımount je totiz nutne mıt opravnenı spravce systemu (root) Implementace FUSE je bez-nym programem ktery je spousten pod aktualne prihlasenym uzivatelem (samozrejmepokud nenı modifikovan prıkazy chmod ci chown) Z tohoto faktu vyplyvajı i dalsı vlast-nosti ze kterych zminme odstınenı programatora od nutnosti znat a dodrzovat pravidlapro tvorbu modulu jadra operacnıho systemu Bezne FS totiz byvajı do jadra zaclenenyprave touto formou
10
231 Struktura
FUSE se sklada ze trı vzajemne komunikujıcıch castı kterymi jsou
bull modul pro jadro ndash drıvejsı verze modulu FUSE byly sıreny samostatne avsak odverze jadra Linuxu 2614 je jiz zaclenen do hlavnı vyvojove vetve nenı protozpravidla nutne jej dodatecne zavadet pomocı modprobe
bull rozhranı knihovny FUSE ndash je nativne tvoreno nekolika hlavickovymi soubory v ja-zyce C poskytuje deklarace metod pro implementaci rady systemovych volanı
bull specialnı soubor devfuse ndash zprostredkovava koumunikaci mezi modulem v jadrea rozhranım knihovny Pri pripojovanı souboroveho systemu vyuzıvajıcı FUSE seprovede otevrenı tohoto specialnıho souboru a nasledna komunikace probıha uz jenskrze takto zıskany popisovac (file descriptor)
Modul v jadre je prave jeden ale rozhranı knihovny je implementovano v rade programo-vacıch jazyku Pro strucny prehled jimi jsou C C++ Java C Haskell Python PerlRuby PHP ci Lua Uplny vypis je dostupny na oficialnıch webovych strankach projektuFUSE Nasleduje obrazek 21 se znaroznenım prubehu systemoveho volanı readdiravsak princip komunikace je spolecny pro vsechna podporovana systemova volanı
11
Obrazek 21 Prubeh zpracovanı pozadavku ve FUSE Obrazek byl prevzat z [19]
Je zde videt prenos pozadavku na zobrazenı obsahu adresare prochazejıcı uzivatel-skym prostorem (userspace) skrze obecnou vrstvu VFS (Virtual File System) a nasled-neho predanı modulu FUSE v jadru systemu To jej dale distribuuje zpet do uzivatel-skeho prostoru kde se nachazı implementace rozhranı FUSE (examplehello) Volanıse vyhodnotı vykonanım prıslusne metody a vysledek operace putuje stejnou cestou zpet
232 Prıklady souborovych systemu vyuzıvajıcı FUSE
Technologie FUSE se drzı hesla systemu UNIXrdquovse je souborldquo a nasla si tak sve prız-
nivce Svedcı o tom mnozstvı vytvorenych souborovych systemu ktere tuto technologiivyuzıvajı Mezi ty znamejsı patrı
bull sshfs [6] ndash umoznuje pripojenı vzdaleneho adresare pomocı protokolu SSH
bull CurlFtpFS [2] ndash zprostredkovava pripojenı FTP serveru jako lokalnıho adresare
bull WikipediaFS [9] ndash prace s clanky z portalu zalozenych na systemu Wiki jakos beznymi soubory
bull BloggerFS [1] ndash manipulace s prıspevky na blogovacım portalu Bloggercom veforme beznych souboru
233 Zpusob pouzitı
Pouzitı knihovny FUSE spocıva ve vlastnı implementaci obsluznych funkcı (tzv han-dlers) pro jednotlive ukony ktere lze se soubory provadet a jejiz nazvy odpovıdajı sys-temovym volanım FUSE definuje pro manipulaci se soubory az 39 (od verze knihovny
12
26) obsluznych funkcı avsak pro zakladnı pouzitı nenı nutne implementovat vsechnyJednoduchy avsak jiz funkcnı souborovy system lze sestavit pomocı getattr openopendir a read Ukazka implementace tohoto FS je v jazyce C na obrazcıch 22 a 23Deklarace vsech obsluznych funkcı lze nalezt v hlavickovem souboru fuseh ktery byva
include ltstdiohgt
include ltfusehgt
static int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
int main(int argc char argv[])
struct fuse_operations fsOperations
fsOperationsgetattr = fuse_getattr
fsOperationsopen = fuse_open
fsOperationsread = fuse_read
fsOperationsreaddir = fuse_readdir
return fuse_main(argc argv ampfsOperations NULL)
Obrazek 22 Ukazka pouzitı knihovny FUSE
umısten v usrincludefuse (tato cesta se ale muze mezi linuxovymi distribucemilisit) Soubory zde nejsou identifikovany pomocı inode jak je zvykem ve skutecnych FSale pouze pomocı cesty kterou lze nalezt ve vetsine obsluznych funkcı na mıste prvnıhoparametru Pokud byla operace provedena korektne obsluzna funkce by mela ve vetsineprıpadu vracet cıslo 0 Vsechny druhy chyb jsou indikovany zapornou hodnotou kon-stant definujıcıch druh chyby Jejich soupis se naleza v hlavickovem souboru errorh
(umıstenı souboru se muze lisit)
24 Zabezpecenı citlivych dat
Potreba chranit data pred cizımi osobami vznikla uz v davnych dobach jeste pred rozvo-jem vypocetnı techniky Jednım z odvetvı ktere se ochranou dat zabyva je kryptografieData lze chranit vıce prostredky a jejich sifrovanı je pouze jednou z aplikacı Nasledujıcıcast poskytuje prehled o dalsıch zpusobech ochrany dat [15]
241 Steganografie
Steganografie spocıva ve skrytı zpravy Zasadnım rozdılem oproti kryptografii je prede-vsım snaha o skrytı samotne existence zpravy V minulosti se vyuzıvaly tzv neviditelne
13
Pro ukazku nasleduje prıklad implementace operace read
int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
char msg[] = Pokusny text pro ctenı
int msgLength = strlen(msg)
if(strcmp(path example) == 0)
memcpy(buffer msg msgLength)
return msgLength
else if(strcmp(path null) == 0)
return 0
else
return -ENOENT
Obrazek 23 Ukazka implementace operace read
inkousty jimiz byla napsana zprava na papır Jejı prıjemce pak cely list nahral a ter-mochemickou reakcı se text objevil Dokonce bylo pouzito i hlavy otroka kdy mu bylanejdrıve oholena hlava a pote na ni vytetovana zprava Az mu vlasy zpet dorostly bylvyslan na cestu pres nepratelske uzemı a prıjemce mu ji opet oholil aby si zpravu mohlprecıst Tento zpusob samozrejme nebyl vzdy vhodny a proto se lide snazili vymysletdalsı zpusoby skrytı dat Pri pouzitı psaneho textu (rukou ci na psacım stroji) jako nos-neho materialu se da vyuzıt mechanismu psacıho stroje Do volneho prostoru mezi radkyse skryvaly zpravy psanım bez barevne pasky takze v papıru zustal pouze otlak pısmenNebo se tajna zprava mnohonasobne zmensila aby pri letmem pohledu pripomınala jed-nolity cerny bod Ten se pak vlepil do tisteneho textu jako tecka na konci vety tzvmikrotecky
242 Digitalnı steganografie
I v digitalnı dobe stale existujı postupy jak skryvat data Naprıklad u fotografiı mu-zeme dobre vyuzıt nedokonalosti lidskeho oka Pokud zmenıme jen nepatrne barevnyodstın v nektere casti fotografie nenı tato uprava na pohled zretelna ndash nemusı se jednato anomalii ale ucel Stejny princip lze aplikovat i na zvuky Hudba se po digitalizacicasto komprimuje Podle druhu pouziteho algoritmu muze dochazet ke ztrate hudebnıinformace Pokud zmenıme nejnizsı bit u cısla reprezentujıcıho frekvenci stejne jakou obrazku nebude tato zmena pri poslechu patrna Tento typ techniky se oznacuje jakozmena hodnoty LSB (least significant bit) Pokud nekdo tento soubor jakkoliv bezneupravı (orıznutı obrazku zmena bitrate zvuku) znamena to ve vetsine prıpadu po-skozenı nebo uplnou ztratu skryte informace U pruznych disku (disket) umı nektere
14
programy zamerne oznacit sektory na jejım magnetickem povrchu jako poskozene Tımsice dojde k castecnemu snızenı kapacity pro bezne soubory ale nehrozı zde nebezpecıprepisu ztracenych dat pri bezne praci Pokud uzivatel chce zapsat soubor na disketuoperacnı system pro nej vyuzije pouze volne sektory ktere jsou v poradku a chybnevzdy preskocı Skrytı dat nemusı ale nutne znamenat rozpoznatelnou zmenu vystupuObrazovy format BMP svou stavbou umoznuje doslova neviditelne skrytı (omezeneho)mnozstvı dat Jedinym prıpadnym vodıtkem k odhalenı je zvyseny objem dat
243 Kryptografie
Kryptografie jinymi slovy sifrovanı je postup transformace originalnı zpravy do podobyktera je v idealnım prıpade citelna pouze se znalostı tzv klıce Prı pouzitı stejne vstupnızpravy sifrovacıho algoritmu ale jineho klıce zıskame odlisny vystup Mıra zabezpecenızpravy zavisı na zvolenem algoritmu a sifrovacım klıci Proto pri chybnem pouzitı nekte-reho z bezne pouzıvanych algoritmu (napr RSA) a klıce (pouzitı retezce
rdquohesloldquo) nemusı
byt pro utocnıka velkou prekazkou zjistit obsah puvodnı zpravySifrovacı algoritmy rozdelujeme do dvou zakladnıch skupin podle typu klıce
bull Symetricka kryptografie ndash pouzıva pro sifrovanı i desifrovanı stejny klıc kteryby mel zustat v tajnosti Patrı zde naprıklad algoritmy DES [14] TwoFish [8] av dnesnı dobe v teto kategorii nejpouzıvanejsı AES [10]
bull Asymetricka kryptografie ndash vyuzıva dva typy klıcu verejny a privatnı Verejnyklıc ktery slouzı pro desifrovanı (uz podle nazvu) je mozne jej zaslat prıjemncisifrovane zpravy beznou nezabezpecenou elektronickou postou nebo jej zverejnitna svych webovych strankach Oproti tomu privatnı klıc musı zustat v tajnostiu sveho majitele Zastupcem teto kategorie je algoritmus RSA [5]
Sifrovana komunikace pak probıha podle nasledujıcıho scenare pripomınajıcıho kla-sickou postovnı korespondenci
1 Odesilatel (osoba A) si zajistı verejny klıc prıjemce (osoba B) naprıklad jejımstazenım z osobnıho blogu osoby B
2 Osoba A zasifruje svou zpravu pomocı verejneho klıce B a odesle ji jako beznye-mail
3 Osoba B zpravu desifruje pomocı sveho privatnıho klıce a zıska tak puvodnıobsah
Oba typy klıcu se generujı vzdy jako par Pro jejich vytvorenı je nutne dodat radunahodnych cısel Jednou z pouzitych metod jejich generovanı je prectenı hodnotynahodne adresy v pameti nebo sledovanı pozice kurzoru mysi uzivatele
15
Kapitola 3
Analyza
V nasledujıcı casti budou popsany pozadavky na navrhovany souborovy system a prehledzakladnıch problemu ktere bude nutne behem navrhu resit
31 Pozadavky na souborovy system
Pro uceleny pohled a dalsı postup je vhodne nejprve specifikovat pozadavky na vytvarenysystem Jsou jimi predevsım
bull Ochrana obsahu FS heslem ndash skryty FS by mel idealne tajit nejen svou vlastnıexistenci ale predevsım by nemel dovolit uzivatelum neznajıcıch klıc prıstupovatk jeho obsahu
bull Existence vıce FS nad jednım ulozistem ndash tento pozadavek muze plnit hned dvefunkce V prve rade jde o castecne nezavisle varianty FS pro organizaci obsahunicmene dalsım dusledkem muze byt jeho vlastnı ochrana Pokud bychom uvazo-vali scenar kdy osoba-utocnık pod pohruzkou donutı svou obetrsquo k vyzrazenı heslado skryteho FS obetrsquo ma sanci sdelit jine nez skutecne heslo a tım dojde ke zprı-stupnenı odlisneho obsahu (pochopitelne za predpokladu ze byl drıve vytvoren)
bull Nezavislost na uloznem mediu ndash knihovna by mela poskytovat dostatecne obecnerozhranı ktere by bylo mozne vyuzıt pro implementaci ruznych typu ulozistrsquo beznutnosti hlubokych zasahu do knihovny samotne Prıkladem typu ulozistrsquo mohoubyt soubory MP3 JPG webova sluzba
bull Alespon castecna odolnost proti chybejıcım fragmentum ndash v prıpade ze bude ulo-zistem naprıklad adresar s MP3 soubory lze v prubehu casu predpokladat jeho mo-difikace ruzne zavazneho charaketru (platı pochopitelne nejen pro soubory MP3)Mohou jimi byt zmena umıstenı souboru v adresarıch i kompletnı odstranenı celehoalba Tyto zasahy ruznou merou ovlivnujı spolehlivost skryteho FS a bude nutneje v navrhu zohlednit
16
bull Jednouzivatelsky rezim ndash skryty FS ze sve podstaty nenı urcen pro kazdeho uziva-tele ktery ma prıstup k ulozisti Predpokladem je uzky okruh osob ktere budouznat heslo pro prıstup
Vyvoj aplikace splnujıcı vyse uvedena kriteria se muze ubırat dvema smery V prve radelze vytvorit tzv aplikaci na mıru To znamena kompletnı prizpusobenı vyvoje zakom-ponovanı optimalizacı vhodnych pro specificke pouzitı atd Dalsım smerem je knihovnaposkytujıcı obecne rozhranı v takove forme aby bylo mozne vyhovet pozadavkum nasystem Vyhodou muze byt dalsı samostatne pouzitı konkretnıch modulu bez nutnostihlubokych zasahu do puvodnıch zdrojovych kodu Konecne rozhodnutı pro perspektiv-nejsı pouzitı tak padlo na variantu vytvorenı knihovny ktera bude schopna vytvorit aspravovat skryty souborovy system
17
Kapitola 4
Navrh souboroveho systemu
Kapitola navrhu popisuje obecne postupy resenı problemu ktere jsou spojeny s nasled-nym vyvojem skryteho souboroveho systemu Jejich soupis je uveden v kapitole 3 Tyjsou dale detailneji rozvedeny v kapitole 5 zabyvajıcı se implementacı
41 Uloziste
Cılem prace je zajistit ukladanı souboru do jinych Umıstenı techto jinych souboru budedale oznacovano jako uloziste
42 Vymezenı termınu
Pro ujasnenı vyznamu nekterych termınu dale obsazenych v teto prace nasleduje jejichprehled s podrobnejsım vysvetlenım
bull hash ndash jednoznacna identifikace prave jedne entitiy v ulozisti
bull fragment ndash souvisı se skrytym souborem a jde o poradove cıslo useku dat kterepredstavuje cast obsahu skryteho souboru Slozenım vsech fragmentu dostanemekompletnı obsah souboru proto jeho hodnota v ramci skryteho FS musı byt jedi-necna
bull blok ndash souvisı s entitou v ulozisti jedna se o poradove cıslo dılcı casti obsahufyzickeho souboru Tento identifikator musı byt unikatnı v ramci hash
bull vnoreny FS ndash samostatny prostor pro skryvanı souboru v ramci stejneho ulozisteImplementace systemu je muze rozlisovat naprıklad pomocı zadaneho hesla
43 Zpusob organizace souboru
Jak jiz bylo v zmıneno v teoreticke casti 221 nejpouzıvanejsımi druhy organizace obsahusouboru je fragmentace a spojita alokace Uloziste je jen obecne rozhranı a muze mıt
18
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
49 Popis behu programu 22410 Alokator bloku 23
4101 Atributy alokace 234102 Typy alokatoru 23
5 Implementace 2451 Indexace uloziste 2452 Kontext souboru 2553 Alokator 2654 Obecny format bloku 27
541 Identifikacnı byte 2755 Format ulozenı bloku typu DataBlock 2856 Format ulozenı bloku typu SuperBlock 2857 Format ulozenı bloku typu Chain 2958 Format serializovane entity 2959 Organizace metadat 29
591 Tabulka struktury 29592 Tabulka obsahu 30593 Tabulka fyzickych souboru 30594 Superblok 31
510 Operace nad soubory 325101 Ctenı 325102 Zapis 325103 Vytvorenı bezneho souboru 335104 Vytvorenı adresare 335105 Ctenı obsahu adresare 345106 Prejmenovanı presun souboru 345107 Odstranenı souboru 345108 Odstranenı adresare 345109 Odhad volneho mısta 34
511 Zname chyby 35
6 Experimentalnı overenı 3661 Metoda merenı 3662 Podmınky merenı 3663 Prubeh a vysledky experimentu 3664 Shrnutı 37
7 Zaver 3971 Dalsı rozsırenı prace 39
Literatura 41
2
Prılohy 43Seznam prıloh 44
A Obsah CD 45
3
Seznam obrazku
21 Prubeh zpracovanı pozadavku ve FUSE 1222 Ukazka pouzitı knihovny FUSE 1323 Ukazka implementace operace read 14
41 Ukazka obsahu tabulky uchovavajıcı obsah souboru 2042 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru 21
51 Struktura souboru formatu MP3 2552 Struktura obecneho formatu bloku a delky jednotlivych castı 2753 Struktura obsahu bloku se superblokem 2854 Struktura obsahu bloku se serializovanymi entitami 29
61 Prehled namerenych prenosovych rychlostı 38
4
Kapitola 1
Uvod
Dıky masovemu rozsırenı vypocetnı techniky a internetu se dnesnı doba casto oznacujejako doba informacnı Celosvetovy objem informacı neustale rychle roste [17] prıklademmohou byt vedecke clanky kterych je behem jedineho dne verejne publikovano mezisesti a sedmi tisıci Nenı to vsak jediny druh informacı Patrı zde mnoho dalsıch druhuvcetne napr fotografiı z rodinnych oslav nebo soukrome korespondence V techto prı-padech (opomineme-li typicky socialnı sıte) muze byt mnozstvı osob kterym jsou tytoinformace urceny z ruznych duvodu omezeno (rodina pratele ) Lide informace castouchovavajı v pocıtacıch na svych pevnych discıch opatrnejsı z nich je chranı hesly Lzetak omezit prıstup neopravenym osobam a chranit tak data pred prıpadnym zneuzitımPouzitı sifrovanı pro ochranu dat ma vsak omezenı v tom ze skryva pouze obsah data nikoli jiz jejich prıtomnost Potencialnımu utocnıkovi stacı mnohdy jen zjistit hesloatrsquo uz za pomoci utoku hrubou silou slovnıkoveho utoku socialnıho inzenyrstvı nebov extremnım prıpade mucenım Prave prıtomnost sifrovanych dat muze v mnoha prıpa-dech pritahnout nezadoucı pozornost proto je casto vhodne skryt samotnou prıtomnostcitlivych dat cımz se zabyva steganografie
Soucasne nastroje pro digitalnı steganografii jsou casto velmi omezene co se tycehlavne pouziteho steganografickeho prıstupu Snad jedinou znamou vyjimkou je pro-gram TrueCrypt [7] jenz umoznuje v jiz existujıcım sifrovanem oddılu vytvorit dalsımibeznymi motodami neodhalitelny pododdıl ktery lze pri znalosti sifrovacıho klıce pripojitjako bezny souborovy system
Cılem teto prace je navrhnout souborovy system ktery bude umoznovat skryvanısouboru do jinych a za pouzitı technologie FUSE jej implementovat Jejı teoreticka castposkytuje nahled do souvisejıcıch oblastı a naleza se v nı take prehled obecnych konceptupouzıvanych pri implementaci souborovych systemu Dale jsou popsany mozne zpusobyskryvanı dat a v poslednı casti se okrajove venuje kryptografii
Kapitola 3 se zabyva analyzou a spolu s navrhem v kapitole 4 uz popisujı samotnoutvorbu souboroveho systemu umoznujıcı skryvanı dat do ID3 tagu ktere jsou soucastıhudebnıho formatu MP3 Kapitola 5 se venuje resenım konkretnıch problemu v jazyceC++ a v predposlednı 6 casti cele prace jsou zdokumentovany vysledky experimen-talnıho overenı vlastnostı vytvoreneho souboroveho systemu Kapitola 7 praci shrnuje a
5
diskutuje dalsı moznosti rozsırenı
6
Kapitola 2
Teoreticka cast
Tato kapitola se zameruje na prehled souborovych systemu (v anglictine file system dalejen FS) jejich principsect a vyuzitı
Operacnı system GNULinux je inspirovan OX UNIX a jednou z vlastnostı kterousi zachoval je rozdelenı souboru na zakladnıch 6 typu [16]
1 obcejny soubor ndash patrı zde textove spustitelne binarnı soubory obrazky ve for-matu JPEG
2 adresar ndash umoznuje organizovat soubory do stromove struktury
3 symbolicky odkaz ndash zastupce za jiny soubor cıl odkazu je urcen pomocı cestyadresarove struktury je tak mozne vytvaret odkazy i mimo aktualnı svazek
4 specialnı blokovy soubor ndash podstatnou vlastnostı je moznost provadenı zaklad-nıch operacı pomocı adresace bloku Typickym predstavitelem jsou oddıly pevnychdisku
5 specialnı znakovy soubor ndash ctenı a zapis se provadı formou proudu dat po-uzıva se pro koumunikaci s nekterymi periferiemi naprıklad zarızenı pripojenychk seriovemu portu
6 pojmenovana roura ndash je jednım z prostredku komunikace mezi procesy a umoz-nuje manipulaci se standardnım vstupem a vystupem jako operace ctenı a zapissouboru V systemu GNULinux jej lze vytvorit pomocı prıkazu mkfifo
Pro jednoznacnou identifikaci jednoho souboru v ramci souboroveho systemu se pouzıvatermın inode
V systemu Linux se vyuzıvajı systemova volanı i k manipulaci se soubory Zakladnıoperace jsou provadeny pomocı nasledujıcıch volanı (pouze prehled)
bull open - otevrenı souboru pro dalsı praci s jeho obsahem
bull read - ctenı obsahu souboru
7
bull write - zapis do souboru
bull mknod - vytvorenı inode (pouzıvane pro adresare i specialnı soubory)
bull readdir - ctenı obsahu adresare
bull link - vytvorenı noveho odkazu na iuzel
bull unlink - zrusenı odkazu na iuzel souboru
bull chmod - zmena prıstupovych prav k souboru
bull chown - zmena vlastnıka souboru
21 Souborove systemy
Souborove systemy jsou prostredkem ktery umoznuje abstrakci dat formou souborufyzicky zapsanych v uloznych zarızenıch Temi byvajı nejcasteji pevne disky USB flashdisky opticka a paskova zarızenı Jejich obsah je smesicı jednicek a nul kterym davavyznam teprve az souborovy system Podle zpusobu uzitı je muzeme delit do nekolikazakladnıch kategoriı
bull bezne ndash vhodne pro obecne vyuzitı prıkladem jsou ext4 [11] NTFS BTRFS adalsı
bull sıtrsquoove (distribuovane) ndash ulozne zarızenı se fyzicky nenachazı v pocıtaci ale jedostupne skrze sıtrsquoove rozhranı Typickym predstavitelem teto skupiny je NFS [4]
bull specializovane ndash naprıklad pri zalohovanı velkych diskovych polı se casto vyuzı-vajı paskove mechaniky LTO pro ktere byl vyvinut soucasny LTFS [3]
22 Koncepty souborovych systemu
Souborove systemy majı v zakladu spolecny ucel uchovavat a organizovat data Existujerada systemu ruznych vlastnostı ktere vsak vyuzıvajı stejne principy protoze se v pru-behu casu ukazaly jako nejvhodnejsı pro dany ucel V teto casti budou tyto prıstupydetailneji popsany jejich detailnejsı popis lze nalezt v [18]
221 Datove bloky a metody jejich alokace
Datovym blokem oznacujeme nejmensı objem dat se kterym je souborovy system scho-pen pracovat V ruznych systemech je zazity termın alokacnı jednotka coz je synony-mum a s nı souvisı velikost alokacnı jednotky Pokud provedeme zapis souboru o velikostinaprıklad 1 kB pri velikosti bloku 4 kB budou na disk zapsany 4 kB dat i kdyz je vyuzityobsah bloku mensı Tento prıstup je jednoduchy pro organizaci dat ale zpusobuje ztratukapacity disku protoze poslednı ze sekvence bloku nalezıcıch danemu souboru s velkou
8
pravdepodobnostı nebude obsazen az do sveho plneho objemu a je tak pro male souboryneefektivnı
Prıstupu pro alokaci bloku pro zapis noveho souboru existuje nekolik V souborovychsystemech extended file system (ext234) tuto praci obstarava tzv block allocator Tenma prehled o aktualne obsazenych blocıch a ma za ukol vyhledat vhodne volne mısto Dodoby zverejnenı FS ext4 pracoval vzdy nad jednım konkretnım souborem V ext4 ale bylprepracovan protoze tento system vyuzıva tzv extenty coz vyzaduje vetsı kontrolu nadrozmıstenım bloku na disku Extentem oznacujeme (pokud mozno) souvislou sekvencibloku tvorıcı jeden soubor ktera je urcena pocatecnım blokem a delkou Odtud plynezasadnı rozdıl bezne organizace (jejımz prıkladem je souborovy system FAT1) ndash velikostbloku Extenty totiz majı promenlivou delku v zavislosti na obsahu Aby bloky mohlybyt ukladany souvisle vyuzıva se odlozeneho zapisu Pozadavky na zapis bloku nejsouobslouzeny okamzite ale az je jich dostatecne mnozstvı Teprve pak se provadı zapis jakojedina operace Vyuzıvanım extentu odpada nutnost velke rezie pri ukladanı objemnychsouboru Souvisle ctenı je vzhledem k sekvencnı povaze stale prevazne rotacnıch fyzickychmediı vyhodne protoze tak umoznuje maximalne vyuzıt jejich vykon
222 Reprezentace souboru
Soubor je tvoren nazvem atributy a obsahem Nazvu se take nekdy rıka symbolicke jmenoa to proto ze z pohledu souborovych systemu se jedna jen o jiny zpusob identifikaceJednoznacnym identifikatorem je v systemu Linux tzv inode Tento termın je odvozenze slov index node a jedna se o poradove cıslo souboru ve svazku
Nazev souboru je retezec znaku a jeho delka byla napr u souborovych systemuFAT1632 pevna ndash 8 znaku (a to jeste ne vsechny ASCII znaky) pro samotny nazevsouboru a 3 znaky pro prıponu [13] Tento format jmen se uznacuje jako short filenamenebo format 83 Casem se tento prıstup ukazal jako nevyhovujıcı a proto vznikla nad-stavba LFN (long filenames) ktera umoznovala v techto systemech souboru (v dnesnıdobe uz zastaralych) pouzıvat jmena az 255 znaku dlouhe Tato delka je typicka prosystemy ext234 UDF XFS a mnoho dalsıch Nektere systemy majı tuto hranici posu-nutou jeste mnohem dale ndash naprıklad u ReFS je pro nazev souboru vyhrazeno az 32 kBV nazvech souboru take byvajı omezenı na pouzitelne znaky nebo konkretnı retezcektere majı svuj specialnı vyznam Typicky se jedna o retezce
rdquoldquo ci
rdquoldquo Z implementac-
nıch duvodu nebyva povolen znak 0 (ASCII hodnota 0x00)
223 Reprezentace adresaru
Adresar je samostatny typ souboru a jeho obsahem je mnozina souboru Reprezentaciteto mnoziny lze implementovat ruznymi zpusoby z cehoz plynou i prıpadna omezenı namaximalnı pocet souboru obsazenych v jedinem adresari
Souborovy system ext2 ma v kazdem inode rezervovano 12 mıst pro ukazatele nabloky (tzv prıme adresovanı) Pokud je obsah souboru (nebo pocet souboru v adresari)
1File Allocation Table
9
bull Writeback mode ndash provadı se zalohovanı struktury souboroveho systemu takzepri poruse sice nedojde ke ztrate metadat souboroveho systemu ale obsah zapi-sovaneho bloku nemusı byt korektnı To je zpusobeno poradım operacı zapis dozurnalu zapis metadat zapis datoveho bloku
bull Ordered mode ndash podobne jako writeback mode zalohujı se pouze metadataavsak zde je rozdıl v poradı provadenych operacı Nejdrıve se zapisujı data a azpote metadata do zurnalu
bull Data mode ndash nejvyssı uroven ochrany zalohujı se metadata i datove bloky To jeale vyvazeno nizsım vykonem protoze jsou veskera data ukladana dvakrat nejdrıvedo zurnalu a pote na skutecnou adresu
maly vyuzıvajı se prımo tato mısta pro ulozenı dat Delsı obsah se uklada do samostat-nych skupin bloku (tzv neprıme adresovanı prvnı az tretı urovne) ktere jsou adresovanyz mıst prımeho adresovanı
BFS (Berkley Fast Filesystem) pracuje s promennou delkou adresaru trochu jinymzpusobem Pri zakladanı adresare se alokuje prostor nejen pro prave zapisovany obsahale i rezervuje prostor pro prıpadne rozsırenı obsahu Soucastı metadat adresare jsoupro tyto ucely vyhrazeny dva ukazatele Prvnı smeruje na poslednı obsazeny zaznam adruhy na konec celkove alokovane oblasti (obsazena + rezervovana oblast)
224 Zurnalovanı
Pro zabezpecenı konzistence ukladanych dat v prıpade vypadku napajenı byla vyvinutatechnika zurnalovanı Jde o techniku kdy se na disk zapisujı krome uzivatelskych dati dalsı zaznamy ktere umoznujı v prıpade potreby obnovit konkretnı obsah datovehobloku a zajistit tak konzistenci bloku Tento specialnı zaznam se nazyva zurnal a jeto klasicky soubor ktery nenı beznemu uzivateli prıstupny Zurnalovanı lze realizovatpomocı nekolika prıstupu z nichz se vyuzıva predevsım
23 FUSE
FUSE [19] filesystem in userspace je technologie umoznujıcı neprivilegiovanym uzivate-lum pripojovanı a odpojovanı specialnıch souborovych systemu Projekt byl puvodnevyvıjen pro system GNULinux avsak v dnesnı dobe je k dispozici i pro platformyFreeBSD Mac OS X OpenSolaris a rada dalsıch Pri beznem pripojenı svazku pomocımount je totiz nutne mıt opravnenı spravce systemu (root) Implementace FUSE je bez-nym programem ktery je spousten pod aktualne prihlasenym uzivatelem (samozrejmepokud nenı modifikovan prıkazy chmod ci chown) Z tohoto faktu vyplyvajı i dalsı vlast-nosti ze kterych zminme odstınenı programatora od nutnosti znat a dodrzovat pravidlapro tvorbu modulu jadra operacnıho systemu Bezne FS totiz byvajı do jadra zaclenenyprave touto formou
10
231 Struktura
FUSE se sklada ze trı vzajemne komunikujıcıch castı kterymi jsou
bull modul pro jadro ndash drıvejsı verze modulu FUSE byly sıreny samostatne avsak odverze jadra Linuxu 2614 je jiz zaclenen do hlavnı vyvojove vetve nenı protozpravidla nutne jej dodatecne zavadet pomocı modprobe
bull rozhranı knihovny FUSE ndash je nativne tvoreno nekolika hlavickovymi soubory v ja-zyce C poskytuje deklarace metod pro implementaci rady systemovych volanı
bull specialnı soubor devfuse ndash zprostredkovava koumunikaci mezi modulem v jadrea rozhranım knihovny Pri pripojovanı souboroveho systemu vyuzıvajıcı FUSE seprovede otevrenı tohoto specialnıho souboru a nasledna komunikace probıha uz jenskrze takto zıskany popisovac (file descriptor)
Modul v jadre je prave jeden ale rozhranı knihovny je implementovano v rade programo-vacıch jazyku Pro strucny prehled jimi jsou C C++ Java C Haskell Python PerlRuby PHP ci Lua Uplny vypis je dostupny na oficialnıch webovych strankach projektuFUSE Nasleduje obrazek 21 se znaroznenım prubehu systemoveho volanı readdiravsak princip komunikace je spolecny pro vsechna podporovana systemova volanı
11
Obrazek 21 Prubeh zpracovanı pozadavku ve FUSE Obrazek byl prevzat z [19]
Je zde videt prenos pozadavku na zobrazenı obsahu adresare prochazejıcı uzivatel-skym prostorem (userspace) skrze obecnou vrstvu VFS (Virtual File System) a nasled-neho predanı modulu FUSE v jadru systemu To jej dale distribuuje zpet do uzivatel-skeho prostoru kde se nachazı implementace rozhranı FUSE (examplehello) Volanıse vyhodnotı vykonanım prıslusne metody a vysledek operace putuje stejnou cestou zpet
232 Prıklady souborovych systemu vyuzıvajıcı FUSE
Technologie FUSE se drzı hesla systemu UNIXrdquovse je souborldquo a nasla si tak sve prız-
nivce Svedcı o tom mnozstvı vytvorenych souborovych systemu ktere tuto technologiivyuzıvajı Mezi ty znamejsı patrı
bull sshfs [6] ndash umoznuje pripojenı vzdaleneho adresare pomocı protokolu SSH
bull CurlFtpFS [2] ndash zprostredkovava pripojenı FTP serveru jako lokalnıho adresare
bull WikipediaFS [9] ndash prace s clanky z portalu zalozenych na systemu Wiki jakos beznymi soubory
bull BloggerFS [1] ndash manipulace s prıspevky na blogovacım portalu Bloggercom veforme beznych souboru
233 Zpusob pouzitı
Pouzitı knihovny FUSE spocıva ve vlastnı implementaci obsluznych funkcı (tzv han-dlers) pro jednotlive ukony ktere lze se soubory provadet a jejiz nazvy odpovıdajı sys-temovym volanım FUSE definuje pro manipulaci se soubory az 39 (od verze knihovny
12
26) obsluznych funkcı avsak pro zakladnı pouzitı nenı nutne implementovat vsechnyJednoduchy avsak jiz funkcnı souborovy system lze sestavit pomocı getattr openopendir a read Ukazka implementace tohoto FS je v jazyce C na obrazcıch 22 a 23Deklarace vsech obsluznych funkcı lze nalezt v hlavickovem souboru fuseh ktery byva
include ltstdiohgt
include ltfusehgt
static int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
int main(int argc char argv[])
struct fuse_operations fsOperations
fsOperationsgetattr = fuse_getattr
fsOperationsopen = fuse_open
fsOperationsread = fuse_read
fsOperationsreaddir = fuse_readdir
return fuse_main(argc argv ampfsOperations NULL)
Obrazek 22 Ukazka pouzitı knihovny FUSE
umısten v usrincludefuse (tato cesta se ale muze mezi linuxovymi distribucemilisit) Soubory zde nejsou identifikovany pomocı inode jak je zvykem ve skutecnych FSale pouze pomocı cesty kterou lze nalezt ve vetsine obsluznych funkcı na mıste prvnıhoparametru Pokud byla operace provedena korektne obsluzna funkce by mela ve vetsineprıpadu vracet cıslo 0 Vsechny druhy chyb jsou indikovany zapornou hodnotou kon-stant definujıcıch druh chyby Jejich soupis se naleza v hlavickovem souboru errorh
(umıstenı souboru se muze lisit)
24 Zabezpecenı citlivych dat
Potreba chranit data pred cizımi osobami vznikla uz v davnych dobach jeste pred rozvo-jem vypocetnı techniky Jednım z odvetvı ktere se ochranou dat zabyva je kryptografieData lze chranit vıce prostredky a jejich sifrovanı je pouze jednou z aplikacı Nasledujıcıcast poskytuje prehled o dalsıch zpusobech ochrany dat [15]
241 Steganografie
Steganografie spocıva ve skrytı zpravy Zasadnım rozdılem oproti kryptografii je prede-vsım snaha o skrytı samotne existence zpravy V minulosti se vyuzıvaly tzv neviditelne
13
Pro ukazku nasleduje prıklad implementace operace read
int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
char msg[] = Pokusny text pro ctenı
int msgLength = strlen(msg)
if(strcmp(path example) == 0)
memcpy(buffer msg msgLength)
return msgLength
else if(strcmp(path null) == 0)
return 0
else
return -ENOENT
Obrazek 23 Ukazka implementace operace read
inkousty jimiz byla napsana zprava na papır Jejı prıjemce pak cely list nahral a ter-mochemickou reakcı se text objevil Dokonce bylo pouzito i hlavy otroka kdy mu bylanejdrıve oholena hlava a pote na ni vytetovana zprava Az mu vlasy zpet dorostly bylvyslan na cestu pres nepratelske uzemı a prıjemce mu ji opet oholil aby si zpravu mohlprecıst Tento zpusob samozrejme nebyl vzdy vhodny a proto se lide snazili vymysletdalsı zpusoby skrytı dat Pri pouzitı psaneho textu (rukou ci na psacım stroji) jako nos-neho materialu se da vyuzıt mechanismu psacıho stroje Do volneho prostoru mezi radkyse skryvaly zpravy psanım bez barevne pasky takze v papıru zustal pouze otlak pısmenNebo se tajna zprava mnohonasobne zmensila aby pri letmem pohledu pripomınala jed-nolity cerny bod Ten se pak vlepil do tisteneho textu jako tecka na konci vety tzvmikrotecky
242 Digitalnı steganografie
I v digitalnı dobe stale existujı postupy jak skryvat data Naprıklad u fotografiı mu-zeme dobre vyuzıt nedokonalosti lidskeho oka Pokud zmenıme jen nepatrne barevnyodstın v nektere casti fotografie nenı tato uprava na pohled zretelna ndash nemusı se jednato anomalii ale ucel Stejny princip lze aplikovat i na zvuky Hudba se po digitalizacicasto komprimuje Podle druhu pouziteho algoritmu muze dochazet ke ztrate hudebnıinformace Pokud zmenıme nejnizsı bit u cısla reprezentujıcıho frekvenci stejne jakou obrazku nebude tato zmena pri poslechu patrna Tento typ techniky se oznacuje jakozmena hodnoty LSB (least significant bit) Pokud nekdo tento soubor jakkoliv bezneupravı (orıznutı obrazku zmena bitrate zvuku) znamena to ve vetsine prıpadu po-skozenı nebo uplnou ztratu skryte informace U pruznych disku (disket) umı nektere
14
programy zamerne oznacit sektory na jejım magnetickem povrchu jako poskozene Tımsice dojde k castecnemu snızenı kapacity pro bezne soubory ale nehrozı zde nebezpecıprepisu ztracenych dat pri bezne praci Pokud uzivatel chce zapsat soubor na disketuoperacnı system pro nej vyuzije pouze volne sektory ktere jsou v poradku a chybnevzdy preskocı Skrytı dat nemusı ale nutne znamenat rozpoznatelnou zmenu vystupuObrazovy format BMP svou stavbou umoznuje doslova neviditelne skrytı (omezeneho)mnozstvı dat Jedinym prıpadnym vodıtkem k odhalenı je zvyseny objem dat
243 Kryptografie
Kryptografie jinymi slovy sifrovanı je postup transformace originalnı zpravy do podobyktera je v idealnım prıpade citelna pouze se znalostı tzv klıce Prı pouzitı stejne vstupnızpravy sifrovacıho algoritmu ale jineho klıce zıskame odlisny vystup Mıra zabezpecenızpravy zavisı na zvolenem algoritmu a sifrovacım klıci Proto pri chybnem pouzitı nekte-reho z bezne pouzıvanych algoritmu (napr RSA) a klıce (pouzitı retezce
rdquohesloldquo) nemusı
byt pro utocnıka velkou prekazkou zjistit obsah puvodnı zpravySifrovacı algoritmy rozdelujeme do dvou zakladnıch skupin podle typu klıce
bull Symetricka kryptografie ndash pouzıva pro sifrovanı i desifrovanı stejny klıc kteryby mel zustat v tajnosti Patrı zde naprıklad algoritmy DES [14] TwoFish [8] av dnesnı dobe v teto kategorii nejpouzıvanejsı AES [10]
bull Asymetricka kryptografie ndash vyuzıva dva typy klıcu verejny a privatnı Verejnyklıc ktery slouzı pro desifrovanı (uz podle nazvu) je mozne jej zaslat prıjemncisifrovane zpravy beznou nezabezpecenou elektronickou postou nebo jej zverejnitna svych webovych strankach Oproti tomu privatnı klıc musı zustat v tajnostiu sveho majitele Zastupcem teto kategorie je algoritmus RSA [5]
Sifrovana komunikace pak probıha podle nasledujıcıho scenare pripomınajıcıho kla-sickou postovnı korespondenci
1 Odesilatel (osoba A) si zajistı verejny klıc prıjemce (osoba B) naprıklad jejımstazenım z osobnıho blogu osoby B
2 Osoba A zasifruje svou zpravu pomocı verejneho klıce B a odesle ji jako beznye-mail
3 Osoba B zpravu desifruje pomocı sveho privatnıho klıce a zıska tak puvodnıobsah
Oba typy klıcu se generujı vzdy jako par Pro jejich vytvorenı je nutne dodat radunahodnych cısel Jednou z pouzitych metod jejich generovanı je prectenı hodnotynahodne adresy v pameti nebo sledovanı pozice kurzoru mysi uzivatele
15
Kapitola 3
Analyza
V nasledujıcı casti budou popsany pozadavky na navrhovany souborovy system a prehledzakladnıch problemu ktere bude nutne behem navrhu resit
31 Pozadavky na souborovy system
Pro uceleny pohled a dalsı postup je vhodne nejprve specifikovat pozadavky na vytvarenysystem Jsou jimi predevsım
bull Ochrana obsahu FS heslem ndash skryty FS by mel idealne tajit nejen svou vlastnıexistenci ale predevsım by nemel dovolit uzivatelum neznajıcıch klıc prıstupovatk jeho obsahu
bull Existence vıce FS nad jednım ulozistem ndash tento pozadavek muze plnit hned dvefunkce V prve rade jde o castecne nezavisle varianty FS pro organizaci obsahunicmene dalsım dusledkem muze byt jeho vlastnı ochrana Pokud bychom uvazo-vali scenar kdy osoba-utocnık pod pohruzkou donutı svou obetrsquo k vyzrazenı heslado skryteho FS obetrsquo ma sanci sdelit jine nez skutecne heslo a tım dojde ke zprı-stupnenı odlisneho obsahu (pochopitelne za predpokladu ze byl drıve vytvoren)
bull Nezavislost na uloznem mediu ndash knihovna by mela poskytovat dostatecne obecnerozhranı ktere by bylo mozne vyuzıt pro implementaci ruznych typu ulozistrsquo beznutnosti hlubokych zasahu do knihovny samotne Prıkladem typu ulozistrsquo mohoubyt soubory MP3 JPG webova sluzba
bull Alespon castecna odolnost proti chybejıcım fragmentum ndash v prıpade ze bude ulo-zistem naprıklad adresar s MP3 soubory lze v prubehu casu predpokladat jeho mo-difikace ruzne zavazneho charaketru (platı pochopitelne nejen pro soubory MP3)Mohou jimi byt zmena umıstenı souboru v adresarıch i kompletnı odstranenı celehoalba Tyto zasahy ruznou merou ovlivnujı spolehlivost skryteho FS a bude nutneje v navrhu zohlednit
16
bull Jednouzivatelsky rezim ndash skryty FS ze sve podstaty nenı urcen pro kazdeho uziva-tele ktery ma prıstup k ulozisti Predpokladem je uzky okruh osob ktere budouznat heslo pro prıstup
Vyvoj aplikace splnujıcı vyse uvedena kriteria se muze ubırat dvema smery V prve radelze vytvorit tzv aplikaci na mıru To znamena kompletnı prizpusobenı vyvoje zakom-ponovanı optimalizacı vhodnych pro specificke pouzitı atd Dalsım smerem je knihovnaposkytujıcı obecne rozhranı v takove forme aby bylo mozne vyhovet pozadavkum nasystem Vyhodou muze byt dalsı samostatne pouzitı konkretnıch modulu bez nutnostihlubokych zasahu do puvodnıch zdrojovych kodu Konecne rozhodnutı pro perspektiv-nejsı pouzitı tak padlo na variantu vytvorenı knihovny ktera bude schopna vytvorit aspravovat skryty souborovy system
17
Kapitola 4
Navrh souboroveho systemu
Kapitola navrhu popisuje obecne postupy resenı problemu ktere jsou spojeny s nasled-nym vyvojem skryteho souboroveho systemu Jejich soupis je uveden v kapitole 3 Tyjsou dale detailneji rozvedeny v kapitole 5 zabyvajıcı se implementacı
41 Uloziste
Cılem prace je zajistit ukladanı souboru do jinych Umıstenı techto jinych souboru budedale oznacovano jako uloziste
42 Vymezenı termınu
Pro ujasnenı vyznamu nekterych termınu dale obsazenych v teto prace nasleduje jejichprehled s podrobnejsım vysvetlenım
bull hash ndash jednoznacna identifikace prave jedne entitiy v ulozisti
bull fragment ndash souvisı se skrytym souborem a jde o poradove cıslo useku dat kterepredstavuje cast obsahu skryteho souboru Slozenım vsech fragmentu dostanemekompletnı obsah souboru proto jeho hodnota v ramci skryteho FS musı byt jedi-necna
bull blok ndash souvisı s entitou v ulozisti jedna se o poradove cıslo dılcı casti obsahufyzickeho souboru Tento identifikator musı byt unikatnı v ramci hash
bull vnoreny FS ndash samostatny prostor pro skryvanı souboru v ramci stejneho ulozisteImplementace systemu je muze rozlisovat naprıklad pomocı zadaneho hesla
43 Zpusob organizace souboru
Jak jiz bylo v zmıneno v teoreticke casti 221 nejpouzıvanejsımi druhy organizace obsahusouboru je fragmentace a spojita alokace Uloziste je jen obecne rozhranı a muze mıt
18
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
Prılohy 43Seznam prıloh 44
A Obsah CD 45
3
Seznam obrazku
21 Prubeh zpracovanı pozadavku ve FUSE 1222 Ukazka pouzitı knihovny FUSE 1323 Ukazka implementace operace read 14
41 Ukazka obsahu tabulky uchovavajıcı obsah souboru 2042 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru 21
51 Struktura souboru formatu MP3 2552 Struktura obecneho formatu bloku a delky jednotlivych castı 2753 Struktura obsahu bloku se superblokem 2854 Struktura obsahu bloku se serializovanymi entitami 29
61 Prehled namerenych prenosovych rychlostı 38
4
Kapitola 1
Uvod
Dıky masovemu rozsırenı vypocetnı techniky a internetu se dnesnı doba casto oznacujejako doba informacnı Celosvetovy objem informacı neustale rychle roste [17] prıklademmohou byt vedecke clanky kterych je behem jedineho dne verejne publikovano mezisesti a sedmi tisıci Nenı to vsak jediny druh informacı Patrı zde mnoho dalsıch druhuvcetne napr fotografiı z rodinnych oslav nebo soukrome korespondence V techto prı-padech (opomineme-li typicky socialnı sıte) muze byt mnozstvı osob kterym jsou tytoinformace urceny z ruznych duvodu omezeno (rodina pratele ) Lide informace castouchovavajı v pocıtacıch na svych pevnych discıch opatrnejsı z nich je chranı hesly Lzetak omezit prıstup neopravenym osobam a chranit tak data pred prıpadnym zneuzitımPouzitı sifrovanı pro ochranu dat ma vsak omezenı v tom ze skryva pouze obsah data nikoli jiz jejich prıtomnost Potencialnımu utocnıkovi stacı mnohdy jen zjistit hesloatrsquo uz za pomoci utoku hrubou silou slovnıkoveho utoku socialnıho inzenyrstvı nebov extremnım prıpade mucenım Prave prıtomnost sifrovanych dat muze v mnoha prıpa-dech pritahnout nezadoucı pozornost proto je casto vhodne skryt samotnou prıtomnostcitlivych dat cımz se zabyva steganografie
Soucasne nastroje pro digitalnı steganografii jsou casto velmi omezene co se tycehlavne pouziteho steganografickeho prıstupu Snad jedinou znamou vyjimkou je pro-gram TrueCrypt [7] jenz umoznuje v jiz existujıcım sifrovanem oddılu vytvorit dalsımibeznymi motodami neodhalitelny pododdıl ktery lze pri znalosti sifrovacıho klıce pripojitjako bezny souborovy system
Cılem teto prace je navrhnout souborovy system ktery bude umoznovat skryvanısouboru do jinych a za pouzitı technologie FUSE jej implementovat Jejı teoreticka castposkytuje nahled do souvisejıcıch oblastı a naleza se v nı take prehled obecnych konceptupouzıvanych pri implementaci souborovych systemu Dale jsou popsany mozne zpusobyskryvanı dat a v poslednı casti se okrajove venuje kryptografii
Kapitola 3 se zabyva analyzou a spolu s navrhem v kapitole 4 uz popisujı samotnoutvorbu souboroveho systemu umoznujıcı skryvanı dat do ID3 tagu ktere jsou soucastıhudebnıho formatu MP3 Kapitola 5 se venuje resenım konkretnıch problemu v jazyceC++ a v predposlednı 6 casti cele prace jsou zdokumentovany vysledky experimen-talnıho overenı vlastnostı vytvoreneho souboroveho systemu Kapitola 7 praci shrnuje a
5
diskutuje dalsı moznosti rozsırenı
6
Kapitola 2
Teoreticka cast
Tato kapitola se zameruje na prehled souborovych systemu (v anglictine file system dalejen FS) jejich principsect a vyuzitı
Operacnı system GNULinux je inspirovan OX UNIX a jednou z vlastnostı kterousi zachoval je rozdelenı souboru na zakladnıch 6 typu [16]
1 obcejny soubor ndash patrı zde textove spustitelne binarnı soubory obrazky ve for-matu JPEG
2 adresar ndash umoznuje organizovat soubory do stromove struktury
3 symbolicky odkaz ndash zastupce za jiny soubor cıl odkazu je urcen pomocı cestyadresarove struktury je tak mozne vytvaret odkazy i mimo aktualnı svazek
4 specialnı blokovy soubor ndash podstatnou vlastnostı je moznost provadenı zaklad-nıch operacı pomocı adresace bloku Typickym predstavitelem jsou oddıly pevnychdisku
5 specialnı znakovy soubor ndash ctenı a zapis se provadı formou proudu dat po-uzıva se pro koumunikaci s nekterymi periferiemi naprıklad zarızenı pripojenychk seriovemu portu
6 pojmenovana roura ndash je jednım z prostredku komunikace mezi procesy a umoz-nuje manipulaci se standardnım vstupem a vystupem jako operace ctenı a zapissouboru V systemu GNULinux jej lze vytvorit pomocı prıkazu mkfifo
Pro jednoznacnou identifikaci jednoho souboru v ramci souboroveho systemu se pouzıvatermın inode
V systemu Linux se vyuzıvajı systemova volanı i k manipulaci se soubory Zakladnıoperace jsou provadeny pomocı nasledujıcıch volanı (pouze prehled)
bull open - otevrenı souboru pro dalsı praci s jeho obsahem
bull read - ctenı obsahu souboru
7
bull write - zapis do souboru
bull mknod - vytvorenı inode (pouzıvane pro adresare i specialnı soubory)
bull readdir - ctenı obsahu adresare
bull link - vytvorenı noveho odkazu na iuzel
bull unlink - zrusenı odkazu na iuzel souboru
bull chmod - zmena prıstupovych prav k souboru
bull chown - zmena vlastnıka souboru
21 Souborove systemy
Souborove systemy jsou prostredkem ktery umoznuje abstrakci dat formou souborufyzicky zapsanych v uloznych zarızenıch Temi byvajı nejcasteji pevne disky USB flashdisky opticka a paskova zarızenı Jejich obsah je smesicı jednicek a nul kterym davavyznam teprve az souborovy system Podle zpusobu uzitı je muzeme delit do nekolikazakladnıch kategoriı
bull bezne ndash vhodne pro obecne vyuzitı prıkladem jsou ext4 [11] NTFS BTRFS adalsı
bull sıtrsquoove (distribuovane) ndash ulozne zarızenı se fyzicky nenachazı v pocıtaci ale jedostupne skrze sıtrsquoove rozhranı Typickym predstavitelem teto skupiny je NFS [4]
bull specializovane ndash naprıklad pri zalohovanı velkych diskovych polı se casto vyuzı-vajı paskove mechaniky LTO pro ktere byl vyvinut soucasny LTFS [3]
22 Koncepty souborovych systemu
Souborove systemy majı v zakladu spolecny ucel uchovavat a organizovat data Existujerada systemu ruznych vlastnostı ktere vsak vyuzıvajı stejne principy protoze se v pru-behu casu ukazaly jako nejvhodnejsı pro dany ucel V teto casti budou tyto prıstupydetailneji popsany jejich detailnejsı popis lze nalezt v [18]
221 Datove bloky a metody jejich alokace
Datovym blokem oznacujeme nejmensı objem dat se kterym je souborovy system scho-pen pracovat V ruznych systemech je zazity termın alokacnı jednotka coz je synony-mum a s nı souvisı velikost alokacnı jednotky Pokud provedeme zapis souboru o velikostinaprıklad 1 kB pri velikosti bloku 4 kB budou na disk zapsany 4 kB dat i kdyz je vyuzityobsah bloku mensı Tento prıstup je jednoduchy pro organizaci dat ale zpusobuje ztratukapacity disku protoze poslednı ze sekvence bloku nalezıcıch danemu souboru s velkou
8
pravdepodobnostı nebude obsazen az do sveho plneho objemu a je tak pro male souboryneefektivnı
Prıstupu pro alokaci bloku pro zapis noveho souboru existuje nekolik V souborovychsystemech extended file system (ext234) tuto praci obstarava tzv block allocator Tenma prehled o aktualne obsazenych blocıch a ma za ukol vyhledat vhodne volne mısto Dodoby zverejnenı FS ext4 pracoval vzdy nad jednım konkretnım souborem V ext4 ale bylprepracovan protoze tento system vyuzıva tzv extenty coz vyzaduje vetsı kontrolu nadrozmıstenım bloku na disku Extentem oznacujeme (pokud mozno) souvislou sekvencibloku tvorıcı jeden soubor ktera je urcena pocatecnım blokem a delkou Odtud plynezasadnı rozdıl bezne organizace (jejımz prıkladem je souborovy system FAT1) ndash velikostbloku Extenty totiz majı promenlivou delku v zavislosti na obsahu Aby bloky mohlybyt ukladany souvisle vyuzıva se odlozeneho zapisu Pozadavky na zapis bloku nejsouobslouzeny okamzite ale az je jich dostatecne mnozstvı Teprve pak se provadı zapis jakojedina operace Vyuzıvanım extentu odpada nutnost velke rezie pri ukladanı objemnychsouboru Souvisle ctenı je vzhledem k sekvencnı povaze stale prevazne rotacnıch fyzickychmediı vyhodne protoze tak umoznuje maximalne vyuzıt jejich vykon
222 Reprezentace souboru
Soubor je tvoren nazvem atributy a obsahem Nazvu se take nekdy rıka symbolicke jmenoa to proto ze z pohledu souborovych systemu se jedna jen o jiny zpusob identifikaceJednoznacnym identifikatorem je v systemu Linux tzv inode Tento termın je odvozenze slov index node a jedna se o poradove cıslo souboru ve svazku
Nazev souboru je retezec znaku a jeho delka byla napr u souborovych systemuFAT1632 pevna ndash 8 znaku (a to jeste ne vsechny ASCII znaky) pro samotny nazevsouboru a 3 znaky pro prıponu [13] Tento format jmen se uznacuje jako short filenamenebo format 83 Casem se tento prıstup ukazal jako nevyhovujıcı a proto vznikla nad-stavba LFN (long filenames) ktera umoznovala v techto systemech souboru (v dnesnıdobe uz zastaralych) pouzıvat jmena az 255 znaku dlouhe Tato delka je typicka prosystemy ext234 UDF XFS a mnoho dalsıch Nektere systemy majı tuto hranici posu-nutou jeste mnohem dale ndash naprıklad u ReFS je pro nazev souboru vyhrazeno az 32 kBV nazvech souboru take byvajı omezenı na pouzitelne znaky nebo konkretnı retezcektere majı svuj specialnı vyznam Typicky se jedna o retezce
rdquoldquo ci
rdquoldquo Z implementac-
nıch duvodu nebyva povolen znak 0 (ASCII hodnota 0x00)
223 Reprezentace adresaru
Adresar je samostatny typ souboru a jeho obsahem je mnozina souboru Reprezentaciteto mnoziny lze implementovat ruznymi zpusoby z cehoz plynou i prıpadna omezenı namaximalnı pocet souboru obsazenych v jedinem adresari
Souborovy system ext2 ma v kazdem inode rezervovano 12 mıst pro ukazatele nabloky (tzv prıme adresovanı) Pokud je obsah souboru (nebo pocet souboru v adresari)
1File Allocation Table
9
bull Writeback mode ndash provadı se zalohovanı struktury souboroveho systemu takzepri poruse sice nedojde ke ztrate metadat souboroveho systemu ale obsah zapi-sovaneho bloku nemusı byt korektnı To je zpusobeno poradım operacı zapis dozurnalu zapis metadat zapis datoveho bloku
bull Ordered mode ndash podobne jako writeback mode zalohujı se pouze metadataavsak zde je rozdıl v poradı provadenych operacı Nejdrıve se zapisujı data a azpote metadata do zurnalu
bull Data mode ndash nejvyssı uroven ochrany zalohujı se metadata i datove bloky To jeale vyvazeno nizsım vykonem protoze jsou veskera data ukladana dvakrat nejdrıvedo zurnalu a pote na skutecnou adresu
maly vyuzıvajı se prımo tato mısta pro ulozenı dat Delsı obsah se uklada do samostat-nych skupin bloku (tzv neprıme adresovanı prvnı az tretı urovne) ktere jsou adresovanyz mıst prımeho adresovanı
BFS (Berkley Fast Filesystem) pracuje s promennou delkou adresaru trochu jinymzpusobem Pri zakladanı adresare se alokuje prostor nejen pro prave zapisovany obsahale i rezervuje prostor pro prıpadne rozsırenı obsahu Soucastı metadat adresare jsoupro tyto ucely vyhrazeny dva ukazatele Prvnı smeruje na poslednı obsazeny zaznam adruhy na konec celkove alokovane oblasti (obsazena + rezervovana oblast)
224 Zurnalovanı
Pro zabezpecenı konzistence ukladanych dat v prıpade vypadku napajenı byla vyvinutatechnika zurnalovanı Jde o techniku kdy se na disk zapisujı krome uzivatelskych dati dalsı zaznamy ktere umoznujı v prıpade potreby obnovit konkretnı obsah datovehobloku a zajistit tak konzistenci bloku Tento specialnı zaznam se nazyva zurnal a jeto klasicky soubor ktery nenı beznemu uzivateli prıstupny Zurnalovanı lze realizovatpomocı nekolika prıstupu z nichz se vyuzıva predevsım
23 FUSE
FUSE [19] filesystem in userspace je technologie umoznujıcı neprivilegiovanym uzivate-lum pripojovanı a odpojovanı specialnıch souborovych systemu Projekt byl puvodnevyvıjen pro system GNULinux avsak v dnesnı dobe je k dispozici i pro platformyFreeBSD Mac OS X OpenSolaris a rada dalsıch Pri beznem pripojenı svazku pomocımount je totiz nutne mıt opravnenı spravce systemu (root) Implementace FUSE je bez-nym programem ktery je spousten pod aktualne prihlasenym uzivatelem (samozrejmepokud nenı modifikovan prıkazy chmod ci chown) Z tohoto faktu vyplyvajı i dalsı vlast-nosti ze kterych zminme odstınenı programatora od nutnosti znat a dodrzovat pravidlapro tvorbu modulu jadra operacnıho systemu Bezne FS totiz byvajı do jadra zaclenenyprave touto formou
10
231 Struktura
FUSE se sklada ze trı vzajemne komunikujıcıch castı kterymi jsou
bull modul pro jadro ndash drıvejsı verze modulu FUSE byly sıreny samostatne avsak odverze jadra Linuxu 2614 je jiz zaclenen do hlavnı vyvojove vetve nenı protozpravidla nutne jej dodatecne zavadet pomocı modprobe
bull rozhranı knihovny FUSE ndash je nativne tvoreno nekolika hlavickovymi soubory v ja-zyce C poskytuje deklarace metod pro implementaci rady systemovych volanı
bull specialnı soubor devfuse ndash zprostredkovava koumunikaci mezi modulem v jadrea rozhranım knihovny Pri pripojovanı souboroveho systemu vyuzıvajıcı FUSE seprovede otevrenı tohoto specialnıho souboru a nasledna komunikace probıha uz jenskrze takto zıskany popisovac (file descriptor)
Modul v jadre je prave jeden ale rozhranı knihovny je implementovano v rade programo-vacıch jazyku Pro strucny prehled jimi jsou C C++ Java C Haskell Python PerlRuby PHP ci Lua Uplny vypis je dostupny na oficialnıch webovych strankach projektuFUSE Nasleduje obrazek 21 se znaroznenım prubehu systemoveho volanı readdiravsak princip komunikace je spolecny pro vsechna podporovana systemova volanı
11
Obrazek 21 Prubeh zpracovanı pozadavku ve FUSE Obrazek byl prevzat z [19]
Je zde videt prenos pozadavku na zobrazenı obsahu adresare prochazejıcı uzivatel-skym prostorem (userspace) skrze obecnou vrstvu VFS (Virtual File System) a nasled-neho predanı modulu FUSE v jadru systemu To jej dale distribuuje zpet do uzivatel-skeho prostoru kde se nachazı implementace rozhranı FUSE (examplehello) Volanıse vyhodnotı vykonanım prıslusne metody a vysledek operace putuje stejnou cestou zpet
232 Prıklady souborovych systemu vyuzıvajıcı FUSE
Technologie FUSE se drzı hesla systemu UNIXrdquovse je souborldquo a nasla si tak sve prız-
nivce Svedcı o tom mnozstvı vytvorenych souborovych systemu ktere tuto technologiivyuzıvajı Mezi ty znamejsı patrı
bull sshfs [6] ndash umoznuje pripojenı vzdaleneho adresare pomocı protokolu SSH
bull CurlFtpFS [2] ndash zprostredkovava pripojenı FTP serveru jako lokalnıho adresare
bull WikipediaFS [9] ndash prace s clanky z portalu zalozenych na systemu Wiki jakos beznymi soubory
bull BloggerFS [1] ndash manipulace s prıspevky na blogovacım portalu Bloggercom veforme beznych souboru
233 Zpusob pouzitı
Pouzitı knihovny FUSE spocıva ve vlastnı implementaci obsluznych funkcı (tzv han-dlers) pro jednotlive ukony ktere lze se soubory provadet a jejiz nazvy odpovıdajı sys-temovym volanım FUSE definuje pro manipulaci se soubory az 39 (od verze knihovny
12
26) obsluznych funkcı avsak pro zakladnı pouzitı nenı nutne implementovat vsechnyJednoduchy avsak jiz funkcnı souborovy system lze sestavit pomocı getattr openopendir a read Ukazka implementace tohoto FS je v jazyce C na obrazcıch 22 a 23Deklarace vsech obsluznych funkcı lze nalezt v hlavickovem souboru fuseh ktery byva
include ltstdiohgt
include ltfusehgt
static int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
int main(int argc char argv[])
struct fuse_operations fsOperations
fsOperationsgetattr = fuse_getattr
fsOperationsopen = fuse_open
fsOperationsread = fuse_read
fsOperationsreaddir = fuse_readdir
return fuse_main(argc argv ampfsOperations NULL)
Obrazek 22 Ukazka pouzitı knihovny FUSE
umısten v usrincludefuse (tato cesta se ale muze mezi linuxovymi distribucemilisit) Soubory zde nejsou identifikovany pomocı inode jak je zvykem ve skutecnych FSale pouze pomocı cesty kterou lze nalezt ve vetsine obsluznych funkcı na mıste prvnıhoparametru Pokud byla operace provedena korektne obsluzna funkce by mela ve vetsineprıpadu vracet cıslo 0 Vsechny druhy chyb jsou indikovany zapornou hodnotou kon-stant definujıcıch druh chyby Jejich soupis se naleza v hlavickovem souboru errorh
(umıstenı souboru se muze lisit)
24 Zabezpecenı citlivych dat
Potreba chranit data pred cizımi osobami vznikla uz v davnych dobach jeste pred rozvo-jem vypocetnı techniky Jednım z odvetvı ktere se ochranou dat zabyva je kryptografieData lze chranit vıce prostredky a jejich sifrovanı je pouze jednou z aplikacı Nasledujıcıcast poskytuje prehled o dalsıch zpusobech ochrany dat [15]
241 Steganografie
Steganografie spocıva ve skrytı zpravy Zasadnım rozdılem oproti kryptografii je prede-vsım snaha o skrytı samotne existence zpravy V minulosti se vyuzıvaly tzv neviditelne
13
Pro ukazku nasleduje prıklad implementace operace read
int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
char msg[] = Pokusny text pro ctenı
int msgLength = strlen(msg)
if(strcmp(path example) == 0)
memcpy(buffer msg msgLength)
return msgLength
else if(strcmp(path null) == 0)
return 0
else
return -ENOENT
Obrazek 23 Ukazka implementace operace read
inkousty jimiz byla napsana zprava na papır Jejı prıjemce pak cely list nahral a ter-mochemickou reakcı se text objevil Dokonce bylo pouzito i hlavy otroka kdy mu bylanejdrıve oholena hlava a pote na ni vytetovana zprava Az mu vlasy zpet dorostly bylvyslan na cestu pres nepratelske uzemı a prıjemce mu ji opet oholil aby si zpravu mohlprecıst Tento zpusob samozrejme nebyl vzdy vhodny a proto se lide snazili vymysletdalsı zpusoby skrytı dat Pri pouzitı psaneho textu (rukou ci na psacım stroji) jako nos-neho materialu se da vyuzıt mechanismu psacıho stroje Do volneho prostoru mezi radkyse skryvaly zpravy psanım bez barevne pasky takze v papıru zustal pouze otlak pısmenNebo se tajna zprava mnohonasobne zmensila aby pri letmem pohledu pripomınala jed-nolity cerny bod Ten se pak vlepil do tisteneho textu jako tecka na konci vety tzvmikrotecky
242 Digitalnı steganografie
I v digitalnı dobe stale existujı postupy jak skryvat data Naprıklad u fotografiı mu-zeme dobre vyuzıt nedokonalosti lidskeho oka Pokud zmenıme jen nepatrne barevnyodstın v nektere casti fotografie nenı tato uprava na pohled zretelna ndash nemusı se jednato anomalii ale ucel Stejny princip lze aplikovat i na zvuky Hudba se po digitalizacicasto komprimuje Podle druhu pouziteho algoritmu muze dochazet ke ztrate hudebnıinformace Pokud zmenıme nejnizsı bit u cısla reprezentujıcıho frekvenci stejne jakou obrazku nebude tato zmena pri poslechu patrna Tento typ techniky se oznacuje jakozmena hodnoty LSB (least significant bit) Pokud nekdo tento soubor jakkoliv bezneupravı (orıznutı obrazku zmena bitrate zvuku) znamena to ve vetsine prıpadu po-skozenı nebo uplnou ztratu skryte informace U pruznych disku (disket) umı nektere
14
programy zamerne oznacit sektory na jejım magnetickem povrchu jako poskozene Tımsice dojde k castecnemu snızenı kapacity pro bezne soubory ale nehrozı zde nebezpecıprepisu ztracenych dat pri bezne praci Pokud uzivatel chce zapsat soubor na disketuoperacnı system pro nej vyuzije pouze volne sektory ktere jsou v poradku a chybnevzdy preskocı Skrytı dat nemusı ale nutne znamenat rozpoznatelnou zmenu vystupuObrazovy format BMP svou stavbou umoznuje doslova neviditelne skrytı (omezeneho)mnozstvı dat Jedinym prıpadnym vodıtkem k odhalenı je zvyseny objem dat
243 Kryptografie
Kryptografie jinymi slovy sifrovanı je postup transformace originalnı zpravy do podobyktera je v idealnım prıpade citelna pouze se znalostı tzv klıce Prı pouzitı stejne vstupnızpravy sifrovacıho algoritmu ale jineho klıce zıskame odlisny vystup Mıra zabezpecenızpravy zavisı na zvolenem algoritmu a sifrovacım klıci Proto pri chybnem pouzitı nekte-reho z bezne pouzıvanych algoritmu (napr RSA) a klıce (pouzitı retezce
rdquohesloldquo) nemusı
byt pro utocnıka velkou prekazkou zjistit obsah puvodnı zpravySifrovacı algoritmy rozdelujeme do dvou zakladnıch skupin podle typu klıce
bull Symetricka kryptografie ndash pouzıva pro sifrovanı i desifrovanı stejny klıc kteryby mel zustat v tajnosti Patrı zde naprıklad algoritmy DES [14] TwoFish [8] av dnesnı dobe v teto kategorii nejpouzıvanejsı AES [10]
bull Asymetricka kryptografie ndash vyuzıva dva typy klıcu verejny a privatnı Verejnyklıc ktery slouzı pro desifrovanı (uz podle nazvu) je mozne jej zaslat prıjemncisifrovane zpravy beznou nezabezpecenou elektronickou postou nebo jej zverejnitna svych webovych strankach Oproti tomu privatnı klıc musı zustat v tajnostiu sveho majitele Zastupcem teto kategorie je algoritmus RSA [5]
Sifrovana komunikace pak probıha podle nasledujıcıho scenare pripomınajıcıho kla-sickou postovnı korespondenci
1 Odesilatel (osoba A) si zajistı verejny klıc prıjemce (osoba B) naprıklad jejımstazenım z osobnıho blogu osoby B
2 Osoba A zasifruje svou zpravu pomocı verejneho klıce B a odesle ji jako beznye-mail
3 Osoba B zpravu desifruje pomocı sveho privatnıho klıce a zıska tak puvodnıobsah
Oba typy klıcu se generujı vzdy jako par Pro jejich vytvorenı je nutne dodat radunahodnych cısel Jednou z pouzitych metod jejich generovanı je prectenı hodnotynahodne adresy v pameti nebo sledovanı pozice kurzoru mysi uzivatele
15
Kapitola 3
Analyza
V nasledujıcı casti budou popsany pozadavky na navrhovany souborovy system a prehledzakladnıch problemu ktere bude nutne behem navrhu resit
31 Pozadavky na souborovy system
Pro uceleny pohled a dalsı postup je vhodne nejprve specifikovat pozadavky na vytvarenysystem Jsou jimi predevsım
bull Ochrana obsahu FS heslem ndash skryty FS by mel idealne tajit nejen svou vlastnıexistenci ale predevsım by nemel dovolit uzivatelum neznajıcıch klıc prıstupovatk jeho obsahu
bull Existence vıce FS nad jednım ulozistem ndash tento pozadavek muze plnit hned dvefunkce V prve rade jde o castecne nezavisle varianty FS pro organizaci obsahunicmene dalsım dusledkem muze byt jeho vlastnı ochrana Pokud bychom uvazo-vali scenar kdy osoba-utocnık pod pohruzkou donutı svou obetrsquo k vyzrazenı heslado skryteho FS obetrsquo ma sanci sdelit jine nez skutecne heslo a tım dojde ke zprı-stupnenı odlisneho obsahu (pochopitelne za predpokladu ze byl drıve vytvoren)
bull Nezavislost na uloznem mediu ndash knihovna by mela poskytovat dostatecne obecnerozhranı ktere by bylo mozne vyuzıt pro implementaci ruznych typu ulozistrsquo beznutnosti hlubokych zasahu do knihovny samotne Prıkladem typu ulozistrsquo mohoubyt soubory MP3 JPG webova sluzba
bull Alespon castecna odolnost proti chybejıcım fragmentum ndash v prıpade ze bude ulo-zistem naprıklad adresar s MP3 soubory lze v prubehu casu predpokladat jeho mo-difikace ruzne zavazneho charaketru (platı pochopitelne nejen pro soubory MP3)Mohou jimi byt zmena umıstenı souboru v adresarıch i kompletnı odstranenı celehoalba Tyto zasahy ruznou merou ovlivnujı spolehlivost skryteho FS a bude nutneje v navrhu zohlednit
16
bull Jednouzivatelsky rezim ndash skryty FS ze sve podstaty nenı urcen pro kazdeho uziva-tele ktery ma prıstup k ulozisti Predpokladem je uzky okruh osob ktere budouznat heslo pro prıstup
Vyvoj aplikace splnujıcı vyse uvedena kriteria se muze ubırat dvema smery V prve radelze vytvorit tzv aplikaci na mıru To znamena kompletnı prizpusobenı vyvoje zakom-ponovanı optimalizacı vhodnych pro specificke pouzitı atd Dalsım smerem je knihovnaposkytujıcı obecne rozhranı v takove forme aby bylo mozne vyhovet pozadavkum nasystem Vyhodou muze byt dalsı samostatne pouzitı konkretnıch modulu bez nutnostihlubokych zasahu do puvodnıch zdrojovych kodu Konecne rozhodnutı pro perspektiv-nejsı pouzitı tak padlo na variantu vytvorenı knihovny ktera bude schopna vytvorit aspravovat skryty souborovy system
17
Kapitola 4
Navrh souboroveho systemu
Kapitola navrhu popisuje obecne postupy resenı problemu ktere jsou spojeny s nasled-nym vyvojem skryteho souboroveho systemu Jejich soupis je uveden v kapitole 3 Tyjsou dale detailneji rozvedeny v kapitole 5 zabyvajıcı se implementacı
41 Uloziste
Cılem prace je zajistit ukladanı souboru do jinych Umıstenı techto jinych souboru budedale oznacovano jako uloziste
42 Vymezenı termınu
Pro ujasnenı vyznamu nekterych termınu dale obsazenych v teto prace nasleduje jejichprehled s podrobnejsım vysvetlenım
bull hash ndash jednoznacna identifikace prave jedne entitiy v ulozisti
bull fragment ndash souvisı se skrytym souborem a jde o poradove cıslo useku dat kterepredstavuje cast obsahu skryteho souboru Slozenım vsech fragmentu dostanemekompletnı obsah souboru proto jeho hodnota v ramci skryteho FS musı byt jedi-necna
bull blok ndash souvisı s entitou v ulozisti jedna se o poradove cıslo dılcı casti obsahufyzickeho souboru Tento identifikator musı byt unikatnı v ramci hash
bull vnoreny FS ndash samostatny prostor pro skryvanı souboru v ramci stejneho ulozisteImplementace systemu je muze rozlisovat naprıklad pomocı zadaneho hesla
43 Zpusob organizace souboru
Jak jiz bylo v zmıneno v teoreticke casti 221 nejpouzıvanejsımi druhy organizace obsahusouboru je fragmentace a spojita alokace Uloziste je jen obecne rozhranı a muze mıt
18
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
Seznam obrazku
21 Prubeh zpracovanı pozadavku ve FUSE 1222 Ukazka pouzitı knihovny FUSE 1323 Ukazka implementace operace read 14
41 Ukazka obsahu tabulky uchovavajıcı obsah souboru 2042 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru 21
51 Struktura souboru formatu MP3 2552 Struktura obecneho formatu bloku a delky jednotlivych castı 2753 Struktura obsahu bloku se superblokem 2854 Struktura obsahu bloku se serializovanymi entitami 29
61 Prehled namerenych prenosovych rychlostı 38
4
Kapitola 1
Uvod
Dıky masovemu rozsırenı vypocetnı techniky a internetu se dnesnı doba casto oznacujejako doba informacnı Celosvetovy objem informacı neustale rychle roste [17] prıklademmohou byt vedecke clanky kterych je behem jedineho dne verejne publikovano mezisesti a sedmi tisıci Nenı to vsak jediny druh informacı Patrı zde mnoho dalsıch druhuvcetne napr fotografiı z rodinnych oslav nebo soukrome korespondence V techto prı-padech (opomineme-li typicky socialnı sıte) muze byt mnozstvı osob kterym jsou tytoinformace urceny z ruznych duvodu omezeno (rodina pratele ) Lide informace castouchovavajı v pocıtacıch na svych pevnych discıch opatrnejsı z nich je chranı hesly Lzetak omezit prıstup neopravenym osobam a chranit tak data pred prıpadnym zneuzitımPouzitı sifrovanı pro ochranu dat ma vsak omezenı v tom ze skryva pouze obsah data nikoli jiz jejich prıtomnost Potencialnımu utocnıkovi stacı mnohdy jen zjistit hesloatrsquo uz za pomoci utoku hrubou silou slovnıkoveho utoku socialnıho inzenyrstvı nebov extremnım prıpade mucenım Prave prıtomnost sifrovanych dat muze v mnoha prıpa-dech pritahnout nezadoucı pozornost proto je casto vhodne skryt samotnou prıtomnostcitlivych dat cımz se zabyva steganografie
Soucasne nastroje pro digitalnı steganografii jsou casto velmi omezene co se tycehlavne pouziteho steganografickeho prıstupu Snad jedinou znamou vyjimkou je pro-gram TrueCrypt [7] jenz umoznuje v jiz existujıcım sifrovanem oddılu vytvorit dalsımibeznymi motodami neodhalitelny pododdıl ktery lze pri znalosti sifrovacıho klıce pripojitjako bezny souborovy system
Cılem teto prace je navrhnout souborovy system ktery bude umoznovat skryvanısouboru do jinych a za pouzitı technologie FUSE jej implementovat Jejı teoreticka castposkytuje nahled do souvisejıcıch oblastı a naleza se v nı take prehled obecnych konceptupouzıvanych pri implementaci souborovych systemu Dale jsou popsany mozne zpusobyskryvanı dat a v poslednı casti se okrajove venuje kryptografii
Kapitola 3 se zabyva analyzou a spolu s navrhem v kapitole 4 uz popisujı samotnoutvorbu souboroveho systemu umoznujıcı skryvanı dat do ID3 tagu ktere jsou soucastıhudebnıho formatu MP3 Kapitola 5 se venuje resenım konkretnıch problemu v jazyceC++ a v predposlednı 6 casti cele prace jsou zdokumentovany vysledky experimen-talnıho overenı vlastnostı vytvoreneho souboroveho systemu Kapitola 7 praci shrnuje a
5
diskutuje dalsı moznosti rozsırenı
6
Kapitola 2
Teoreticka cast
Tato kapitola se zameruje na prehled souborovych systemu (v anglictine file system dalejen FS) jejich principsect a vyuzitı
Operacnı system GNULinux je inspirovan OX UNIX a jednou z vlastnostı kterousi zachoval je rozdelenı souboru na zakladnıch 6 typu [16]
1 obcejny soubor ndash patrı zde textove spustitelne binarnı soubory obrazky ve for-matu JPEG
2 adresar ndash umoznuje organizovat soubory do stromove struktury
3 symbolicky odkaz ndash zastupce za jiny soubor cıl odkazu je urcen pomocı cestyadresarove struktury je tak mozne vytvaret odkazy i mimo aktualnı svazek
4 specialnı blokovy soubor ndash podstatnou vlastnostı je moznost provadenı zaklad-nıch operacı pomocı adresace bloku Typickym predstavitelem jsou oddıly pevnychdisku
5 specialnı znakovy soubor ndash ctenı a zapis se provadı formou proudu dat po-uzıva se pro koumunikaci s nekterymi periferiemi naprıklad zarızenı pripojenychk seriovemu portu
6 pojmenovana roura ndash je jednım z prostredku komunikace mezi procesy a umoz-nuje manipulaci se standardnım vstupem a vystupem jako operace ctenı a zapissouboru V systemu GNULinux jej lze vytvorit pomocı prıkazu mkfifo
Pro jednoznacnou identifikaci jednoho souboru v ramci souboroveho systemu se pouzıvatermın inode
V systemu Linux se vyuzıvajı systemova volanı i k manipulaci se soubory Zakladnıoperace jsou provadeny pomocı nasledujıcıch volanı (pouze prehled)
bull open - otevrenı souboru pro dalsı praci s jeho obsahem
bull read - ctenı obsahu souboru
7
bull write - zapis do souboru
bull mknod - vytvorenı inode (pouzıvane pro adresare i specialnı soubory)
bull readdir - ctenı obsahu adresare
bull link - vytvorenı noveho odkazu na iuzel
bull unlink - zrusenı odkazu na iuzel souboru
bull chmod - zmena prıstupovych prav k souboru
bull chown - zmena vlastnıka souboru
21 Souborove systemy
Souborove systemy jsou prostredkem ktery umoznuje abstrakci dat formou souborufyzicky zapsanych v uloznych zarızenıch Temi byvajı nejcasteji pevne disky USB flashdisky opticka a paskova zarızenı Jejich obsah je smesicı jednicek a nul kterym davavyznam teprve az souborovy system Podle zpusobu uzitı je muzeme delit do nekolikazakladnıch kategoriı
bull bezne ndash vhodne pro obecne vyuzitı prıkladem jsou ext4 [11] NTFS BTRFS adalsı
bull sıtrsquoove (distribuovane) ndash ulozne zarızenı se fyzicky nenachazı v pocıtaci ale jedostupne skrze sıtrsquoove rozhranı Typickym predstavitelem teto skupiny je NFS [4]
bull specializovane ndash naprıklad pri zalohovanı velkych diskovych polı se casto vyuzı-vajı paskove mechaniky LTO pro ktere byl vyvinut soucasny LTFS [3]
22 Koncepty souborovych systemu
Souborove systemy majı v zakladu spolecny ucel uchovavat a organizovat data Existujerada systemu ruznych vlastnostı ktere vsak vyuzıvajı stejne principy protoze se v pru-behu casu ukazaly jako nejvhodnejsı pro dany ucel V teto casti budou tyto prıstupydetailneji popsany jejich detailnejsı popis lze nalezt v [18]
221 Datove bloky a metody jejich alokace
Datovym blokem oznacujeme nejmensı objem dat se kterym je souborovy system scho-pen pracovat V ruznych systemech je zazity termın alokacnı jednotka coz je synony-mum a s nı souvisı velikost alokacnı jednotky Pokud provedeme zapis souboru o velikostinaprıklad 1 kB pri velikosti bloku 4 kB budou na disk zapsany 4 kB dat i kdyz je vyuzityobsah bloku mensı Tento prıstup je jednoduchy pro organizaci dat ale zpusobuje ztratukapacity disku protoze poslednı ze sekvence bloku nalezıcıch danemu souboru s velkou
8
pravdepodobnostı nebude obsazen az do sveho plneho objemu a je tak pro male souboryneefektivnı
Prıstupu pro alokaci bloku pro zapis noveho souboru existuje nekolik V souborovychsystemech extended file system (ext234) tuto praci obstarava tzv block allocator Tenma prehled o aktualne obsazenych blocıch a ma za ukol vyhledat vhodne volne mısto Dodoby zverejnenı FS ext4 pracoval vzdy nad jednım konkretnım souborem V ext4 ale bylprepracovan protoze tento system vyuzıva tzv extenty coz vyzaduje vetsı kontrolu nadrozmıstenım bloku na disku Extentem oznacujeme (pokud mozno) souvislou sekvencibloku tvorıcı jeden soubor ktera je urcena pocatecnım blokem a delkou Odtud plynezasadnı rozdıl bezne organizace (jejımz prıkladem je souborovy system FAT1) ndash velikostbloku Extenty totiz majı promenlivou delku v zavislosti na obsahu Aby bloky mohlybyt ukladany souvisle vyuzıva se odlozeneho zapisu Pozadavky na zapis bloku nejsouobslouzeny okamzite ale az je jich dostatecne mnozstvı Teprve pak se provadı zapis jakojedina operace Vyuzıvanım extentu odpada nutnost velke rezie pri ukladanı objemnychsouboru Souvisle ctenı je vzhledem k sekvencnı povaze stale prevazne rotacnıch fyzickychmediı vyhodne protoze tak umoznuje maximalne vyuzıt jejich vykon
222 Reprezentace souboru
Soubor je tvoren nazvem atributy a obsahem Nazvu se take nekdy rıka symbolicke jmenoa to proto ze z pohledu souborovych systemu se jedna jen o jiny zpusob identifikaceJednoznacnym identifikatorem je v systemu Linux tzv inode Tento termın je odvozenze slov index node a jedna se o poradove cıslo souboru ve svazku
Nazev souboru je retezec znaku a jeho delka byla napr u souborovych systemuFAT1632 pevna ndash 8 znaku (a to jeste ne vsechny ASCII znaky) pro samotny nazevsouboru a 3 znaky pro prıponu [13] Tento format jmen se uznacuje jako short filenamenebo format 83 Casem se tento prıstup ukazal jako nevyhovujıcı a proto vznikla nad-stavba LFN (long filenames) ktera umoznovala v techto systemech souboru (v dnesnıdobe uz zastaralych) pouzıvat jmena az 255 znaku dlouhe Tato delka je typicka prosystemy ext234 UDF XFS a mnoho dalsıch Nektere systemy majı tuto hranici posu-nutou jeste mnohem dale ndash naprıklad u ReFS je pro nazev souboru vyhrazeno az 32 kBV nazvech souboru take byvajı omezenı na pouzitelne znaky nebo konkretnı retezcektere majı svuj specialnı vyznam Typicky se jedna o retezce
rdquoldquo ci
rdquoldquo Z implementac-
nıch duvodu nebyva povolen znak 0 (ASCII hodnota 0x00)
223 Reprezentace adresaru
Adresar je samostatny typ souboru a jeho obsahem je mnozina souboru Reprezentaciteto mnoziny lze implementovat ruznymi zpusoby z cehoz plynou i prıpadna omezenı namaximalnı pocet souboru obsazenych v jedinem adresari
Souborovy system ext2 ma v kazdem inode rezervovano 12 mıst pro ukazatele nabloky (tzv prıme adresovanı) Pokud je obsah souboru (nebo pocet souboru v adresari)
1File Allocation Table
9
bull Writeback mode ndash provadı se zalohovanı struktury souboroveho systemu takzepri poruse sice nedojde ke ztrate metadat souboroveho systemu ale obsah zapi-sovaneho bloku nemusı byt korektnı To je zpusobeno poradım operacı zapis dozurnalu zapis metadat zapis datoveho bloku
bull Ordered mode ndash podobne jako writeback mode zalohujı se pouze metadataavsak zde je rozdıl v poradı provadenych operacı Nejdrıve se zapisujı data a azpote metadata do zurnalu
bull Data mode ndash nejvyssı uroven ochrany zalohujı se metadata i datove bloky To jeale vyvazeno nizsım vykonem protoze jsou veskera data ukladana dvakrat nejdrıvedo zurnalu a pote na skutecnou adresu
maly vyuzıvajı se prımo tato mısta pro ulozenı dat Delsı obsah se uklada do samostat-nych skupin bloku (tzv neprıme adresovanı prvnı az tretı urovne) ktere jsou adresovanyz mıst prımeho adresovanı
BFS (Berkley Fast Filesystem) pracuje s promennou delkou adresaru trochu jinymzpusobem Pri zakladanı adresare se alokuje prostor nejen pro prave zapisovany obsahale i rezervuje prostor pro prıpadne rozsırenı obsahu Soucastı metadat adresare jsoupro tyto ucely vyhrazeny dva ukazatele Prvnı smeruje na poslednı obsazeny zaznam adruhy na konec celkove alokovane oblasti (obsazena + rezervovana oblast)
224 Zurnalovanı
Pro zabezpecenı konzistence ukladanych dat v prıpade vypadku napajenı byla vyvinutatechnika zurnalovanı Jde o techniku kdy se na disk zapisujı krome uzivatelskych dati dalsı zaznamy ktere umoznujı v prıpade potreby obnovit konkretnı obsah datovehobloku a zajistit tak konzistenci bloku Tento specialnı zaznam se nazyva zurnal a jeto klasicky soubor ktery nenı beznemu uzivateli prıstupny Zurnalovanı lze realizovatpomocı nekolika prıstupu z nichz se vyuzıva predevsım
23 FUSE
FUSE [19] filesystem in userspace je technologie umoznujıcı neprivilegiovanym uzivate-lum pripojovanı a odpojovanı specialnıch souborovych systemu Projekt byl puvodnevyvıjen pro system GNULinux avsak v dnesnı dobe je k dispozici i pro platformyFreeBSD Mac OS X OpenSolaris a rada dalsıch Pri beznem pripojenı svazku pomocımount je totiz nutne mıt opravnenı spravce systemu (root) Implementace FUSE je bez-nym programem ktery je spousten pod aktualne prihlasenym uzivatelem (samozrejmepokud nenı modifikovan prıkazy chmod ci chown) Z tohoto faktu vyplyvajı i dalsı vlast-nosti ze kterych zminme odstınenı programatora od nutnosti znat a dodrzovat pravidlapro tvorbu modulu jadra operacnıho systemu Bezne FS totiz byvajı do jadra zaclenenyprave touto formou
10
231 Struktura
FUSE se sklada ze trı vzajemne komunikujıcıch castı kterymi jsou
bull modul pro jadro ndash drıvejsı verze modulu FUSE byly sıreny samostatne avsak odverze jadra Linuxu 2614 je jiz zaclenen do hlavnı vyvojove vetve nenı protozpravidla nutne jej dodatecne zavadet pomocı modprobe
bull rozhranı knihovny FUSE ndash je nativne tvoreno nekolika hlavickovymi soubory v ja-zyce C poskytuje deklarace metod pro implementaci rady systemovych volanı
bull specialnı soubor devfuse ndash zprostredkovava koumunikaci mezi modulem v jadrea rozhranım knihovny Pri pripojovanı souboroveho systemu vyuzıvajıcı FUSE seprovede otevrenı tohoto specialnıho souboru a nasledna komunikace probıha uz jenskrze takto zıskany popisovac (file descriptor)
Modul v jadre je prave jeden ale rozhranı knihovny je implementovano v rade programo-vacıch jazyku Pro strucny prehled jimi jsou C C++ Java C Haskell Python PerlRuby PHP ci Lua Uplny vypis je dostupny na oficialnıch webovych strankach projektuFUSE Nasleduje obrazek 21 se znaroznenım prubehu systemoveho volanı readdiravsak princip komunikace je spolecny pro vsechna podporovana systemova volanı
11
Obrazek 21 Prubeh zpracovanı pozadavku ve FUSE Obrazek byl prevzat z [19]
Je zde videt prenos pozadavku na zobrazenı obsahu adresare prochazejıcı uzivatel-skym prostorem (userspace) skrze obecnou vrstvu VFS (Virtual File System) a nasled-neho predanı modulu FUSE v jadru systemu To jej dale distribuuje zpet do uzivatel-skeho prostoru kde se nachazı implementace rozhranı FUSE (examplehello) Volanıse vyhodnotı vykonanım prıslusne metody a vysledek operace putuje stejnou cestou zpet
232 Prıklady souborovych systemu vyuzıvajıcı FUSE
Technologie FUSE se drzı hesla systemu UNIXrdquovse je souborldquo a nasla si tak sve prız-
nivce Svedcı o tom mnozstvı vytvorenych souborovych systemu ktere tuto technologiivyuzıvajı Mezi ty znamejsı patrı
bull sshfs [6] ndash umoznuje pripojenı vzdaleneho adresare pomocı protokolu SSH
bull CurlFtpFS [2] ndash zprostredkovava pripojenı FTP serveru jako lokalnıho adresare
bull WikipediaFS [9] ndash prace s clanky z portalu zalozenych na systemu Wiki jakos beznymi soubory
bull BloggerFS [1] ndash manipulace s prıspevky na blogovacım portalu Bloggercom veforme beznych souboru
233 Zpusob pouzitı
Pouzitı knihovny FUSE spocıva ve vlastnı implementaci obsluznych funkcı (tzv han-dlers) pro jednotlive ukony ktere lze se soubory provadet a jejiz nazvy odpovıdajı sys-temovym volanım FUSE definuje pro manipulaci se soubory az 39 (od verze knihovny
12
26) obsluznych funkcı avsak pro zakladnı pouzitı nenı nutne implementovat vsechnyJednoduchy avsak jiz funkcnı souborovy system lze sestavit pomocı getattr openopendir a read Ukazka implementace tohoto FS je v jazyce C na obrazcıch 22 a 23Deklarace vsech obsluznych funkcı lze nalezt v hlavickovem souboru fuseh ktery byva
include ltstdiohgt
include ltfusehgt
static int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
int main(int argc char argv[])
struct fuse_operations fsOperations
fsOperationsgetattr = fuse_getattr
fsOperationsopen = fuse_open
fsOperationsread = fuse_read
fsOperationsreaddir = fuse_readdir
return fuse_main(argc argv ampfsOperations NULL)
Obrazek 22 Ukazka pouzitı knihovny FUSE
umısten v usrincludefuse (tato cesta se ale muze mezi linuxovymi distribucemilisit) Soubory zde nejsou identifikovany pomocı inode jak je zvykem ve skutecnych FSale pouze pomocı cesty kterou lze nalezt ve vetsine obsluznych funkcı na mıste prvnıhoparametru Pokud byla operace provedena korektne obsluzna funkce by mela ve vetsineprıpadu vracet cıslo 0 Vsechny druhy chyb jsou indikovany zapornou hodnotou kon-stant definujıcıch druh chyby Jejich soupis se naleza v hlavickovem souboru errorh
(umıstenı souboru se muze lisit)
24 Zabezpecenı citlivych dat
Potreba chranit data pred cizımi osobami vznikla uz v davnych dobach jeste pred rozvo-jem vypocetnı techniky Jednım z odvetvı ktere se ochranou dat zabyva je kryptografieData lze chranit vıce prostredky a jejich sifrovanı je pouze jednou z aplikacı Nasledujıcıcast poskytuje prehled o dalsıch zpusobech ochrany dat [15]
241 Steganografie
Steganografie spocıva ve skrytı zpravy Zasadnım rozdılem oproti kryptografii je prede-vsım snaha o skrytı samotne existence zpravy V minulosti se vyuzıvaly tzv neviditelne
13
Pro ukazku nasleduje prıklad implementace operace read
int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
char msg[] = Pokusny text pro ctenı
int msgLength = strlen(msg)
if(strcmp(path example) == 0)
memcpy(buffer msg msgLength)
return msgLength
else if(strcmp(path null) == 0)
return 0
else
return -ENOENT
Obrazek 23 Ukazka implementace operace read
inkousty jimiz byla napsana zprava na papır Jejı prıjemce pak cely list nahral a ter-mochemickou reakcı se text objevil Dokonce bylo pouzito i hlavy otroka kdy mu bylanejdrıve oholena hlava a pote na ni vytetovana zprava Az mu vlasy zpet dorostly bylvyslan na cestu pres nepratelske uzemı a prıjemce mu ji opet oholil aby si zpravu mohlprecıst Tento zpusob samozrejme nebyl vzdy vhodny a proto se lide snazili vymysletdalsı zpusoby skrytı dat Pri pouzitı psaneho textu (rukou ci na psacım stroji) jako nos-neho materialu se da vyuzıt mechanismu psacıho stroje Do volneho prostoru mezi radkyse skryvaly zpravy psanım bez barevne pasky takze v papıru zustal pouze otlak pısmenNebo se tajna zprava mnohonasobne zmensila aby pri letmem pohledu pripomınala jed-nolity cerny bod Ten se pak vlepil do tisteneho textu jako tecka na konci vety tzvmikrotecky
242 Digitalnı steganografie
I v digitalnı dobe stale existujı postupy jak skryvat data Naprıklad u fotografiı mu-zeme dobre vyuzıt nedokonalosti lidskeho oka Pokud zmenıme jen nepatrne barevnyodstın v nektere casti fotografie nenı tato uprava na pohled zretelna ndash nemusı se jednato anomalii ale ucel Stejny princip lze aplikovat i na zvuky Hudba se po digitalizacicasto komprimuje Podle druhu pouziteho algoritmu muze dochazet ke ztrate hudebnıinformace Pokud zmenıme nejnizsı bit u cısla reprezentujıcıho frekvenci stejne jakou obrazku nebude tato zmena pri poslechu patrna Tento typ techniky se oznacuje jakozmena hodnoty LSB (least significant bit) Pokud nekdo tento soubor jakkoliv bezneupravı (orıznutı obrazku zmena bitrate zvuku) znamena to ve vetsine prıpadu po-skozenı nebo uplnou ztratu skryte informace U pruznych disku (disket) umı nektere
14
programy zamerne oznacit sektory na jejım magnetickem povrchu jako poskozene Tımsice dojde k castecnemu snızenı kapacity pro bezne soubory ale nehrozı zde nebezpecıprepisu ztracenych dat pri bezne praci Pokud uzivatel chce zapsat soubor na disketuoperacnı system pro nej vyuzije pouze volne sektory ktere jsou v poradku a chybnevzdy preskocı Skrytı dat nemusı ale nutne znamenat rozpoznatelnou zmenu vystupuObrazovy format BMP svou stavbou umoznuje doslova neviditelne skrytı (omezeneho)mnozstvı dat Jedinym prıpadnym vodıtkem k odhalenı je zvyseny objem dat
243 Kryptografie
Kryptografie jinymi slovy sifrovanı je postup transformace originalnı zpravy do podobyktera je v idealnım prıpade citelna pouze se znalostı tzv klıce Prı pouzitı stejne vstupnızpravy sifrovacıho algoritmu ale jineho klıce zıskame odlisny vystup Mıra zabezpecenızpravy zavisı na zvolenem algoritmu a sifrovacım klıci Proto pri chybnem pouzitı nekte-reho z bezne pouzıvanych algoritmu (napr RSA) a klıce (pouzitı retezce
rdquohesloldquo) nemusı
byt pro utocnıka velkou prekazkou zjistit obsah puvodnı zpravySifrovacı algoritmy rozdelujeme do dvou zakladnıch skupin podle typu klıce
bull Symetricka kryptografie ndash pouzıva pro sifrovanı i desifrovanı stejny klıc kteryby mel zustat v tajnosti Patrı zde naprıklad algoritmy DES [14] TwoFish [8] av dnesnı dobe v teto kategorii nejpouzıvanejsı AES [10]
bull Asymetricka kryptografie ndash vyuzıva dva typy klıcu verejny a privatnı Verejnyklıc ktery slouzı pro desifrovanı (uz podle nazvu) je mozne jej zaslat prıjemncisifrovane zpravy beznou nezabezpecenou elektronickou postou nebo jej zverejnitna svych webovych strankach Oproti tomu privatnı klıc musı zustat v tajnostiu sveho majitele Zastupcem teto kategorie je algoritmus RSA [5]
Sifrovana komunikace pak probıha podle nasledujıcıho scenare pripomınajıcıho kla-sickou postovnı korespondenci
1 Odesilatel (osoba A) si zajistı verejny klıc prıjemce (osoba B) naprıklad jejımstazenım z osobnıho blogu osoby B
2 Osoba A zasifruje svou zpravu pomocı verejneho klıce B a odesle ji jako beznye-mail
3 Osoba B zpravu desifruje pomocı sveho privatnıho klıce a zıska tak puvodnıobsah
Oba typy klıcu se generujı vzdy jako par Pro jejich vytvorenı je nutne dodat radunahodnych cısel Jednou z pouzitych metod jejich generovanı je prectenı hodnotynahodne adresy v pameti nebo sledovanı pozice kurzoru mysi uzivatele
15
Kapitola 3
Analyza
V nasledujıcı casti budou popsany pozadavky na navrhovany souborovy system a prehledzakladnıch problemu ktere bude nutne behem navrhu resit
31 Pozadavky na souborovy system
Pro uceleny pohled a dalsı postup je vhodne nejprve specifikovat pozadavky na vytvarenysystem Jsou jimi predevsım
bull Ochrana obsahu FS heslem ndash skryty FS by mel idealne tajit nejen svou vlastnıexistenci ale predevsım by nemel dovolit uzivatelum neznajıcıch klıc prıstupovatk jeho obsahu
bull Existence vıce FS nad jednım ulozistem ndash tento pozadavek muze plnit hned dvefunkce V prve rade jde o castecne nezavisle varianty FS pro organizaci obsahunicmene dalsım dusledkem muze byt jeho vlastnı ochrana Pokud bychom uvazo-vali scenar kdy osoba-utocnık pod pohruzkou donutı svou obetrsquo k vyzrazenı heslado skryteho FS obetrsquo ma sanci sdelit jine nez skutecne heslo a tım dojde ke zprı-stupnenı odlisneho obsahu (pochopitelne za predpokladu ze byl drıve vytvoren)
bull Nezavislost na uloznem mediu ndash knihovna by mela poskytovat dostatecne obecnerozhranı ktere by bylo mozne vyuzıt pro implementaci ruznych typu ulozistrsquo beznutnosti hlubokych zasahu do knihovny samotne Prıkladem typu ulozistrsquo mohoubyt soubory MP3 JPG webova sluzba
bull Alespon castecna odolnost proti chybejıcım fragmentum ndash v prıpade ze bude ulo-zistem naprıklad adresar s MP3 soubory lze v prubehu casu predpokladat jeho mo-difikace ruzne zavazneho charaketru (platı pochopitelne nejen pro soubory MP3)Mohou jimi byt zmena umıstenı souboru v adresarıch i kompletnı odstranenı celehoalba Tyto zasahy ruznou merou ovlivnujı spolehlivost skryteho FS a bude nutneje v navrhu zohlednit
16
bull Jednouzivatelsky rezim ndash skryty FS ze sve podstaty nenı urcen pro kazdeho uziva-tele ktery ma prıstup k ulozisti Predpokladem je uzky okruh osob ktere budouznat heslo pro prıstup
Vyvoj aplikace splnujıcı vyse uvedena kriteria se muze ubırat dvema smery V prve radelze vytvorit tzv aplikaci na mıru To znamena kompletnı prizpusobenı vyvoje zakom-ponovanı optimalizacı vhodnych pro specificke pouzitı atd Dalsım smerem je knihovnaposkytujıcı obecne rozhranı v takove forme aby bylo mozne vyhovet pozadavkum nasystem Vyhodou muze byt dalsı samostatne pouzitı konkretnıch modulu bez nutnostihlubokych zasahu do puvodnıch zdrojovych kodu Konecne rozhodnutı pro perspektiv-nejsı pouzitı tak padlo na variantu vytvorenı knihovny ktera bude schopna vytvorit aspravovat skryty souborovy system
17
Kapitola 4
Navrh souboroveho systemu
Kapitola navrhu popisuje obecne postupy resenı problemu ktere jsou spojeny s nasled-nym vyvojem skryteho souboroveho systemu Jejich soupis je uveden v kapitole 3 Tyjsou dale detailneji rozvedeny v kapitole 5 zabyvajıcı se implementacı
41 Uloziste
Cılem prace je zajistit ukladanı souboru do jinych Umıstenı techto jinych souboru budedale oznacovano jako uloziste
42 Vymezenı termınu
Pro ujasnenı vyznamu nekterych termınu dale obsazenych v teto prace nasleduje jejichprehled s podrobnejsım vysvetlenım
bull hash ndash jednoznacna identifikace prave jedne entitiy v ulozisti
bull fragment ndash souvisı se skrytym souborem a jde o poradove cıslo useku dat kterepredstavuje cast obsahu skryteho souboru Slozenım vsech fragmentu dostanemekompletnı obsah souboru proto jeho hodnota v ramci skryteho FS musı byt jedi-necna
bull blok ndash souvisı s entitou v ulozisti jedna se o poradove cıslo dılcı casti obsahufyzickeho souboru Tento identifikator musı byt unikatnı v ramci hash
bull vnoreny FS ndash samostatny prostor pro skryvanı souboru v ramci stejneho ulozisteImplementace systemu je muze rozlisovat naprıklad pomocı zadaneho hesla
43 Zpusob organizace souboru
Jak jiz bylo v zmıneno v teoreticke casti 221 nejpouzıvanejsımi druhy organizace obsahusouboru je fragmentace a spojita alokace Uloziste je jen obecne rozhranı a muze mıt
18
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
Kapitola 1
Uvod
Dıky masovemu rozsırenı vypocetnı techniky a internetu se dnesnı doba casto oznacujejako doba informacnı Celosvetovy objem informacı neustale rychle roste [17] prıklademmohou byt vedecke clanky kterych je behem jedineho dne verejne publikovano mezisesti a sedmi tisıci Nenı to vsak jediny druh informacı Patrı zde mnoho dalsıch druhuvcetne napr fotografiı z rodinnych oslav nebo soukrome korespondence V techto prı-padech (opomineme-li typicky socialnı sıte) muze byt mnozstvı osob kterym jsou tytoinformace urceny z ruznych duvodu omezeno (rodina pratele ) Lide informace castouchovavajı v pocıtacıch na svych pevnych discıch opatrnejsı z nich je chranı hesly Lzetak omezit prıstup neopravenym osobam a chranit tak data pred prıpadnym zneuzitımPouzitı sifrovanı pro ochranu dat ma vsak omezenı v tom ze skryva pouze obsah data nikoli jiz jejich prıtomnost Potencialnımu utocnıkovi stacı mnohdy jen zjistit hesloatrsquo uz za pomoci utoku hrubou silou slovnıkoveho utoku socialnıho inzenyrstvı nebov extremnım prıpade mucenım Prave prıtomnost sifrovanych dat muze v mnoha prıpa-dech pritahnout nezadoucı pozornost proto je casto vhodne skryt samotnou prıtomnostcitlivych dat cımz se zabyva steganografie
Soucasne nastroje pro digitalnı steganografii jsou casto velmi omezene co se tycehlavne pouziteho steganografickeho prıstupu Snad jedinou znamou vyjimkou je pro-gram TrueCrypt [7] jenz umoznuje v jiz existujıcım sifrovanem oddılu vytvorit dalsımibeznymi motodami neodhalitelny pododdıl ktery lze pri znalosti sifrovacıho klıce pripojitjako bezny souborovy system
Cılem teto prace je navrhnout souborovy system ktery bude umoznovat skryvanısouboru do jinych a za pouzitı technologie FUSE jej implementovat Jejı teoreticka castposkytuje nahled do souvisejıcıch oblastı a naleza se v nı take prehled obecnych konceptupouzıvanych pri implementaci souborovych systemu Dale jsou popsany mozne zpusobyskryvanı dat a v poslednı casti se okrajove venuje kryptografii
Kapitola 3 se zabyva analyzou a spolu s navrhem v kapitole 4 uz popisujı samotnoutvorbu souboroveho systemu umoznujıcı skryvanı dat do ID3 tagu ktere jsou soucastıhudebnıho formatu MP3 Kapitola 5 se venuje resenım konkretnıch problemu v jazyceC++ a v predposlednı 6 casti cele prace jsou zdokumentovany vysledky experimen-talnıho overenı vlastnostı vytvoreneho souboroveho systemu Kapitola 7 praci shrnuje a
5
diskutuje dalsı moznosti rozsırenı
6
Kapitola 2
Teoreticka cast
Tato kapitola se zameruje na prehled souborovych systemu (v anglictine file system dalejen FS) jejich principsect a vyuzitı
Operacnı system GNULinux je inspirovan OX UNIX a jednou z vlastnostı kterousi zachoval je rozdelenı souboru na zakladnıch 6 typu [16]
1 obcejny soubor ndash patrı zde textove spustitelne binarnı soubory obrazky ve for-matu JPEG
2 adresar ndash umoznuje organizovat soubory do stromove struktury
3 symbolicky odkaz ndash zastupce za jiny soubor cıl odkazu je urcen pomocı cestyadresarove struktury je tak mozne vytvaret odkazy i mimo aktualnı svazek
4 specialnı blokovy soubor ndash podstatnou vlastnostı je moznost provadenı zaklad-nıch operacı pomocı adresace bloku Typickym predstavitelem jsou oddıly pevnychdisku
5 specialnı znakovy soubor ndash ctenı a zapis se provadı formou proudu dat po-uzıva se pro koumunikaci s nekterymi periferiemi naprıklad zarızenı pripojenychk seriovemu portu
6 pojmenovana roura ndash je jednım z prostredku komunikace mezi procesy a umoz-nuje manipulaci se standardnım vstupem a vystupem jako operace ctenı a zapissouboru V systemu GNULinux jej lze vytvorit pomocı prıkazu mkfifo
Pro jednoznacnou identifikaci jednoho souboru v ramci souboroveho systemu se pouzıvatermın inode
V systemu Linux se vyuzıvajı systemova volanı i k manipulaci se soubory Zakladnıoperace jsou provadeny pomocı nasledujıcıch volanı (pouze prehled)
bull open - otevrenı souboru pro dalsı praci s jeho obsahem
bull read - ctenı obsahu souboru
7
bull write - zapis do souboru
bull mknod - vytvorenı inode (pouzıvane pro adresare i specialnı soubory)
bull readdir - ctenı obsahu adresare
bull link - vytvorenı noveho odkazu na iuzel
bull unlink - zrusenı odkazu na iuzel souboru
bull chmod - zmena prıstupovych prav k souboru
bull chown - zmena vlastnıka souboru
21 Souborove systemy
Souborove systemy jsou prostredkem ktery umoznuje abstrakci dat formou souborufyzicky zapsanych v uloznych zarızenıch Temi byvajı nejcasteji pevne disky USB flashdisky opticka a paskova zarızenı Jejich obsah je smesicı jednicek a nul kterym davavyznam teprve az souborovy system Podle zpusobu uzitı je muzeme delit do nekolikazakladnıch kategoriı
bull bezne ndash vhodne pro obecne vyuzitı prıkladem jsou ext4 [11] NTFS BTRFS adalsı
bull sıtrsquoove (distribuovane) ndash ulozne zarızenı se fyzicky nenachazı v pocıtaci ale jedostupne skrze sıtrsquoove rozhranı Typickym predstavitelem teto skupiny je NFS [4]
bull specializovane ndash naprıklad pri zalohovanı velkych diskovych polı se casto vyuzı-vajı paskove mechaniky LTO pro ktere byl vyvinut soucasny LTFS [3]
22 Koncepty souborovych systemu
Souborove systemy majı v zakladu spolecny ucel uchovavat a organizovat data Existujerada systemu ruznych vlastnostı ktere vsak vyuzıvajı stejne principy protoze se v pru-behu casu ukazaly jako nejvhodnejsı pro dany ucel V teto casti budou tyto prıstupydetailneji popsany jejich detailnejsı popis lze nalezt v [18]
221 Datove bloky a metody jejich alokace
Datovym blokem oznacujeme nejmensı objem dat se kterym je souborovy system scho-pen pracovat V ruznych systemech je zazity termın alokacnı jednotka coz je synony-mum a s nı souvisı velikost alokacnı jednotky Pokud provedeme zapis souboru o velikostinaprıklad 1 kB pri velikosti bloku 4 kB budou na disk zapsany 4 kB dat i kdyz je vyuzityobsah bloku mensı Tento prıstup je jednoduchy pro organizaci dat ale zpusobuje ztratukapacity disku protoze poslednı ze sekvence bloku nalezıcıch danemu souboru s velkou
8
pravdepodobnostı nebude obsazen az do sveho plneho objemu a je tak pro male souboryneefektivnı
Prıstupu pro alokaci bloku pro zapis noveho souboru existuje nekolik V souborovychsystemech extended file system (ext234) tuto praci obstarava tzv block allocator Tenma prehled o aktualne obsazenych blocıch a ma za ukol vyhledat vhodne volne mısto Dodoby zverejnenı FS ext4 pracoval vzdy nad jednım konkretnım souborem V ext4 ale bylprepracovan protoze tento system vyuzıva tzv extenty coz vyzaduje vetsı kontrolu nadrozmıstenım bloku na disku Extentem oznacujeme (pokud mozno) souvislou sekvencibloku tvorıcı jeden soubor ktera je urcena pocatecnım blokem a delkou Odtud plynezasadnı rozdıl bezne organizace (jejımz prıkladem je souborovy system FAT1) ndash velikostbloku Extenty totiz majı promenlivou delku v zavislosti na obsahu Aby bloky mohlybyt ukladany souvisle vyuzıva se odlozeneho zapisu Pozadavky na zapis bloku nejsouobslouzeny okamzite ale az je jich dostatecne mnozstvı Teprve pak se provadı zapis jakojedina operace Vyuzıvanım extentu odpada nutnost velke rezie pri ukladanı objemnychsouboru Souvisle ctenı je vzhledem k sekvencnı povaze stale prevazne rotacnıch fyzickychmediı vyhodne protoze tak umoznuje maximalne vyuzıt jejich vykon
222 Reprezentace souboru
Soubor je tvoren nazvem atributy a obsahem Nazvu se take nekdy rıka symbolicke jmenoa to proto ze z pohledu souborovych systemu se jedna jen o jiny zpusob identifikaceJednoznacnym identifikatorem je v systemu Linux tzv inode Tento termın je odvozenze slov index node a jedna se o poradove cıslo souboru ve svazku
Nazev souboru je retezec znaku a jeho delka byla napr u souborovych systemuFAT1632 pevna ndash 8 znaku (a to jeste ne vsechny ASCII znaky) pro samotny nazevsouboru a 3 znaky pro prıponu [13] Tento format jmen se uznacuje jako short filenamenebo format 83 Casem se tento prıstup ukazal jako nevyhovujıcı a proto vznikla nad-stavba LFN (long filenames) ktera umoznovala v techto systemech souboru (v dnesnıdobe uz zastaralych) pouzıvat jmena az 255 znaku dlouhe Tato delka je typicka prosystemy ext234 UDF XFS a mnoho dalsıch Nektere systemy majı tuto hranici posu-nutou jeste mnohem dale ndash naprıklad u ReFS je pro nazev souboru vyhrazeno az 32 kBV nazvech souboru take byvajı omezenı na pouzitelne znaky nebo konkretnı retezcektere majı svuj specialnı vyznam Typicky se jedna o retezce
rdquoldquo ci
rdquoldquo Z implementac-
nıch duvodu nebyva povolen znak 0 (ASCII hodnota 0x00)
223 Reprezentace adresaru
Adresar je samostatny typ souboru a jeho obsahem je mnozina souboru Reprezentaciteto mnoziny lze implementovat ruznymi zpusoby z cehoz plynou i prıpadna omezenı namaximalnı pocet souboru obsazenych v jedinem adresari
Souborovy system ext2 ma v kazdem inode rezervovano 12 mıst pro ukazatele nabloky (tzv prıme adresovanı) Pokud je obsah souboru (nebo pocet souboru v adresari)
1File Allocation Table
9
bull Writeback mode ndash provadı se zalohovanı struktury souboroveho systemu takzepri poruse sice nedojde ke ztrate metadat souboroveho systemu ale obsah zapi-sovaneho bloku nemusı byt korektnı To je zpusobeno poradım operacı zapis dozurnalu zapis metadat zapis datoveho bloku
bull Ordered mode ndash podobne jako writeback mode zalohujı se pouze metadataavsak zde je rozdıl v poradı provadenych operacı Nejdrıve se zapisujı data a azpote metadata do zurnalu
bull Data mode ndash nejvyssı uroven ochrany zalohujı se metadata i datove bloky To jeale vyvazeno nizsım vykonem protoze jsou veskera data ukladana dvakrat nejdrıvedo zurnalu a pote na skutecnou adresu
maly vyuzıvajı se prımo tato mısta pro ulozenı dat Delsı obsah se uklada do samostat-nych skupin bloku (tzv neprıme adresovanı prvnı az tretı urovne) ktere jsou adresovanyz mıst prımeho adresovanı
BFS (Berkley Fast Filesystem) pracuje s promennou delkou adresaru trochu jinymzpusobem Pri zakladanı adresare se alokuje prostor nejen pro prave zapisovany obsahale i rezervuje prostor pro prıpadne rozsırenı obsahu Soucastı metadat adresare jsoupro tyto ucely vyhrazeny dva ukazatele Prvnı smeruje na poslednı obsazeny zaznam adruhy na konec celkove alokovane oblasti (obsazena + rezervovana oblast)
224 Zurnalovanı
Pro zabezpecenı konzistence ukladanych dat v prıpade vypadku napajenı byla vyvinutatechnika zurnalovanı Jde o techniku kdy se na disk zapisujı krome uzivatelskych dati dalsı zaznamy ktere umoznujı v prıpade potreby obnovit konkretnı obsah datovehobloku a zajistit tak konzistenci bloku Tento specialnı zaznam se nazyva zurnal a jeto klasicky soubor ktery nenı beznemu uzivateli prıstupny Zurnalovanı lze realizovatpomocı nekolika prıstupu z nichz se vyuzıva predevsım
23 FUSE
FUSE [19] filesystem in userspace je technologie umoznujıcı neprivilegiovanym uzivate-lum pripojovanı a odpojovanı specialnıch souborovych systemu Projekt byl puvodnevyvıjen pro system GNULinux avsak v dnesnı dobe je k dispozici i pro platformyFreeBSD Mac OS X OpenSolaris a rada dalsıch Pri beznem pripojenı svazku pomocımount je totiz nutne mıt opravnenı spravce systemu (root) Implementace FUSE je bez-nym programem ktery je spousten pod aktualne prihlasenym uzivatelem (samozrejmepokud nenı modifikovan prıkazy chmod ci chown) Z tohoto faktu vyplyvajı i dalsı vlast-nosti ze kterych zminme odstınenı programatora od nutnosti znat a dodrzovat pravidlapro tvorbu modulu jadra operacnıho systemu Bezne FS totiz byvajı do jadra zaclenenyprave touto formou
10
231 Struktura
FUSE se sklada ze trı vzajemne komunikujıcıch castı kterymi jsou
bull modul pro jadro ndash drıvejsı verze modulu FUSE byly sıreny samostatne avsak odverze jadra Linuxu 2614 je jiz zaclenen do hlavnı vyvojove vetve nenı protozpravidla nutne jej dodatecne zavadet pomocı modprobe
bull rozhranı knihovny FUSE ndash je nativne tvoreno nekolika hlavickovymi soubory v ja-zyce C poskytuje deklarace metod pro implementaci rady systemovych volanı
bull specialnı soubor devfuse ndash zprostredkovava koumunikaci mezi modulem v jadrea rozhranım knihovny Pri pripojovanı souboroveho systemu vyuzıvajıcı FUSE seprovede otevrenı tohoto specialnıho souboru a nasledna komunikace probıha uz jenskrze takto zıskany popisovac (file descriptor)
Modul v jadre je prave jeden ale rozhranı knihovny je implementovano v rade programo-vacıch jazyku Pro strucny prehled jimi jsou C C++ Java C Haskell Python PerlRuby PHP ci Lua Uplny vypis je dostupny na oficialnıch webovych strankach projektuFUSE Nasleduje obrazek 21 se znaroznenım prubehu systemoveho volanı readdiravsak princip komunikace je spolecny pro vsechna podporovana systemova volanı
11
Obrazek 21 Prubeh zpracovanı pozadavku ve FUSE Obrazek byl prevzat z [19]
Je zde videt prenos pozadavku na zobrazenı obsahu adresare prochazejıcı uzivatel-skym prostorem (userspace) skrze obecnou vrstvu VFS (Virtual File System) a nasled-neho predanı modulu FUSE v jadru systemu To jej dale distribuuje zpet do uzivatel-skeho prostoru kde se nachazı implementace rozhranı FUSE (examplehello) Volanıse vyhodnotı vykonanım prıslusne metody a vysledek operace putuje stejnou cestou zpet
232 Prıklady souborovych systemu vyuzıvajıcı FUSE
Technologie FUSE se drzı hesla systemu UNIXrdquovse je souborldquo a nasla si tak sve prız-
nivce Svedcı o tom mnozstvı vytvorenych souborovych systemu ktere tuto technologiivyuzıvajı Mezi ty znamejsı patrı
bull sshfs [6] ndash umoznuje pripojenı vzdaleneho adresare pomocı protokolu SSH
bull CurlFtpFS [2] ndash zprostredkovava pripojenı FTP serveru jako lokalnıho adresare
bull WikipediaFS [9] ndash prace s clanky z portalu zalozenych na systemu Wiki jakos beznymi soubory
bull BloggerFS [1] ndash manipulace s prıspevky na blogovacım portalu Bloggercom veforme beznych souboru
233 Zpusob pouzitı
Pouzitı knihovny FUSE spocıva ve vlastnı implementaci obsluznych funkcı (tzv han-dlers) pro jednotlive ukony ktere lze se soubory provadet a jejiz nazvy odpovıdajı sys-temovym volanım FUSE definuje pro manipulaci se soubory az 39 (od verze knihovny
12
26) obsluznych funkcı avsak pro zakladnı pouzitı nenı nutne implementovat vsechnyJednoduchy avsak jiz funkcnı souborovy system lze sestavit pomocı getattr openopendir a read Ukazka implementace tohoto FS je v jazyce C na obrazcıch 22 a 23Deklarace vsech obsluznych funkcı lze nalezt v hlavickovem souboru fuseh ktery byva
include ltstdiohgt
include ltfusehgt
static int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
int main(int argc char argv[])
struct fuse_operations fsOperations
fsOperationsgetattr = fuse_getattr
fsOperationsopen = fuse_open
fsOperationsread = fuse_read
fsOperationsreaddir = fuse_readdir
return fuse_main(argc argv ampfsOperations NULL)
Obrazek 22 Ukazka pouzitı knihovny FUSE
umısten v usrincludefuse (tato cesta se ale muze mezi linuxovymi distribucemilisit) Soubory zde nejsou identifikovany pomocı inode jak je zvykem ve skutecnych FSale pouze pomocı cesty kterou lze nalezt ve vetsine obsluznych funkcı na mıste prvnıhoparametru Pokud byla operace provedena korektne obsluzna funkce by mela ve vetsineprıpadu vracet cıslo 0 Vsechny druhy chyb jsou indikovany zapornou hodnotou kon-stant definujıcıch druh chyby Jejich soupis se naleza v hlavickovem souboru errorh
(umıstenı souboru se muze lisit)
24 Zabezpecenı citlivych dat
Potreba chranit data pred cizımi osobami vznikla uz v davnych dobach jeste pred rozvo-jem vypocetnı techniky Jednım z odvetvı ktere se ochranou dat zabyva je kryptografieData lze chranit vıce prostredky a jejich sifrovanı je pouze jednou z aplikacı Nasledujıcıcast poskytuje prehled o dalsıch zpusobech ochrany dat [15]
241 Steganografie
Steganografie spocıva ve skrytı zpravy Zasadnım rozdılem oproti kryptografii je prede-vsım snaha o skrytı samotne existence zpravy V minulosti se vyuzıvaly tzv neviditelne
13
Pro ukazku nasleduje prıklad implementace operace read
int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
char msg[] = Pokusny text pro ctenı
int msgLength = strlen(msg)
if(strcmp(path example) == 0)
memcpy(buffer msg msgLength)
return msgLength
else if(strcmp(path null) == 0)
return 0
else
return -ENOENT
Obrazek 23 Ukazka implementace operace read
inkousty jimiz byla napsana zprava na papır Jejı prıjemce pak cely list nahral a ter-mochemickou reakcı se text objevil Dokonce bylo pouzito i hlavy otroka kdy mu bylanejdrıve oholena hlava a pote na ni vytetovana zprava Az mu vlasy zpet dorostly bylvyslan na cestu pres nepratelske uzemı a prıjemce mu ji opet oholil aby si zpravu mohlprecıst Tento zpusob samozrejme nebyl vzdy vhodny a proto se lide snazili vymysletdalsı zpusoby skrytı dat Pri pouzitı psaneho textu (rukou ci na psacım stroji) jako nos-neho materialu se da vyuzıt mechanismu psacıho stroje Do volneho prostoru mezi radkyse skryvaly zpravy psanım bez barevne pasky takze v papıru zustal pouze otlak pısmenNebo se tajna zprava mnohonasobne zmensila aby pri letmem pohledu pripomınala jed-nolity cerny bod Ten se pak vlepil do tisteneho textu jako tecka na konci vety tzvmikrotecky
242 Digitalnı steganografie
I v digitalnı dobe stale existujı postupy jak skryvat data Naprıklad u fotografiı mu-zeme dobre vyuzıt nedokonalosti lidskeho oka Pokud zmenıme jen nepatrne barevnyodstın v nektere casti fotografie nenı tato uprava na pohled zretelna ndash nemusı se jednato anomalii ale ucel Stejny princip lze aplikovat i na zvuky Hudba se po digitalizacicasto komprimuje Podle druhu pouziteho algoritmu muze dochazet ke ztrate hudebnıinformace Pokud zmenıme nejnizsı bit u cısla reprezentujıcıho frekvenci stejne jakou obrazku nebude tato zmena pri poslechu patrna Tento typ techniky se oznacuje jakozmena hodnoty LSB (least significant bit) Pokud nekdo tento soubor jakkoliv bezneupravı (orıznutı obrazku zmena bitrate zvuku) znamena to ve vetsine prıpadu po-skozenı nebo uplnou ztratu skryte informace U pruznych disku (disket) umı nektere
14
programy zamerne oznacit sektory na jejım magnetickem povrchu jako poskozene Tımsice dojde k castecnemu snızenı kapacity pro bezne soubory ale nehrozı zde nebezpecıprepisu ztracenych dat pri bezne praci Pokud uzivatel chce zapsat soubor na disketuoperacnı system pro nej vyuzije pouze volne sektory ktere jsou v poradku a chybnevzdy preskocı Skrytı dat nemusı ale nutne znamenat rozpoznatelnou zmenu vystupuObrazovy format BMP svou stavbou umoznuje doslova neviditelne skrytı (omezeneho)mnozstvı dat Jedinym prıpadnym vodıtkem k odhalenı je zvyseny objem dat
243 Kryptografie
Kryptografie jinymi slovy sifrovanı je postup transformace originalnı zpravy do podobyktera je v idealnım prıpade citelna pouze se znalostı tzv klıce Prı pouzitı stejne vstupnızpravy sifrovacıho algoritmu ale jineho klıce zıskame odlisny vystup Mıra zabezpecenızpravy zavisı na zvolenem algoritmu a sifrovacım klıci Proto pri chybnem pouzitı nekte-reho z bezne pouzıvanych algoritmu (napr RSA) a klıce (pouzitı retezce
rdquohesloldquo) nemusı
byt pro utocnıka velkou prekazkou zjistit obsah puvodnı zpravySifrovacı algoritmy rozdelujeme do dvou zakladnıch skupin podle typu klıce
bull Symetricka kryptografie ndash pouzıva pro sifrovanı i desifrovanı stejny klıc kteryby mel zustat v tajnosti Patrı zde naprıklad algoritmy DES [14] TwoFish [8] av dnesnı dobe v teto kategorii nejpouzıvanejsı AES [10]
bull Asymetricka kryptografie ndash vyuzıva dva typy klıcu verejny a privatnı Verejnyklıc ktery slouzı pro desifrovanı (uz podle nazvu) je mozne jej zaslat prıjemncisifrovane zpravy beznou nezabezpecenou elektronickou postou nebo jej zverejnitna svych webovych strankach Oproti tomu privatnı klıc musı zustat v tajnostiu sveho majitele Zastupcem teto kategorie je algoritmus RSA [5]
Sifrovana komunikace pak probıha podle nasledujıcıho scenare pripomınajıcıho kla-sickou postovnı korespondenci
1 Odesilatel (osoba A) si zajistı verejny klıc prıjemce (osoba B) naprıklad jejımstazenım z osobnıho blogu osoby B
2 Osoba A zasifruje svou zpravu pomocı verejneho klıce B a odesle ji jako beznye-mail
3 Osoba B zpravu desifruje pomocı sveho privatnıho klıce a zıska tak puvodnıobsah
Oba typy klıcu se generujı vzdy jako par Pro jejich vytvorenı je nutne dodat radunahodnych cısel Jednou z pouzitych metod jejich generovanı je prectenı hodnotynahodne adresy v pameti nebo sledovanı pozice kurzoru mysi uzivatele
15
Kapitola 3
Analyza
V nasledujıcı casti budou popsany pozadavky na navrhovany souborovy system a prehledzakladnıch problemu ktere bude nutne behem navrhu resit
31 Pozadavky na souborovy system
Pro uceleny pohled a dalsı postup je vhodne nejprve specifikovat pozadavky na vytvarenysystem Jsou jimi predevsım
bull Ochrana obsahu FS heslem ndash skryty FS by mel idealne tajit nejen svou vlastnıexistenci ale predevsım by nemel dovolit uzivatelum neznajıcıch klıc prıstupovatk jeho obsahu
bull Existence vıce FS nad jednım ulozistem ndash tento pozadavek muze plnit hned dvefunkce V prve rade jde o castecne nezavisle varianty FS pro organizaci obsahunicmene dalsım dusledkem muze byt jeho vlastnı ochrana Pokud bychom uvazo-vali scenar kdy osoba-utocnık pod pohruzkou donutı svou obetrsquo k vyzrazenı heslado skryteho FS obetrsquo ma sanci sdelit jine nez skutecne heslo a tım dojde ke zprı-stupnenı odlisneho obsahu (pochopitelne za predpokladu ze byl drıve vytvoren)
bull Nezavislost na uloznem mediu ndash knihovna by mela poskytovat dostatecne obecnerozhranı ktere by bylo mozne vyuzıt pro implementaci ruznych typu ulozistrsquo beznutnosti hlubokych zasahu do knihovny samotne Prıkladem typu ulozistrsquo mohoubyt soubory MP3 JPG webova sluzba
bull Alespon castecna odolnost proti chybejıcım fragmentum ndash v prıpade ze bude ulo-zistem naprıklad adresar s MP3 soubory lze v prubehu casu predpokladat jeho mo-difikace ruzne zavazneho charaketru (platı pochopitelne nejen pro soubory MP3)Mohou jimi byt zmena umıstenı souboru v adresarıch i kompletnı odstranenı celehoalba Tyto zasahy ruznou merou ovlivnujı spolehlivost skryteho FS a bude nutneje v navrhu zohlednit
16
bull Jednouzivatelsky rezim ndash skryty FS ze sve podstaty nenı urcen pro kazdeho uziva-tele ktery ma prıstup k ulozisti Predpokladem je uzky okruh osob ktere budouznat heslo pro prıstup
Vyvoj aplikace splnujıcı vyse uvedena kriteria se muze ubırat dvema smery V prve radelze vytvorit tzv aplikaci na mıru To znamena kompletnı prizpusobenı vyvoje zakom-ponovanı optimalizacı vhodnych pro specificke pouzitı atd Dalsım smerem je knihovnaposkytujıcı obecne rozhranı v takove forme aby bylo mozne vyhovet pozadavkum nasystem Vyhodou muze byt dalsı samostatne pouzitı konkretnıch modulu bez nutnostihlubokych zasahu do puvodnıch zdrojovych kodu Konecne rozhodnutı pro perspektiv-nejsı pouzitı tak padlo na variantu vytvorenı knihovny ktera bude schopna vytvorit aspravovat skryty souborovy system
17
Kapitola 4
Navrh souboroveho systemu
Kapitola navrhu popisuje obecne postupy resenı problemu ktere jsou spojeny s nasled-nym vyvojem skryteho souboroveho systemu Jejich soupis je uveden v kapitole 3 Tyjsou dale detailneji rozvedeny v kapitole 5 zabyvajıcı se implementacı
41 Uloziste
Cılem prace je zajistit ukladanı souboru do jinych Umıstenı techto jinych souboru budedale oznacovano jako uloziste
42 Vymezenı termınu
Pro ujasnenı vyznamu nekterych termınu dale obsazenych v teto prace nasleduje jejichprehled s podrobnejsım vysvetlenım
bull hash ndash jednoznacna identifikace prave jedne entitiy v ulozisti
bull fragment ndash souvisı se skrytym souborem a jde o poradove cıslo useku dat kterepredstavuje cast obsahu skryteho souboru Slozenım vsech fragmentu dostanemekompletnı obsah souboru proto jeho hodnota v ramci skryteho FS musı byt jedi-necna
bull blok ndash souvisı s entitou v ulozisti jedna se o poradove cıslo dılcı casti obsahufyzickeho souboru Tento identifikator musı byt unikatnı v ramci hash
bull vnoreny FS ndash samostatny prostor pro skryvanı souboru v ramci stejneho ulozisteImplementace systemu je muze rozlisovat naprıklad pomocı zadaneho hesla
43 Zpusob organizace souboru
Jak jiz bylo v zmıneno v teoreticke casti 221 nejpouzıvanejsımi druhy organizace obsahusouboru je fragmentace a spojita alokace Uloziste je jen obecne rozhranı a muze mıt
18
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
diskutuje dalsı moznosti rozsırenı
6
Kapitola 2
Teoreticka cast
Tato kapitola se zameruje na prehled souborovych systemu (v anglictine file system dalejen FS) jejich principsect a vyuzitı
Operacnı system GNULinux je inspirovan OX UNIX a jednou z vlastnostı kterousi zachoval je rozdelenı souboru na zakladnıch 6 typu [16]
1 obcejny soubor ndash patrı zde textove spustitelne binarnı soubory obrazky ve for-matu JPEG
2 adresar ndash umoznuje organizovat soubory do stromove struktury
3 symbolicky odkaz ndash zastupce za jiny soubor cıl odkazu je urcen pomocı cestyadresarove struktury je tak mozne vytvaret odkazy i mimo aktualnı svazek
4 specialnı blokovy soubor ndash podstatnou vlastnostı je moznost provadenı zaklad-nıch operacı pomocı adresace bloku Typickym predstavitelem jsou oddıly pevnychdisku
5 specialnı znakovy soubor ndash ctenı a zapis se provadı formou proudu dat po-uzıva se pro koumunikaci s nekterymi periferiemi naprıklad zarızenı pripojenychk seriovemu portu
6 pojmenovana roura ndash je jednım z prostredku komunikace mezi procesy a umoz-nuje manipulaci se standardnım vstupem a vystupem jako operace ctenı a zapissouboru V systemu GNULinux jej lze vytvorit pomocı prıkazu mkfifo
Pro jednoznacnou identifikaci jednoho souboru v ramci souboroveho systemu se pouzıvatermın inode
V systemu Linux se vyuzıvajı systemova volanı i k manipulaci se soubory Zakladnıoperace jsou provadeny pomocı nasledujıcıch volanı (pouze prehled)
bull open - otevrenı souboru pro dalsı praci s jeho obsahem
bull read - ctenı obsahu souboru
7
bull write - zapis do souboru
bull mknod - vytvorenı inode (pouzıvane pro adresare i specialnı soubory)
bull readdir - ctenı obsahu adresare
bull link - vytvorenı noveho odkazu na iuzel
bull unlink - zrusenı odkazu na iuzel souboru
bull chmod - zmena prıstupovych prav k souboru
bull chown - zmena vlastnıka souboru
21 Souborove systemy
Souborove systemy jsou prostredkem ktery umoznuje abstrakci dat formou souborufyzicky zapsanych v uloznych zarızenıch Temi byvajı nejcasteji pevne disky USB flashdisky opticka a paskova zarızenı Jejich obsah je smesicı jednicek a nul kterym davavyznam teprve az souborovy system Podle zpusobu uzitı je muzeme delit do nekolikazakladnıch kategoriı
bull bezne ndash vhodne pro obecne vyuzitı prıkladem jsou ext4 [11] NTFS BTRFS adalsı
bull sıtrsquoove (distribuovane) ndash ulozne zarızenı se fyzicky nenachazı v pocıtaci ale jedostupne skrze sıtrsquoove rozhranı Typickym predstavitelem teto skupiny je NFS [4]
bull specializovane ndash naprıklad pri zalohovanı velkych diskovych polı se casto vyuzı-vajı paskove mechaniky LTO pro ktere byl vyvinut soucasny LTFS [3]
22 Koncepty souborovych systemu
Souborove systemy majı v zakladu spolecny ucel uchovavat a organizovat data Existujerada systemu ruznych vlastnostı ktere vsak vyuzıvajı stejne principy protoze se v pru-behu casu ukazaly jako nejvhodnejsı pro dany ucel V teto casti budou tyto prıstupydetailneji popsany jejich detailnejsı popis lze nalezt v [18]
221 Datove bloky a metody jejich alokace
Datovym blokem oznacujeme nejmensı objem dat se kterym je souborovy system scho-pen pracovat V ruznych systemech je zazity termın alokacnı jednotka coz je synony-mum a s nı souvisı velikost alokacnı jednotky Pokud provedeme zapis souboru o velikostinaprıklad 1 kB pri velikosti bloku 4 kB budou na disk zapsany 4 kB dat i kdyz je vyuzityobsah bloku mensı Tento prıstup je jednoduchy pro organizaci dat ale zpusobuje ztratukapacity disku protoze poslednı ze sekvence bloku nalezıcıch danemu souboru s velkou
8
pravdepodobnostı nebude obsazen az do sveho plneho objemu a je tak pro male souboryneefektivnı
Prıstupu pro alokaci bloku pro zapis noveho souboru existuje nekolik V souborovychsystemech extended file system (ext234) tuto praci obstarava tzv block allocator Tenma prehled o aktualne obsazenych blocıch a ma za ukol vyhledat vhodne volne mısto Dodoby zverejnenı FS ext4 pracoval vzdy nad jednım konkretnım souborem V ext4 ale bylprepracovan protoze tento system vyuzıva tzv extenty coz vyzaduje vetsı kontrolu nadrozmıstenım bloku na disku Extentem oznacujeme (pokud mozno) souvislou sekvencibloku tvorıcı jeden soubor ktera je urcena pocatecnım blokem a delkou Odtud plynezasadnı rozdıl bezne organizace (jejımz prıkladem je souborovy system FAT1) ndash velikostbloku Extenty totiz majı promenlivou delku v zavislosti na obsahu Aby bloky mohlybyt ukladany souvisle vyuzıva se odlozeneho zapisu Pozadavky na zapis bloku nejsouobslouzeny okamzite ale az je jich dostatecne mnozstvı Teprve pak se provadı zapis jakojedina operace Vyuzıvanım extentu odpada nutnost velke rezie pri ukladanı objemnychsouboru Souvisle ctenı je vzhledem k sekvencnı povaze stale prevazne rotacnıch fyzickychmediı vyhodne protoze tak umoznuje maximalne vyuzıt jejich vykon
222 Reprezentace souboru
Soubor je tvoren nazvem atributy a obsahem Nazvu se take nekdy rıka symbolicke jmenoa to proto ze z pohledu souborovych systemu se jedna jen o jiny zpusob identifikaceJednoznacnym identifikatorem je v systemu Linux tzv inode Tento termın je odvozenze slov index node a jedna se o poradove cıslo souboru ve svazku
Nazev souboru je retezec znaku a jeho delka byla napr u souborovych systemuFAT1632 pevna ndash 8 znaku (a to jeste ne vsechny ASCII znaky) pro samotny nazevsouboru a 3 znaky pro prıponu [13] Tento format jmen se uznacuje jako short filenamenebo format 83 Casem se tento prıstup ukazal jako nevyhovujıcı a proto vznikla nad-stavba LFN (long filenames) ktera umoznovala v techto systemech souboru (v dnesnıdobe uz zastaralych) pouzıvat jmena az 255 znaku dlouhe Tato delka je typicka prosystemy ext234 UDF XFS a mnoho dalsıch Nektere systemy majı tuto hranici posu-nutou jeste mnohem dale ndash naprıklad u ReFS je pro nazev souboru vyhrazeno az 32 kBV nazvech souboru take byvajı omezenı na pouzitelne znaky nebo konkretnı retezcektere majı svuj specialnı vyznam Typicky se jedna o retezce
rdquoldquo ci
rdquoldquo Z implementac-
nıch duvodu nebyva povolen znak 0 (ASCII hodnota 0x00)
223 Reprezentace adresaru
Adresar je samostatny typ souboru a jeho obsahem je mnozina souboru Reprezentaciteto mnoziny lze implementovat ruznymi zpusoby z cehoz plynou i prıpadna omezenı namaximalnı pocet souboru obsazenych v jedinem adresari
Souborovy system ext2 ma v kazdem inode rezervovano 12 mıst pro ukazatele nabloky (tzv prıme adresovanı) Pokud je obsah souboru (nebo pocet souboru v adresari)
1File Allocation Table
9
bull Writeback mode ndash provadı se zalohovanı struktury souboroveho systemu takzepri poruse sice nedojde ke ztrate metadat souboroveho systemu ale obsah zapi-sovaneho bloku nemusı byt korektnı To je zpusobeno poradım operacı zapis dozurnalu zapis metadat zapis datoveho bloku
bull Ordered mode ndash podobne jako writeback mode zalohujı se pouze metadataavsak zde je rozdıl v poradı provadenych operacı Nejdrıve se zapisujı data a azpote metadata do zurnalu
bull Data mode ndash nejvyssı uroven ochrany zalohujı se metadata i datove bloky To jeale vyvazeno nizsım vykonem protoze jsou veskera data ukladana dvakrat nejdrıvedo zurnalu a pote na skutecnou adresu
maly vyuzıvajı se prımo tato mısta pro ulozenı dat Delsı obsah se uklada do samostat-nych skupin bloku (tzv neprıme adresovanı prvnı az tretı urovne) ktere jsou adresovanyz mıst prımeho adresovanı
BFS (Berkley Fast Filesystem) pracuje s promennou delkou adresaru trochu jinymzpusobem Pri zakladanı adresare se alokuje prostor nejen pro prave zapisovany obsahale i rezervuje prostor pro prıpadne rozsırenı obsahu Soucastı metadat adresare jsoupro tyto ucely vyhrazeny dva ukazatele Prvnı smeruje na poslednı obsazeny zaznam adruhy na konec celkove alokovane oblasti (obsazena + rezervovana oblast)
224 Zurnalovanı
Pro zabezpecenı konzistence ukladanych dat v prıpade vypadku napajenı byla vyvinutatechnika zurnalovanı Jde o techniku kdy se na disk zapisujı krome uzivatelskych dati dalsı zaznamy ktere umoznujı v prıpade potreby obnovit konkretnı obsah datovehobloku a zajistit tak konzistenci bloku Tento specialnı zaznam se nazyva zurnal a jeto klasicky soubor ktery nenı beznemu uzivateli prıstupny Zurnalovanı lze realizovatpomocı nekolika prıstupu z nichz se vyuzıva predevsım
23 FUSE
FUSE [19] filesystem in userspace je technologie umoznujıcı neprivilegiovanym uzivate-lum pripojovanı a odpojovanı specialnıch souborovych systemu Projekt byl puvodnevyvıjen pro system GNULinux avsak v dnesnı dobe je k dispozici i pro platformyFreeBSD Mac OS X OpenSolaris a rada dalsıch Pri beznem pripojenı svazku pomocımount je totiz nutne mıt opravnenı spravce systemu (root) Implementace FUSE je bez-nym programem ktery je spousten pod aktualne prihlasenym uzivatelem (samozrejmepokud nenı modifikovan prıkazy chmod ci chown) Z tohoto faktu vyplyvajı i dalsı vlast-nosti ze kterych zminme odstınenı programatora od nutnosti znat a dodrzovat pravidlapro tvorbu modulu jadra operacnıho systemu Bezne FS totiz byvajı do jadra zaclenenyprave touto formou
10
231 Struktura
FUSE se sklada ze trı vzajemne komunikujıcıch castı kterymi jsou
bull modul pro jadro ndash drıvejsı verze modulu FUSE byly sıreny samostatne avsak odverze jadra Linuxu 2614 je jiz zaclenen do hlavnı vyvojove vetve nenı protozpravidla nutne jej dodatecne zavadet pomocı modprobe
bull rozhranı knihovny FUSE ndash je nativne tvoreno nekolika hlavickovymi soubory v ja-zyce C poskytuje deklarace metod pro implementaci rady systemovych volanı
bull specialnı soubor devfuse ndash zprostredkovava koumunikaci mezi modulem v jadrea rozhranım knihovny Pri pripojovanı souboroveho systemu vyuzıvajıcı FUSE seprovede otevrenı tohoto specialnıho souboru a nasledna komunikace probıha uz jenskrze takto zıskany popisovac (file descriptor)
Modul v jadre je prave jeden ale rozhranı knihovny je implementovano v rade programo-vacıch jazyku Pro strucny prehled jimi jsou C C++ Java C Haskell Python PerlRuby PHP ci Lua Uplny vypis je dostupny na oficialnıch webovych strankach projektuFUSE Nasleduje obrazek 21 se znaroznenım prubehu systemoveho volanı readdiravsak princip komunikace je spolecny pro vsechna podporovana systemova volanı
11
Obrazek 21 Prubeh zpracovanı pozadavku ve FUSE Obrazek byl prevzat z [19]
Je zde videt prenos pozadavku na zobrazenı obsahu adresare prochazejıcı uzivatel-skym prostorem (userspace) skrze obecnou vrstvu VFS (Virtual File System) a nasled-neho predanı modulu FUSE v jadru systemu To jej dale distribuuje zpet do uzivatel-skeho prostoru kde se nachazı implementace rozhranı FUSE (examplehello) Volanıse vyhodnotı vykonanım prıslusne metody a vysledek operace putuje stejnou cestou zpet
232 Prıklady souborovych systemu vyuzıvajıcı FUSE
Technologie FUSE se drzı hesla systemu UNIXrdquovse je souborldquo a nasla si tak sve prız-
nivce Svedcı o tom mnozstvı vytvorenych souborovych systemu ktere tuto technologiivyuzıvajı Mezi ty znamejsı patrı
bull sshfs [6] ndash umoznuje pripojenı vzdaleneho adresare pomocı protokolu SSH
bull CurlFtpFS [2] ndash zprostredkovava pripojenı FTP serveru jako lokalnıho adresare
bull WikipediaFS [9] ndash prace s clanky z portalu zalozenych na systemu Wiki jakos beznymi soubory
bull BloggerFS [1] ndash manipulace s prıspevky na blogovacım portalu Bloggercom veforme beznych souboru
233 Zpusob pouzitı
Pouzitı knihovny FUSE spocıva ve vlastnı implementaci obsluznych funkcı (tzv han-dlers) pro jednotlive ukony ktere lze se soubory provadet a jejiz nazvy odpovıdajı sys-temovym volanım FUSE definuje pro manipulaci se soubory az 39 (od verze knihovny
12
26) obsluznych funkcı avsak pro zakladnı pouzitı nenı nutne implementovat vsechnyJednoduchy avsak jiz funkcnı souborovy system lze sestavit pomocı getattr openopendir a read Ukazka implementace tohoto FS je v jazyce C na obrazcıch 22 a 23Deklarace vsech obsluznych funkcı lze nalezt v hlavickovem souboru fuseh ktery byva
include ltstdiohgt
include ltfusehgt
static int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
int main(int argc char argv[])
struct fuse_operations fsOperations
fsOperationsgetattr = fuse_getattr
fsOperationsopen = fuse_open
fsOperationsread = fuse_read
fsOperationsreaddir = fuse_readdir
return fuse_main(argc argv ampfsOperations NULL)
Obrazek 22 Ukazka pouzitı knihovny FUSE
umısten v usrincludefuse (tato cesta se ale muze mezi linuxovymi distribucemilisit) Soubory zde nejsou identifikovany pomocı inode jak je zvykem ve skutecnych FSale pouze pomocı cesty kterou lze nalezt ve vetsine obsluznych funkcı na mıste prvnıhoparametru Pokud byla operace provedena korektne obsluzna funkce by mela ve vetsineprıpadu vracet cıslo 0 Vsechny druhy chyb jsou indikovany zapornou hodnotou kon-stant definujıcıch druh chyby Jejich soupis se naleza v hlavickovem souboru errorh
(umıstenı souboru se muze lisit)
24 Zabezpecenı citlivych dat
Potreba chranit data pred cizımi osobami vznikla uz v davnych dobach jeste pred rozvo-jem vypocetnı techniky Jednım z odvetvı ktere se ochranou dat zabyva je kryptografieData lze chranit vıce prostredky a jejich sifrovanı je pouze jednou z aplikacı Nasledujıcıcast poskytuje prehled o dalsıch zpusobech ochrany dat [15]
241 Steganografie
Steganografie spocıva ve skrytı zpravy Zasadnım rozdılem oproti kryptografii je prede-vsım snaha o skrytı samotne existence zpravy V minulosti se vyuzıvaly tzv neviditelne
13
Pro ukazku nasleduje prıklad implementace operace read
int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
char msg[] = Pokusny text pro ctenı
int msgLength = strlen(msg)
if(strcmp(path example) == 0)
memcpy(buffer msg msgLength)
return msgLength
else if(strcmp(path null) == 0)
return 0
else
return -ENOENT
Obrazek 23 Ukazka implementace operace read
inkousty jimiz byla napsana zprava na papır Jejı prıjemce pak cely list nahral a ter-mochemickou reakcı se text objevil Dokonce bylo pouzito i hlavy otroka kdy mu bylanejdrıve oholena hlava a pote na ni vytetovana zprava Az mu vlasy zpet dorostly bylvyslan na cestu pres nepratelske uzemı a prıjemce mu ji opet oholil aby si zpravu mohlprecıst Tento zpusob samozrejme nebyl vzdy vhodny a proto se lide snazili vymysletdalsı zpusoby skrytı dat Pri pouzitı psaneho textu (rukou ci na psacım stroji) jako nos-neho materialu se da vyuzıt mechanismu psacıho stroje Do volneho prostoru mezi radkyse skryvaly zpravy psanım bez barevne pasky takze v papıru zustal pouze otlak pısmenNebo se tajna zprava mnohonasobne zmensila aby pri letmem pohledu pripomınala jed-nolity cerny bod Ten se pak vlepil do tisteneho textu jako tecka na konci vety tzvmikrotecky
242 Digitalnı steganografie
I v digitalnı dobe stale existujı postupy jak skryvat data Naprıklad u fotografiı mu-zeme dobre vyuzıt nedokonalosti lidskeho oka Pokud zmenıme jen nepatrne barevnyodstın v nektere casti fotografie nenı tato uprava na pohled zretelna ndash nemusı se jednato anomalii ale ucel Stejny princip lze aplikovat i na zvuky Hudba se po digitalizacicasto komprimuje Podle druhu pouziteho algoritmu muze dochazet ke ztrate hudebnıinformace Pokud zmenıme nejnizsı bit u cısla reprezentujıcıho frekvenci stejne jakou obrazku nebude tato zmena pri poslechu patrna Tento typ techniky se oznacuje jakozmena hodnoty LSB (least significant bit) Pokud nekdo tento soubor jakkoliv bezneupravı (orıznutı obrazku zmena bitrate zvuku) znamena to ve vetsine prıpadu po-skozenı nebo uplnou ztratu skryte informace U pruznych disku (disket) umı nektere
14
programy zamerne oznacit sektory na jejım magnetickem povrchu jako poskozene Tımsice dojde k castecnemu snızenı kapacity pro bezne soubory ale nehrozı zde nebezpecıprepisu ztracenych dat pri bezne praci Pokud uzivatel chce zapsat soubor na disketuoperacnı system pro nej vyuzije pouze volne sektory ktere jsou v poradku a chybnevzdy preskocı Skrytı dat nemusı ale nutne znamenat rozpoznatelnou zmenu vystupuObrazovy format BMP svou stavbou umoznuje doslova neviditelne skrytı (omezeneho)mnozstvı dat Jedinym prıpadnym vodıtkem k odhalenı je zvyseny objem dat
243 Kryptografie
Kryptografie jinymi slovy sifrovanı je postup transformace originalnı zpravy do podobyktera je v idealnım prıpade citelna pouze se znalostı tzv klıce Prı pouzitı stejne vstupnızpravy sifrovacıho algoritmu ale jineho klıce zıskame odlisny vystup Mıra zabezpecenızpravy zavisı na zvolenem algoritmu a sifrovacım klıci Proto pri chybnem pouzitı nekte-reho z bezne pouzıvanych algoritmu (napr RSA) a klıce (pouzitı retezce
rdquohesloldquo) nemusı
byt pro utocnıka velkou prekazkou zjistit obsah puvodnı zpravySifrovacı algoritmy rozdelujeme do dvou zakladnıch skupin podle typu klıce
bull Symetricka kryptografie ndash pouzıva pro sifrovanı i desifrovanı stejny klıc kteryby mel zustat v tajnosti Patrı zde naprıklad algoritmy DES [14] TwoFish [8] av dnesnı dobe v teto kategorii nejpouzıvanejsı AES [10]
bull Asymetricka kryptografie ndash vyuzıva dva typy klıcu verejny a privatnı Verejnyklıc ktery slouzı pro desifrovanı (uz podle nazvu) je mozne jej zaslat prıjemncisifrovane zpravy beznou nezabezpecenou elektronickou postou nebo jej zverejnitna svych webovych strankach Oproti tomu privatnı klıc musı zustat v tajnostiu sveho majitele Zastupcem teto kategorie je algoritmus RSA [5]
Sifrovana komunikace pak probıha podle nasledujıcıho scenare pripomınajıcıho kla-sickou postovnı korespondenci
1 Odesilatel (osoba A) si zajistı verejny klıc prıjemce (osoba B) naprıklad jejımstazenım z osobnıho blogu osoby B
2 Osoba A zasifruje svou zpravu pomocı verejneho klıce B a odesle ji jako beznye-mail
3 Osoba B zpravu desifruje pomocı sveho privatnıho klıce a zıska tak puvodnıobsah
Oba typy klıcu se generujı vzdy jako par Pro jejich vytvorenı je nutne dodat radunahodnych cısel Jednou z pouzitych metod jejich generovanı je prectenı hodnotynahodne adresy v pameti nebo sledovanı pozice kurzoru mysi uzivatele
15
Kapitola 3
Analyza
V nasledujıcı casti budou popsany pozadavky na navrhovany souborovy system a prehledzakladnıch problemu ktere bude nutne behem navrhu resit
31 Pozadavky na souborovy system
Pro uceleny pohled a dalsı postup je vhodne nejprve specifikovat pozadavky na vytvarenysystem Jsou jimi predevsım
bull Ochrana obsahu FS heslem ndash skryty FS by mel idealne tajit nejen svou vlastnıexistenci ale predevsım by nemel dovolit uzivatelum neznajıcıch klıc prıstupovatk jeho obsahu
bull Existence vıce FS nad jednım ulozistem ndash tento pozadavek muze plnit hned dvefunkce V prve rade jde o castecne nezavisle varianty FS pro organizaci obsahunicmene dalsım dusledkem muze byt jeho vlastnı ochrana Pokud bychom uvazo-vali scenar kdy osoba-utocnık pod pohruzkou donutı svou obetrsquo k vyzrazenı heslado skryteho FS obetrsquo ma sanci sdelit jine nez skutecne heslo a tım dojde ke zprı-stupnenı odlisneho obsahu (pochopitelne za predpokladu ze byl drıve vytvoren)
bull Nezavislost na uloznem mediu ndash knihovna by mela poskytovat dostatecne obecnerozhranı ktere by bylo mozne vyuzıt pro implementaci ruznych typu ulozistrsquo beznutnosti hlubokych zasahu do knihovny samotne Prıkladem typu ulozistrsquo mohoubyt soubory MP3 JPG webova sluzba
bull Alespon castecna odolnost proti chybejıcım fragmentum ndash v prıpade ze bude ulo-zistem naprıklad adresar s MP3 soubory lze v prubehu casu predpokladat jeho mo-difikace ruzne zavazneho charaketru (platı pochopitelne nejen pro soubory MP3)Mohou jimi byt zmena umıstenı souboru v adresarıch i kompletnı odstranenı celehoalba Tyto zasahy ruznou merou ovlivnujı spolehlivost skryteho FS a bude nutneje v navrhu zohlednit
16
bull Jednouzivatelsky rezim ndash skryty FS ze sve podstaty nenı urcen pro kazdeho uziva-tele ktery ma prıstup k ulozisti Predpokladem je uzky okruh osob ktere budouznat heslo pro prıstup
Vyvoj aplikace splnujıcı vyse uvedena kriteria se muze ubırat dvema smery V prve radelze vytvorit tzv aplikaci na mıru To znamena kompletnı prizpusobenı vyvoje zakom-ponovanı optimalizacı vhodnych pro specificke pouzitı atd Dalsım smerem je knihovnaposkytujıcı obecne rozhranı v takove forme aby bylo mozne vyhovet pozadavkum nasystem Vyhodou muze byt dalsı samostatne pouzitı konkretnıch modulu bez nutnostihlubokych zasahu do puvodnıch zdrojovych kodu Konecne rozhodnutı pro perspektiv-nejsı pouzitı tak padlo na variantu vytvorenı knihovny ktera bude schopna vytvorit aspravovat skryty souborovy system
17
Kapitola 4
Navrh souboroveho systemu
Kapitola navrhu popisuje obecne postupy resenı problemu ktere jsou spojeny s nasled-nym vyvojem skryteho souboroveho systemu Jejich soupis je uveden v kapitole 3 Tyjsou dale detailneji rozvedeny v kapitole 5 zabyvajıcı se implementacı
41 Uloziste
Cılem prace je zajistit ukladanı souboru do jinych Umıstenı techto jinych souboru budedale oznacovano jako uloziste
42 Vymezenı termınu
Pro ujasnenı vyznamu nekterych termınu dale obsazenych v teto prace nasleduje jejichprehled s podrobnejsım vysvetlenım
bull hash ndash jednoznacna identifikace prave jedne entitiy v ulozisti
bull fragment ndash souvisı se skrytym souborem a jde o poradove cıslo useku dat kterepredstavuje cast obsahu skryteho souboru Slozenım vsech fragmentu dostanemekompletnı obsah souboru proto jeho hodnota v ramci skryteho FS musı byt jedi-necna
bull blok ndash souvisı s entitou v ulozisti jedna se o poradove cıslo dılcı casti obsahufyzickeho souboru Tento identifikator musı byt unikatnı v ramci hash
bull vnoreny FS ndash samostatny prostor pro skryvanı souboru v ramci stejneho ulozisteImplementace systemu je muze rozlisovat naprıklad pomocı zadaneho hesla
43 Zpusob organizace souboru
Jak jiz bylo v zmıneno v teoreticke casti 221 nejpouzıvanejsımi druhy organizace obsahusouboru je fragmentace a spojita alokace Uloziste je jen obecne rozhranı a muze mıt
18
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
Kapitola 2
Teoreticka cast
Tato kapitola se zameruje na prehled souborovych systemu (v anglictine file system dalejen FS) jejich principsect a vyuzitı
Operacnı system GNULinux je inspirovan OX UNIX a jednou z vlastnostı kterousi zachoval je rozdelenı souboru na zakladnıch 6 typu [16]
1 obcejny soubor ndash patrı zde textove spustitelne binarnı soubory obrazky ve for-matu JPEG
2 adresar ndash umoznuje organizovat soubory do stromove struktury
3 symbolicky odkaz ndash zastupce za jiny soubor cıl odkazu je urcen pomocı cestyadresarove struktury je tak mozne vytvaret odkazy i mimo aktualnı svazek
4 specialnı blokovy soubor ndash podstatnou vlastnostı je moznost provadenı zaklad-nıch operacı pomocı adresace bloku Typickym predstavitelem jsou oddıly pevnychdisku
5 specialnı znakovy soubor ndash ctenı a zapis se provadı formou proudu dat po-uzıva se pro koumunikaci s nekterymi periferiemi naprıklad zarızenı pripojenychk seriovemu portu
6 pojmenovana roura ndash je jednım z prostredku komunikace mezi procesy a umoz-nuje manipulaci se standardnım vstupem a vystupem jako operace ctenı a zapissouboru V systemu GNULinux jej lze vytvorit pomocı prıkazu mkfifo
Pro jednoznacnou identifikaci jednoho souboru v ramci souboroveho systemu se pouzıvatermın inode
V systemu Linux se vyuzıvajı systemova volanı i k manipulaci se soubory Zakladnıoperace jsou provadeny pomocı nasledujıcıch volanı (pouze prehled)
bull open - otevrenı souboru pro dalsı praci s jeho obsahem
bull read - ctenı obsahu souboru
7
bull write - zapis do souboru
bull mknod - vytvorenı inode (pouzıvane pro adresare i specialnı soubory)
bull readdir - ctenı obsahu adresare
bull link - vytvorenı noveho odkazu na iuzel
bull unlink - zrusenı odkazu na iuzel souboru
bull chmod - zmena prıstupovych prav k souboru
bull chown - zmena vlastnıka souboru
21 Souborove systemy
Souborove systemy jsou prostredkem ktery umoznuje abstrakci dat formou souborufyzicky zapsanych v uloznych zarızenıch Temi byvajı nejcasteji pevne disky USB flashdisky opticka a paskova zarızenı Jejich obsah je smesicı jednicek a nul kterym davavyznam teprve az souborovy system Podle zpusobu uzitı je muzeme delit do nekolikazakladnıch kategoriı
bull bezne ndash vhodne pro obecne vyuzitı prıkladem jsou ext4 [11] NTFS BTRFS adalsı
bull sıtrsquoove (distribuovane) ndash ulozne zarızenı se fyzicky nenachazı v pocıtaci ale jedostupne skrze sıtrsquoove rozhranı Typickym predstavitelem teto skupiny je NFS [4]
bull specializovane ndash naprıklad pri zalohovanı velkych diskovych polı se casto vyuzı-vajı paskove mechaniky LTO pro ktere byl vyvinut soucasny LTFS [3]
22 Koncepty souborovych systemu
Souborove systemy majı v zakladu spolecny ucel uchovavat a organizovat data Existujerada systemu ruznych vlastnostı ktere vsak vyuzıvajı stejne principy protoze se v pru-behu casu ukazaly jako nejvhodnejsı pro dany ucel V teto casti budou tyto prıstupydetailneji popsany jejich detailnejsı popis lze nalezt v [18]
221 Datove bloky a metody jejich alokace
Datovym blokem oznacujeme nejmensı objem dat se kterym je souborovy system scho-pen pracovat V ruznych systemech je zazity termın alokacnı jednotka coz je synony-mum a s nı souvisı velikost alokacnı jednotky Pokud provedeme zapis souboru o velikostinaprıklad 1 kB pri velikosti bloku 4 kB budou na disk zapsany 4 kB dat i kdyz je vyuzityobsah bloku mensı Tento prıstup je jednoduchy pro organizaci dat ale zpusobuje ztratukapacity disku protoze poslednı ze sekvence bloku nalezıcıch danemu souboru s velkou
8
pravdepodobnostı nebude obsazen az do sveho plneho objemu a je tak pro male souboryneefektivnı
Prıstupu pro alokaci bloku pro zapis noveho souboru existuje nekolik V souborovychsystemech extended file system (ext234) tuto praci obstarava tzv block allocator Tenma prehled o aktualne obsazenych blocıch a ma za ukol vyhledat vhodne volne mısto Dodoby zverejnenı FS ext4 pracoval vzdy nad jednım konkretnım souborem V ext4 ale bylprepracovan protoze tento system vyuzıva tzv extenty coz vyzaduje vetsı kontrolu nadrozmıstenım bloku na disku Extentem oznacujeme (pokud mozno) souvislou sekvencibloku tvorıcı jeden soubor ktera je urcena pocatecnım blokem a delkou Odtud plynezasadnı rozdıl bezne organizace (jejımz prıkladem je souborovy system FAT1) ndash velikostbloku Extenty totiz majı promenlivou delku v zavislosti na obsahu Aby bloky mohlybyt ukladany souvisle vyuzıva se odlozeneho zapisu Pozadavky na zapis bloku nejsouobslouzeny okamzite ale az je jich dostatecne mnozstvı Teprve pak se provadı zapis jakojedina operace Vyuzıvanım extentu odpada nutnost velke rezie pri ukladanı objemnychsouboru Souvisle ctenı je vzhledem k sekvencnı povaze stale prevazne rotacnıch fyzickychmediı vyhodne protoze tak umoznuje maximalne vyuzıt jejich vykon
222 Reprezentace souboru
Soubor je tvoren nazvem atributy a obsahem Nazvu se take nekdy rıka symbolicke jmenoa to proto ze z pohledu souborovych systemu se jedna jen o jiny zpusob identifikaceJednoznacnym identifikatorem je v systemu Linux tzv inode Tento termın je odvozenze slov index node a jedna se o poradove cıslo souboru ve svazku
Nazev souboru je retezec znaku a jeho delka byla napr u souborovych systemuFAT1632 pevna ndash 8 znaku (a to jeste ne vsechny ASCII znaky) pro samotny nazevsouboru a 3 znaky pro prıponu [13] Tento format jmen se uznacuje jako short filenamenebo format 83 Casem se tento prıstup ukazal jako nevyhovujıcı a proto vznikla nad-stavba LFN (long filenames) ktera umoznovala v techto systemech souboru (v dnesnıdobe uz zastaralych) pouzıvat jmena az 255 znaku dlouhe Tato delka je typicka prosystemy ext234 UDF XFS a mnoho dalsıch Nektere systemy majı tuto hranici posu-nutou jeste mnohem dale ndash naprıklad u ReFS je pro nazev souboru vyhrazeno az 32 kBV nazvech souboru take byvajı omezenı na pouzitelne znaky nebo konkretnı retezcektere majı svuj specialnı vyznam Typicky se jedna o retezce
rdquoldquo ci
rdquoldquo Z implementac-
nıch duvodu nebyva povolen znak 0 (ASCII hodnota 0x00)
223 Reprezentace adresaru
Adresar je samostatny typ souboru a jeho obsahem je mnozina souboru Reprezentaciteto mnoziny lze implementovat ruznymi zpusoby z cehoz plynou i prıpadna omezenı namaximalnı pocet souboru obsazenych v jedinem adresari
Souborovy system ext2 ma v kazdem inode rezervovano 12 mıst pro ukazatele nabloky (tzv prıme adresovanı) Pokud je obsah souboru (nebo pocet souboru v adresari)
1File Allocation Table
9
bull Writeback mode ndash provadı se zalohovanı struktury souboroveho systemu takzepri poruse sice nedojde ke ztrate metadat souboroveho systemu ale obsah zapi-sovaneho bloku nemusı byt korektnı To je zpusobeno poradım operacı zapis dozurnalu zapis metadat zapis datoveho bloku
bull Ordered mode ndash podobne jako writeback mode zalohujı se pouze metadataavsak zde je rozdıl v poradı provadenych operacı Nejdrıve se zapisujı data a azpote metadata do zurnalu
bull Data mode ndash nejvyssı uroven ochrany zalohujı se metadata i datove bloky To jeale vyvazeno nizsım vykonem protoze jsou veskera data ukladana dvakrat nejdrıvedo zurnalu a pote na skutecnou adresu
maly vyuzıvajı se prımo tato mısta pro ulozenı dat Delsı obsah se uklada do samostat-nych skupin bloku (tzv neprıme adresovanı prvnı az tretı urovne) ktere jsou adresovanyz mıst prımeho adresovanı
BFS (Berkley Fast Filesystem) pracuje s promennou delkou adresaru trochu jinymzpusobem Pri zakladanı adresare se alokuje prostor nejen pro prave zapisovany obsahale i rezervuje prostor pro prıpadne rozsırenı obsahu Soucastı metadat adresare jsoupro tyto ucely vyhrazeny dva ukazatele Prvnı smeruje na poslednı obsazeny zaznam adruhy na konec celkove alokovane oblasti (obsazena + rezervovana oblast)
224 Zurnalovanı
Pro zabezpecenı konzistence ukladanych dat v prıpade vypadku napajenı byla vyvinutatechnika zurnalovanı Jde o techniku kdy se na disk zapisujı krome uzivatelskych dati dalsı zaznamy ktere umoznujı v prıpade potreby obnovit konkretnı obsah datovehobloku a zajistit tak konzistenci bloku Tento specialnı zaznam se nazyva zurnal a jeto klasicky soubor ktery nenı beznemu uzivateli prıstupny Zurnalovanı lze realizovatpomocı nekolika prıstupu z nichz se vyuzıva predevsım
23 FUSE
FUSE [19] filesystem in userspace je technologie umoznujıcı neprivilegiovanym uzivate-lum pripojovanı a odpojovanı specialnıch souborovych systemu Projekt byl puvodnevyvıjen pro system GNULinux avsak v dnesnı dobe je k dispozici i pro platformyFreeBSD Mac OS X OpenSolaris a rada dalsıch Pri beznem pripojenı svazku pomocımount je totiz nutne mıt opravnenı spravce systemu (root) Implementace FUSE je bez-nym programem ktery je spousten pod aktualne prihlasenym uzivatelem (samozrejmepokud nenı modifikovan prıkazy chmod ci chown) Z tohoto faktu vyplyvajı i dalsı vlast-nosti ze kterych zminme odstınenı programatora od nutnosti znat a dodrzovat pravidlapro tvorbu modulu jadra operacnıho systemu Bezne FS totiz byvajı do jadra zaclenenyprave touto formou
10
231 Struktura
FUSE se sklada ze trı vzajemne komunikujıcıch castı kterymi jsou
bull modul pro jadro ndash drıvejsı verze modulu FUSE byly sıreny samostatne avsak odverze jadra Linuxu 2614 je jiz zaclenen do hlavnı vyvojove vetve nenı protozpravidla nutne jej dodatecne zavadet pomocı modprobe
bull rozhranı knihovny FUSE ndash je nativne tvoreno nekolika hlavickovymi soubory v ja-zyce C poskytuje deklarace metod pro implementaci rady systemovych volanı
bull specialnı soubor devfuse ndash zprostredkovava koumunikaci mezi modulem v jadrea rozhranım knihovny Pri pripojovanı souboroveho systemu vyuzıvajıcı FUSE seprovede otevrenı tohoto specialnıho souboru a nasledna komunikace probıha uz jenskrze takto zıskany popisovac (file descriptor)
Modul v jadre je prave jeden ale rozhranı knihovny je implementovano v rade programo-vacıch jazyku Pro strucny prehled jimi jsou C C++ Java C Haskell Python PerlRuby PHP ci Lua Uplny vypis je dostupny na oficialnıch webovych strankach projektuFUSE Nasleduje obrazek 21 se znaroznenım prubehu systemoveho volanı readdiravsak princip komunikace je spolecny pro vsechna podporovana systemova volanı
11
Obrazek 21 Prubeh zpracovanı pozadavku ve FUSE Obrazek byl prevzat z [19]
Je zde videt prenos pozadavku na zobrazenı obsahu adresare prochazejıcı uzivatel-skym prostorem (userspace) skrze obecnou vrstvu VFS (Virtual File System) a nasled-neho predanı modulu FUSE v jadru systemu To jej dale distribuuje zpet do uzivatel-skeho prostoru kde se nachazı implementace rozhranı FUSE (examplehello) Volanıse vyhodnotı vykonanım prıslusne metody a vysledek operace putuje stejnou cestou zpet
232 Prıklady souborovych systemu vyuzıvajıcı FUSE
Technologie FUSE se drzı hesla systemu UNIXrdquovse je souborldquo a nasla si tak sve prız-
nivce Svedcı o tom mnozstvı vytvorenych souborovych systemu ktere tuto technologiivyuzıvajı Mezi ty znamejsı patrı
bull sshfs [6] ndash umoznuje pripojenı vzdaleneho adresare pomocı protokolu SSH
bull CurlFtpFS [2] ndash zprostredkovava pripojenı FTP serveru jako lokalnıho adresare
bull WikipediaFS [9] ndash prace s clanky z portalu zalozenych na systemu Wiki jakos beznymi soubory
bull BloggerFS [1] ndash manipulace s prıspevky na blogovacım portalu Bloggercom veforme beznych souboru
233 Zpusob pouzitı
Pouzitı knihovny FUSE spocıva ve vlastnı implementaci obsluznych funkcı (tzv han-dlers) pro jednotlive ukony ktere lze se soubory provadet a jejiz nazvy odpovıdajı sys-temovym volanım FUSE definuje pro manipulaci se soubory az 39 (od verze knihovny
12
26) obsluznych funkcı avsak pro zakladnı pouzitı nenı nutne implementovat vsechnyJednoduchy avsak jiz funkcnı souborovy system lze sestavit pomocı getattr openopendir a read Ukazka implementace tohoto FS je v jazyce C na obrazcıch 22 a 23Deklarace vsech obsluznych funkcı lze nalezt v hlavickovem souboru fuseh ktery byva
include ltstdiohgt
include ltfusehgt
static int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
int main(int argc char argv[])
struct fuse_operations fsOperations
fsOperationsgetattr = fuse_getattr
fsOperationsopen = fuse_open
fsOperationsread = fuse_read
fsOperationsreaddir = fuse_readdir
return fuse_main(argc argv ampfsOperations NULL)
Obrazek 22 Ukazka pouzitı knihovny FUSE
umısten v usrincludefuse (tato cesta se ale muze mezi linuxovymi distribucemilisit) Soubory zde nejsou identifikovany pomocı inode jak je zvykem ve skutecnych FSale pouze pomocı cesty kterou lze nalezt ve vetsine obsluznych funkcı na mıste prvnıhoparametru Pokud byla operace provedena korektne obsluzna funkce by mela ve vetsineprıpadu vracet cıslo 0 Vsechny druhy chyb jsou indikovany zapornou hodnotou kon-stant definujıcıch druh chyby Jejich soupis se naleza v hlavickovem souboru errorh
(umıstenı souboru se muze lisit)
24 Zabezpecenı citlivych dat
Potreba chranit data pred cizımi osobami vznikla uz v davnych dobach jeste pred rozvo-jem vypocetnı techniky Jednım z odvetvı ktere se ochranou dat zabyva je kryptografieData lze chranit vıce prostredky a jejich sifrovanı je pouze jednou z aplikacı Nasledujıcıcast poskytuje prehled o dalsıch zpusobech ochrany dat [15]
241 Steganografie
Steganografie spocıva ve skrytı zpravy Zasadnım rozdılem oproti kryptografii je prede-vsım snaha o skrytı samotne existence zpravy V minulosti se vyuzıvaly tzv neviditelne
13
Pro ukazku nasleduje prıklad implementace operace read
int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
char msg[] = Pokusny text pro ctenı
int msgLength = strlen(msg)
if(strcmp(path example) == 0)
memcpy(buffer msg msgLength)
return msgLength
else if(strcmp(path null) == 0)
return 0
else
return -ENOENT
Obrazek 23 Ukazka implementace operace read
inkousty jimiz byla napsana zprava na papır Jejı prıjemce pak cely list nahral a ter-mochemickou reakcı se text objevil Dokonce bylo pouzito i hlavy otroka kdy mu bylanejdrıve oholena hlava a pote na ni vytetovana zprava Az mu vlasy zpet dorostly bylvyslan na cestu pres nepratelske uzemı a prıjemce mu ji opet oholil aby si zpravu mohlprecıst Tento zpusob samozrejme nebyl vzdy vhodny a proto se lide snazili vymysletdalsı zpusoby skrytı dat Pri pouzitı psaneho textu (rukou ci na psacım stroji) jako nos-neho materialu se da vyuzıt mechanismu psacıho stroje Do volneho prostoru mezi radkyse skryvaly zpravy psanım bez barevne pasky takze v papıru zustal pouze otlak pısmenNebo se tajna zprava mnohonasobne zmensila aby pri letmem pohledu pripomınala jed-nolity cerny bod Ten se pak vlepil do tisteneho textu jako tecka na konci vety tzvmikrotecky
242 Digitalnı steganografie
I v digitalnı dobe stale existujı postupy jak skryvat data Naprıklad u fotografiı mu-zeme dobre vyuzıt nedokonalosti lidskeho oka Pokud zmenıme jen nepatrne barevnyodstın v nektere casti fotografie nenı tato uprava na pohled zretelna ndash nemusı se jednato anomalii ale ucel Stejny princip lze aplikovat i na zvuky Hudba se po digitalizacicasto komprimuje Podle druhu pouziteho algoritmu muze dochazet ke ztrate hudebnıinformace Pokud zmenıme nejnizsı bit u cısla reprezentujıcıho frekvenci stejne jakou obrazku nebude tato zmena pri poslechu patrna Tento typ techniky se oznacuje jakozmena hodnoty LSB (least significant bit) Pokud nekdo tento soubor jakkoliv bezneupravı (orıznutı obrazku zmena bitrate zvuku) znamena to ve vetsine prıpadu po-skozenı nebo uplnou ztratu skryte informace U pruznych disku (disket) umı nektere
14
programy zamerne oznacit sektory na jejım magnetickem povrchu jako poskozene Tımsice dojde k castecnemu snızenı kapacity pro bezne soubory ale nehrozı zde nebezpecıprepisu ztracenych dat pri bezne praci Pokud uzivatel chce zapsat soubor na disketuoperacnı system pro nej vyuzije pouze volne sektory ktere jsou v poradku a chybnevzdy preskocı Skrytı dat nemusı ale nutne znamenat rozpoznatelnou zmenu vystupuObrazovy format BMP svou stavbou umoznuje doslova neviditelne skrytı (omezeneho)mnozstvı dat Jedinym prıpadnym vodıtkem k odhalenı je zvyseny objem dat
243 Kryptografie
Kryptografie jinymi slovy sifrovanı je postup transformace originalnı zpravy do podobyktera je v idealnım prıpade citelna pouze se znalostı tzv klıce Prı pouzitı stejne vstupnızpravy sifrovacıho algoritmu ale jineho klıce zıskame odlisny vystup Mıra zabezpecenızpravy zavisı na zvolenem algoritmu a sifrovacım klıci Proto pri chybnem pouzitı nekte-reho z bezne pouzıvanych algoritmu (napr RSA) a klıce (pouzitı retezce
rdquohesloldquo) nemusı
byt pro utocnıka velkou prekazkou zjistit obsah puvodnı zpravySifrovacı algoritmy rozdelujeme do dvou zakladnıch skupin podle typu klıce
bull Symetricka kryptografie ndash pouzıva pro sifrovanı i desifrovanı stejny klıc kteryby mel zustat v tajnosti Patrı zde naprıklad algoritmy DES [14] TwoFish [8] av dnesnı dobe v teto kategorii nejpouzıvanejsı AES [10]
bull Asymetricka kryptografie ndash vyuzıva dva typy klıcu verejny a privatnı Verejnyklıc ktery slouzı pro desifrovanı (uz podle nazvu) je mozne jej zaslat prıjemncisifrovane zpravy beznou nezabezpecenou elektronickou postou nebo jej zverejnitna svych webovych strankach Oproti tomu privatnı klıc musı zustat v tajnostiu sveho majitele Zastupcem teto kategorie je algoritmus RSA [5]
Sifrovana komunikace pak probıha podle nasledujıcıho scenare pripomınajıcıho kla-sickou postovnı korespondenci
1 Odesilatel (osoba A) si zajistı verejny klıc prıjemce (osoba B) naprıklad jejımstazenım z osobnıho blogu osoby B
2 Osoba A zasifruje svou zpravu pomocı verejneho klıce B a odesle ji jako beznye-mail
3 Osoba B zpravu desifruje pomocı sveho privatnıho klıce a zıska tak puvodnıobsah
Oba typy klıcu se generujı vzdy jako par Pro jejich vytvorenı je nutne dodat radunahodnych cısel Jednou z pouzitych metod jejich generovanı je prectenı hodnotynahodne adresy v pameti nebo sledovanı pozice kurzoru mysi uzivatele
15
Kapitola 3
Analyza
V nasledujıcı casti budou popsany pozadavky na navrhovany souborovy system a prehledzakladnıch problemu ktere bude nutne behem navrhu resit
31 Pozadavky na souborovy system
Pro uceleny pohled a dalsı postup je vhodne nejprve specifikovat pozadavky na vytvarenysystem Jsou jimi predevsım
bull Ochrana obsahu FS heslem ndash skryty FS by mel idealne tajit nejen svou vlastnıexistenci ale predevsım by nemel dovolit uzivatelum neznajıcıch klıc prıstupovatk jeho obsahu
bull Existence vıce FS nad jednım ulozistem ndash tento pozadavek muze plnit hned dvefunkce V prve rade jde o castecne nezavisle varianty FS pro organizaci obsahunicmene dalsım dusledkem muze byt jeho vlastnı ochrana Pokud bychom uvazo-vali scenar kdy osoba-utocnık pod pohruzkou donutı svou obetrsquo k vyzrazenı heslado skryteho FS obetrsquo ma sanci sdelit jine nez skutecne heslo a tım dojde ke zprı-stupnenı odlisneho obsahu (pochopitelne za predpokladu ze byl drıve vytvoren)
bull Nezavislost na uloznem mediu ndash knihovna by mela poskytovat dostatecne obecnerozhranı ktere by bylo mozne vyuzıt pro implementaci ruznych typu ulozistrsquo beznutnosti hlubokych zasahu do knihovny samotne Prıkladem typu ulozistrsquo mohoubyt soubory MP3 JPG webova sluzba
bull Alespon castecna odolnost proti chybejıcım fragmentum ndash v prıpade ze bude ulo-zistem naprıklad adresar s MP3 soubory lze v prubehu casu predpokladat jeho mo-difikace ruzne zavazneho charaketru (platı pochopitelne nejen pro soubory MP3)Mohou jimi byt zmena umıstenı souboru v adresarıch i kompletnı odstranenı celehoalba Tyto zasahy ruznou merou ovlivnujı spolehlivost skryteho FS a bude nutneje v navrhu zohlednit
16
bull Jednouzivatelsky rezim ndash skryty FS ze sve podstaty nenı urcen pro kazdeho uziva-tele ktery ma prıstup k ulozisti Predpokladem je uzky okruh osob ktere budouznat heslo pro prıstup
Vyvoj aplikace splnujıcı vyse uvedena kriteria se muze ubırat dvema smery V prve radelze vytvorit tzv aplikaci na mıru To znamena kompletnı prizpusobenı vyvoje zakom-ponovanı optimalizacı vhodnych pro specificke pouzitı atd Dalsım smerem je knihovnaposkytujıcı obecne rozhranı v takove forme aby bylo mozne vyhovet pozadavkum nasystem Vyhodou muze byt dalsı samostatne pouzitı konkretnıch modulu bez nutnostihlubokych zasahu do puvodnıch zdrojovych kodu Konecne rozhodnutı pro perspektiv-nejsı pouzitı tak padlo na variantu vytvorenı knihovny ktera bude schopna vytvorit aspravovat skryty souborovy system
17
Kapitola 4
Navrh souboroveho systemu
Kapitola navrhu popisuje obecne postupy resenı problemu ktere jsou spojeny s nasled-nym vyvojem skryteho souboroveho systemu Jejich soupis je uveden v kapitole 3 Tyjsou dale detailneji rozvedeny v kapitole 5 zabyvajıcı se implementacı
41 Uloziste
Cılem prace je zajistit ukladanı souboru do jinych Umıstenı techto jinych souboru budedale oznacovano jako uloziste
42 Vymezenı termınu
Pro ujasnenı vyznamu nekterych termınu dale obsazenych v teto prace nasleduje jejichprehled s podrobnejsım vysvetlenım
bull hash ndash jednoznacna identifikace prave jedne entitiy v ulozisti
bull fragment ndash souvisı se skrytym souborem a jde o poradove cıslo useku dat kterepredstavuje cast obsahu skryteho souboru Slozenım vsech fragmentu dostanemekompletnı obsah souboru proto jeho hodnota v ramci skryteho FS musı byt jedi-necna
bull blok ndash souvisı s entitou v ulozisti jedna se o poradove cıslo dılcı casti obsahufyzickeho souboru Tento identifikator musı byt unikatnı v ramci hash
bull vnoreny FS ndash samostatny prostor pro skryvanı souboru v ramci stejneho ulozisteImplementace systemu je muze rozlisovat naprıklad pomocı zadaneho hesla
43 Zpusob organizace souboru
Jak jiz bylo v zmıneno v teoreticke casti 221 nejpouzıvanejsımi druhy organizace obsahusouboru je fragmentace a spojita alokace Uloziste je jen obecne rozhranı a muze mıt
18
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
bull write - zapis do souboru
bull mknod - vytvorenı inode (pouzıvane pro adresare i specialnı soubory)
bull readdir - ctenı obsahu adresare
bull link - vytvorenı noveho odkazu na iuzel
bull unlink - zrusenı odkazu na iuzel souboru
bull chmod - zmena prıstupovych prav k souboru
bull chown - zmena vlastnıka souboru
21 Souborove systemy
Souborove systemy jsou prostredkem ktery umoznuje abstrakci dat formou souborufyzicky zapsanych v uloznych zarızenıch Temi byvajı nejcasteji pevne disky USB flashdisky opticka a paskova zarızenı Jejich obsah je smesicı jednicek a nul kterym davavyznam teprve az souborovy system Podle zpusobu uzitı je muzeme delit do nekolikazakladnıch kategoriı
bull bezne ndash vhodne pro obecne vyuzitı prıkladem jsou ext4 [11] NTFS BTRFS adalsı
bull sıtrsquoove (distribuovane) ndash ulozne zarızenı se fyzicky nenachazı v pocıtaci ale jedostupne skrze sıtrsquoove rozhranı Typickym predstavitelem teto skupiny je NFS [4]
bull specializovane ndash naprıklad pri zalohovanı velkych diskovych polı se casto vyuzı-vajı paskove mechaniky LTO pro ktere byl vyvinut soucasny LTFS [3]
22 Koncepty souborovych systemu
Souborove systemy majı v zakladu spolecny ucel uchovavat a organizovat data Existujerada systemu ruznych vlastnostı ktere vsak vyuzıvajı stejne principy protoze se v pru-behu casu ukazaly jako nejvhodnejsı pro dany ucel V teto casti budou tyto prıstupydetailneji popsany jejich detailnejsı popis lze nalezt v [18]
221 Datove bloky a metody jejich alokace
Datovym blokem oznacujeme nejmensı objem dat se kterym je souborovy system scho-pen pracovat V ruznych systemech je zazity termın alokacnı jednotka coz je synony-mum a s nı souvisı velikost alokacnı jednotky Pokud provedeme zapis souboru o velikostinaprıklad 1 kB pri velikosti bloku 4 kB budou na disk zapsany 4 kB dat i kdyz je vyuzityobsah bloku mensı Tento prıstup je jednoduchy pro organizaci dat ale zpusobuje ztratukapacity disku protoze poslednı ze sekvence bloku nalezıcıch danemu souboru s velkou
8
pravdepodobnostı nebude obsazen az do sveho plneho objemu a je tak pro male souboryneefektivnı
Prıstupu pro alokaci bloku pro zapis noveho souboru existuje nekolik V souborovychsystemech extended file system (ext234) tuto praci obstarava tzv block allocator Tenma prehled o aktualne obsazenych blocıch a ma za ukol vyhledat vhodne volne mısto Dodoby zverejnenı FS ext4 pracoval vzdy nad jednım konkretnım souborem V ext4 ale bylprepracovan protoze tento system vyuzıva tzv extenty coz vyzaduje vetsı kontrolu nadrozmıstenım bloku na disku Extentem oznacujeme (pokud mozno) souvislou sekvencibloku tvorıcı jeden soubor ktera je urcena pocatecnım blokem a delkou Odtud plynezasadnı rozdıl bezne organizace (jejımz prıkladem je souborovy system FAT1) ndash velikostbloku Extenty totiz majı promenlivou delku v zavislosti na obsahu Aby bloky mohlybyt ukladany souvisle vyuzıva se odlozeneho zapisu Pozadavky na zapis bloku nejsouobslouzeny okamzite ale az je jich dostatecne mnozstvı Teprve pak se provadı zapis jakojedina operace Vyuzıvanım extentu odpada nutnost velke rezie pri ukladanı objemnychsouboru Souvisle ctenı je vzhledem k sekvencnı povaze stale prevazne rotacnıch fyzickychmediı vyhodne protoze tak umoznuje maximalne vyuzıt jejich vykon
222 Reprezentace souboru
Soubor je tvoren nazvem atributy a obsahem Nazvu se take nekdy rıka symbolicke jmenoa to proto ze z pohledu souborovych systemu se jedna jen o jiny zpusob identifikaceJednoznacnym identifikatorem je v systemu Linux tzv inode Tento termın je odvozenze slov index node a jedna se o poradove cıslo souboru ve svazku
Nazev souboru je retezec znaku a jeho delka byla napr u souborovych systemuFAT1632 pevna ndash 8 znaku (a to jeste ne vsechny ASCII znaky) pro samotny nazevsouboru a 3 znaky pro prıponu [13] Tento format jmen se uznacuje jako short filenamenebo format 83 Casem se tento prıstup ukazal jako nevyhovujıcı a proto vznikla nad-stavba LFN (long filenames) ktera umoznovala v techto systemech souboru (v dnesnıdobe uz zastaralych) pouzıvat jmena az 255 znaku dlouhe Tato delka je typicka prosystemy ext234 UDF XFS a mnoho dalsıch Nektere systemy majı tuto hranici posu-nutou jeste mnohem dale ndash naprıklad u ReFS je pro nazev souboru vyhrazeno az 32 kBV nazvech souboru take byvajı omezenı na pouzitelne znaky nebo konkretnı retezcektere majı svuj specialnı vyznam Typicky se jedna o retezce
rdquoldquo ci
rdquoldquo Z implementac-
nıch duvodu nebyva povolen znak 0 (ASCII hodnota 0x00)
223 Reprezentace adresaru
Adresar je samostatny typ souboru a jeho obsahem je mnozina souboru Reprezentaciteto mnoziny lze implementovat ruznymi zpusoby z cehoz plynou i prıpadna omezenı namaximalnı pocet souboru obsazenych v jedinem adresari
Souborovy system ext2 ma v kazdem inode rezervovano 12 mıst pro ukazatele nabloky (tzv prıme adresovanı) Pokud je obsah souboru (nebo pocet souboru v adresari)
1File Allocation Table
9
bull Writeback mode ndash provadı se zalohovanı struktury souboroveho systemu takzepri poruse sice nedojde ke ztrate metadat souboroveho systemu ale obsah zapi-sovaneho bloku nemusı byt korektnı To je zpusobeno poradım operacı zapis dozurnalu zapis metadat zapis datoveho bloku
bull Ordered mode ndash podobne jako writeback mode zalohujı se pouze metadataavsak zde je rozdıl v poradı provadenych operacı Nejdrıve se zapisujı data a azpote metadata do zurnalu
bull Data mode ndash nejvyssı uroven ochrany zalohujı se metadata i datove bloky To jeale vyvazeno nizsım vykonem protoze jsou veskera data ukladana dvakrat nejdrıvedo zurnalu a pote na skutecnou adresu
maly vyuzıvajı se prımo tato mısta pro ulozenı dat Delsı obsah se uklada do samostat-nych skupin bloku (tzv neprıme adresovanı prvnı az tretı urovne) ktere jsou adresovanyz mıst prımeho adresovanı
BFS (Berkley Fast Filesystem) pracuje s promennou delkou adresaru trochu jinymzpusobem Pri zakladanı adresare se alokuje prostor nejen pro prave zapisovany obsahale i rezervuje prostor pro prıpadne rozsırenı obsahu Soucastı metadat adresare jsoupro tyto ucely vyhrazeny dva ukazatele Prvnı smeruje na poslednı obsazeny zaznam adruhy na konec celkove alokovane oblasti (obsazena + rezervovana oblast)
224 Zurnalovanı
Pro zabezpecenı konzistence ukladanych dat v prıpade vypadku napajenı byla vyvinutatechnika zurnalovanı Jde o techniku kdy se na disk zapisujı krome uzivatelskych dati dalsı zaznamy ktere umoznujı v prıpade potreby obnovit konkretnı obsah datovehobloku a zajistit tak konzistenci bloku Tento specialnı zaznam se nazyva zurnal a jeto klasicky soubor ktery nenı beznemu uzivateli prıstupny Zurnalovanı lze realizovatpomocı nekolika prıstupu z nichz se vyuzıva predevsım
23 FUSE
FUSE [19] filesystem in userspace je technologie umoznujıcı neprivilegiovanym uzivate-lum pripojovanı a odpojovanı specialnıch souborovych systemu Projekt byl puvodnevyvıjen pro system GNULinux avsak v dnesnı dobe je k dispozici i pro platformyFreeBSD Mac OS X OpenSolaris a rada dalsıch Pri beznem pripojenı svazku pomocımount je totiz nutne mıt opravnenı spravce systemu (root) Implementace FUSE je bez-nym programem ktery je spousten pod aktualne prihlasenym uzivatelem (samozrejmepokud nenı modifikovan prıkazy chmod ci chown) Z tohoto faktu vyplyvajı i dalsı vlast-nosti ze kterych zminme odstınenı programatora od nutnosti znat a dodrzovat pravidlapro tvorbu modulu jadra operacnıho systemu Bezne FS totiz byvajı do jadra zaclenenyprave touto formou
10
231 Struktura
FUSE se sklada ze trı vzajemne komunikujıcıch castı kterymi jsou
bull modul pro jadro ndash drıvejsı verze modulu FUSE byly sıreny samostatne avsak odverze jadra Linuxu 2614 je jiz zaclenen do hlavnı vyvojove vetve nenı protozpravidla nutne jej dodatecne zavadet pomocı modprobe
bull rozhranı knihovny FUSE ndash je nativne tvoreno nekolika hlavickovymi soubory v ja-zyce C poskytuje deklarace metod pro implementaci rady systemovych volanı
bull specialnı soubor devfuse ndash zprostredkovava koumunikaci mezi modulem v jadrea rozhranım knihovny Pri pripojovanı souboroveho systemu vyuzıvajıcı FUSE seprovede otevrenı tohoto specialnıho souboru a nasledna komunikace probıha uz jenskrze takto zıskany popisovac (file descriptor)
Modul v jadre je prave jeden ale rozhranı knihovny je implementovano v rade programo-vacıch jazyku Pro strucny prehled jimi jsou C C++ Java C Haskell Python PerlRuby PHP ci Lua Uplny vypis je dostupny na oficialnıch webovych strankach projektuFUSE Nasleduje obrazek 21 se znaroznenım prubehu systemoveho volanı readdiravsak princip komunikace je spolecny pro vsechna podporovana systemova volanı
11
Obrazek 21 Prubeh zpracovanı pozadavku ve FUSE Obrazek byl prevzat z [19]
Je zde videt prenos pozadavku na zobrazenı obsahu adresare prochazejıcı uzivatel-skym prostorem (userspace) skrze obecnou vrstvu VFS (Virtual File System) a nasled-neho predanı modulu FUSE v jadru systemu To jej dale distribuuje zpet do uzivatel-skeho prostoru kde se nachazı implementace rozhranı FUSE (examplehello) Volanıse vyhodnotı vykonanım prıslusne metody a vysledek operace putuje stejnou cestou zpet
232 Prıklady souborovych systemu vyuzıvajıcı FUSE
Technologie FUSE se drzı hesla systemu UNIXrdquovse je souborldquo a nasla si tak sve prız-
nivce Svedcı o tom mnozstvı vytvorenych souborovych systemu ktere tuto technologiivyuzıvajı Mezi ty znamejsı patrı
bull sshfs [6] ndash umoznuje pripojenı vzdaleneho adresare pomocı protokolu SSH
bull CurlFtpFS [2] ndash zprostredkovava pripojenı FTP serveru jako lokalnıho adresare
bull WikipediaFS [9] ndash prace s clanky z portalu zalozenych na systemu Wiki jakos beznymi soubory
bull BloggerFS [1] ndash manipulace s prıspevky na blogovacım portalu Bloggercom veforme beznych souboru
233 Zpusob pouzitı
Pouzitı knihovny FUSE spocıva ve vlastnı implementaci obsluznych funkcı (tzv han-dlers) pro jednotlive ukony ktere lze se soubory provadet a jejiz nazvy odpovıdajı sys-temovym volanım FUSE definuje pro manipulaci se soubory az 39 (od verze knihovny
12
26) obsluznych funkcı avsak pro zakladnı pouzitı nenı nutne implementovat vsechnyJednoduchy avsak jiz funkcnı souborovy system lze sestavit pomocı getattr openopendir a read Ukazka implementace tohoto FS je v jazyce C na obrazcıch 22 a 23Deklarace vsech obsluznych funkcı lze nalezt v hlavickovem souboru fuseh ktery byva
include ltstdiohgt
include ltfusehgt
static int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
int main(int argc char argv[])
struct fuse_operations fsOperations
fsOperationsgetattr = fuse_getattr
fsOperationsopen = fuse_open
fsOperationsread = fuse_read
fsOperationsreaddir = fuse_readdir
return fuse_main(argc argv ampfsOperations NULL)
Obrazek 22 Ukazka pouzitı knihovny FUSE
umısten v usrincludefuse (tato cesta se ale muze mezi linuxovymi distribucemilisit) Soubory zde nejsou identifikovany pomocı inode jak je zvykem ve skutecnych FSale pouze pomocı cesty kterou lze nalezt ve vetsine obsluznych funkcı na mıste prvnıhoparametru Pokud byla operace provedena korektne obsluzna funkce by mela ve vetsineprıpadu vracet cıslo 0 Vsechny druhy chyb jsou indikovany zapornou hodnotou kon-stant definujıcıch druh chyby Jejich soupis se naleza v hlavickovem souboru errorh
(umıstenı souboru se muze lisit)
24 Zabezpecenı citlivych dat
Potreba chranit data pred cizımi osobami vznikla uz v davnych dobach jeste pred rozvo-jem vypocetnı techniky Jednım z odvetvı ktere se ochranou dat zabyva je kryptografieData lze chranit vıce prostredky a jejich sifrovanı je pouze jednou z aplikacı Nasledujıcıcast poskytuje prehled o dalsıch zpusobech ochrany dat [15]
241 Steganografie
Steganografie spocıva ve skrytı zpravy Zasadnım rozdılem oproti kryptografii je prede-vsım snaha o skrytı samotne existence zpravy V minulosti se vyuzıvaly tzv neviditelne
13
Pro ukazku nasleduje prıklad implementace operace read
int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
char msg[] = Pokusny text pro ctenı
int msgLength = strlen(msg)
if(strcmp(path example) == 0)
memcpy(buffer msg msgLength)
return msgLength
else if(strcmp(path null) == 0)
return 0
else
return -ENOENT
Obrazek 23 Ukazka implementace operace read
inkousty jimiz byla napsana zprava na papır Jejı prıjemce pak cely list nahral a ter-mochemickou reakcı se text objevil Dokonce bylo pouzito i hlavy otroka kdy mu bylanejdrıve oholena hlava a pote na ni vytetovana zprava Az mu vlasy zpet dorostly bylvyslan na cestu pres nepratelske uzemı a prıjemce mu ji opet oholil aby si zpravu mohlprecıst Tento zpusob samozrejme nebyl vzdy vhodny a proto se lide snazili vymysletdalsı zpusoby skrytı dat Pri pouzitı psaneho textu (rukou ci na psacım stroji) jako nos-neho materialu se da vyuzıt mechanismu psacıho stroje Do volneho prostoru mezi radkyse skryvaly zpravy psanım bez barevne pasky takze v papıru zustal pouze otlak pısmenNebo se tajna zprava mnohonasobne zmensila aby pri letmem pohledu pripomınala jed-nolity cerny bod Ten se pak vlepil do tisteneho textu jako tecka na konci vety tzvmikrotecky
242 Digitalnı steganografie
I v digitalnı dobe stale existujı postupy jak skryvat data Naprıklad u fotografiı mu-zeme dobre vyuzıt nedokonalosti lidskeho oka Pokud zmenıme jen nepatrne barevnyodstın v nektere casti fotografie nenı tato uprava na pohled zretelna ndash nemusı se jednato anomalii ale ucel Stejny princip lze aplikovat i na zvuky Hudba se po digitalizacicasto komprimuje Podle druhu pouziteho algoritmu muze dochazet ke ztrate hudebnıinformace Pokud zmenıme nejnizsı bit u cısla reprezentujıcıho frekvenci stejne jakou obrazku nebude tato zmena pri poslechu patrna Tento typ techniky se oznacuje jakozmena hodnoty LSB (least significant bit) Pokud nekdo tento soubor jakkoliv bezneupravı (orıznutı obrazku zmena bitrate zvuku) znamena to ve vetsine prıpadu po-skozenı nebo uplnou ztratu skryte informace U pruznych disku (disket) umı nektere
14
programy zamerne oznacit sektory na jejım magnetickem povrchu jako poskozene Tımsice dojde k castecnemu snızenı kapacity pro bezne soubory ale nehrozı zde nebezpecıprepisu ztracenych dat pri bezne praci Pokud uzivatel chce zapsat soubor na disketuoperacnı system pro nej vyuzije pouze volne sektory ktere jsou v poradku a chybnevzdy preskocı Skrytı dat nemusı ale nutne znamenat rozpoznatelnou zmenu vystupuObrazovy format BMP svou stavbou umoznuje doslova neviditelne skrytı (omezeneho)mnozstvı dat Jedinym prıpadnym vodıtkem k odhalenı je zvyseny objem dat
243 Kryptografie
Kryptografie jinymi slovy sifrovanı je postup transformace originalnı zpravy do podobyktera je v idealnım prıpade citelna pouze se znalostı tzv klıce Prı pouzitı stejne vstupnızpravy sifrovacıho algoritmu ale jineho klıce zıskame odlisny vystup Mıra zabezpecenızpravy zavisı na zvolenem algoritmu a sifrovacım klıci Proto pri chybnem pouzitı nekte-reho z bezne pouzıvanych algoritmu (napr RSA) a klıce (pouzitı retezce
rdquohesloldquo) nemusı
byt pro utocnıka velkou prekazkou zjistit obsah puvodnı zpravySifrovacı algoritmy rozdelujeme do dvou zakladnıch skupin podle typu klıce
bull Symetricka kryptografie ndash pouzıva pro sifrovanı i desifrovanı stejny klıc kteryby mel zustat v tajnosti Patrı zde naprıklad algoritmy DES [14] TwoFish [8] av dnesnı dobe v teto kategorii nejpouzıvanejsı AES [10]
bull Asymetricka kryptografie ndash vyuzıva dva typy klıcu verejny a privatnı Verejnyklıc ktery slouzı pro desifrovanı (uz podle nazvu) je mozne jej zaslat prıjemncisifrovane zpravy beznou nezabezpecenou elektronickou postou nebo jej zverejnitna svych webovych strankach Oproti tomu privatnı klıc musı zustat v tajnostiu sveho majitele Zastupcem teto kategorie je algoritmus RSA [5]
Sifrovana komunikace pak probıha podle nasledujıcıho scenare pripomınajıcıho kla-sickou postovnı korespondenci
1 Odesilatel (osoba A) si zajistı verejny klıc prıjemce (osoba B) naprıklad jejımstazenım z osobnıho blogu osoby B
2 Osoba A zasifruje svou zpravu pomocı verejneho klıce B a odesle ji jako beznye-mail
3 Osoba B zpravu desifruje pomocı sveho privatnıho klıce a zıska tak puvodnıobsah
Oba typy klıcu se generujı vzdy jako par Pro jejich vytvorenı je nutne dodat radunahodnych cısel Jednou z pouzitych metod jejich generovanı je prectenı hodnotynahodne adresy v pameti nebo sledovanı pozice kurzoru mysi uzivatele
15
Kapitola 3
Analyza
V nasledujıcı casti budou popsany pozadavky na navrhovany souborovy system a prehledzakladnıch problemu ktere bude nutne behem navrhu resit
31 Pozadavky na souborovy system
Pro uceleny pohled a dalsı postup je vhodne nejprve specifikovat pozadavky na vytvarenysystem Jsou jimi predevsım
bull Ochrana obsahu FS heslem ndash skryty FS by mel idealne tajit nejen svou vlastnıexistenci ale predevsım by nemel dovolit uzivatelum neznajıcıch klıc prıstupovatk jeho obsahu
bull Existence vıce FS nad jednım ulozistem ndash tento pozadavek muze plnit hned dvefunkce V prve rade jde o castecne nezavisle varianty FS pro organizaci obsahunicmene dalsım dusledkem muze byt jeho vlastnı ochrana Pokud bychom uvazo-vali scenar kdy osoba-utocnık pod pohruzkou donutı svou obetrsquo k vyzrazenı heslado skryteho FS obetrsquo ma sanci sdelit jine nez skutecne heslo a tım dojde ke zprı-stupnenı odlisneho obsahu (pochopitelne za predpokladu ze byl drıve vytvoren)
bull Nezavislost na uloznem mediu ndash knihovna by mela poskytovat dostatecne obecnerozhranı ktere by bylo mozne vyuzıt pro implementaci ruznych typu ulozistrsquo beznutnosti hlubokych zasahu do knihovny samotne Prıkladem typu ulozistrsquo mohoubyt soubory MP3 JPG webova sluzba
bull Alespon castecna odolnost proti chybejıcım fragmentum ndash v prıpade ze bude ulo-zistem naprıklad adresar s MP3 soubory lze v prubehu casu predpokladat jeho mo-difikace ruzne zavazneho charaketru (platı pochopitelne nejen pro soubory MP3)Mohou jimi byt zmena umıstenı souboru v adresarıch i kompletnı odstranenı celehoalba Tyto zasahy ruznou merou ovlivnujı spolehlivost skryteho FS a bude nutneje v navrhu zohlednit
16
bull Jednouzivatelsky rezim ndash skryty FS ze sve podstaty nenı urcen pro kazdeho uziva-tele ktery ma prıstup k ulozisti Predpokladem je uzky okruh osob ktere budouznat heslo pro prıstup
Vyvoj aplikace splnujıcı vyse uvedena kriteria se muze ubırat dvema smery V prve radelze vytvorit tzv aplikaci na mıru To znamena kompletnı prizpusobenı vyvoje zakom-ponovanı optimalizacı vhodnych pro specificke pouzitı atd Dalsım smerem je knihovnaposkytujıcı obecne rozhranı v takove forme aby bylo mozne vyhovet pozadavkum nasystem Vyhodou muze byt dalsı samostatne pouzitı konkretnıch modulu bez nutnostihlubokych zasahu do puvodnıch zdrojovych kodu Konecne rozhodnutı pro perspektiv-nejsı pouzitı tak padlo na variantu vytvorenı knihovny ktera bude schopna vytvorit aspravovat skryty souborovy system
17
Kapitola 4
Navrh souboroveho systemu
Kapitola navrhu popisuje obecne postupy resenı problemu ktere jsou spojeny s nasled-nym vyvojem skryteho souboroveho systemu Jejich soupis je uveden v kapitole 3 Tyjsou dale detailneji rozvedeny v kapitole 5 zabyvajıcı se implementacı
41 Uloziste
Cılem prace je zajistit ukladanı souboru do jinych Umıstenı techto jinych souboru budedale oznacovano jako uloziste
42 Vymezenı termınu
Pro ujasnenı vyznamu nekterych termınu dale obsazenych v teto prace nasleduje jejichprehled s podrobnejsım vysvetlenım
bull hash ndash jednoznacna identifikace prave jedne entitiy v ulozisti
bull fragment ndash souvisı se skrytym souborem a jde o poradove cıslo useku dat kterepredstavuje cast obsahu skryteho souboru Slozenım vsech fragmentu dostanemekompletnı obsah souboru proto jeho hodnota v ramci skryteho FS musı byt jedi-necna
bull blok ndash souvisı s entitou v ulozisti jedna se o poradove cıslo dılcı casti obsahufyzickeho souboru Tento identifikator musı byt unikatnı v ramci hash
bull vnoreny FS ndash samostatny prostor pro skryvanı souboru v ramci stejneho ulozisteImplementace systemu je muze rozlisovat naprıklad pomocı zadaneho hesla
43 Zpusob organizace souboru
Jak jiz bylo v zmıneno v teoreticke casti 221 nejpouzıvanejsımi druhy organizace obsahusouboru je fragmentace a spojita alokace Uloziste je jen obecne rozhranı a muze mıt
18
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
pravdepodobnostı nebude obsazen az do sveho plneho objemu a je tak pro male souboryneefektivnı
Prıstupu pro alokaci bloku pro zapis noveho souboru existuje nekolik V souborovychsystemech extended file system (ext234) tuto praci obstarava tzv block allocator Tenma prehled o aktualne obsazenych blocıch a ma za ukol vyhledat vhodne volne mısto Dodoby zverejnenı FS ext4 pracoval vzdy nad jednım konkretnım souborem V ext4 ale bylprepracovan protoze tento system vyuzıva tzv extenty coz vyzaduje vetsı kontrolu nadrozmıstenım bloku na disku Extentem oznacujeme (pokud mozno) souvislou sekvencibloku tvorıcı jeden soubor ktera je urcena pocatecnım blokem a delkou Odtud plynezasadnı rozdıl bezne organizace (jejımz prıkladem je souborovy system FAT1) ndash velikostbloku Extenty totiz majı promenlivou delku v zavislosti na obsahu Aby bloky mohlybyt ukladany souvisle vyuzıva se odlozeneho zapisu Pozadavky na zapis bloku nejsouobslouzeny okamzite ale az je jich dostatecne mnozstvı Teprve pak se provadı zapis jakojedina operace Vyuzıvanım extentu odpada nutnost velke rezie pri ukladanı objemnychsouboru Souvisle ctenı je vzhledem k sekvencnı povaze stale prevazne rotacnıch fyzickychmediı vyhodne protoze tak umoznuje maximalne vyuzıt jejich vykon
222 Reprezentace souboru
Soubor je tvoren nazvem atributy a obsahem Nazvu se take nekdy rıka symbolicke jmenoa to proto ze z pohledu souborovych systemu se jedna jen o jiny zpusob identifikaceJednoznacnym identifikatorem je v systemu Linux tzv inode Tento termın je odvozenze slov index node a jedna se o poradove cıslo souboru ve svazku
Nazev souboru je retezec znaku a jeho delka byla napr u souborovych systemuFAT1632 pevna ndash 8 znaku (a to jeste ne vsechny ASCII znaky) pro samotny nazevsouboru a 3 znaky pro prıponu [13] Tento format jmen se uznacuje jako short filenamenebo format 83 Casem se tento prıstup ukazal jako nevyhovujıcı a proto vznikla nad-stavba LFN (long filenames) ktera umoznovala v techto systemech souboru (v dnesnıdobe uz zastaralych) pouzıvat jmena az 255 znaku dlouhe Tato delka je typicka prosystemy ext234 UDF XFS a mnoho dalsıch Nektere systemy majı tuto hranici posu-nutou jeste mnohem dale ndash naprıklad u ReFS je pro nazev souboru vyhrazeno az 32 kBV nazvech souboru take byvajı omezenı na pouzitelne znaky nebo konkretnı retezcektere majı svuj specialnı vyznam Typicky se jedna o retezce
rdquoldquo ci
rdquoldquo Z implementac-
nıch duvodu nebyva povolen znak 0 (ASCII hodnota 0x00)
223 Reprezentace adresaru
Adresar je samostatny typ souboru a jeho obsahem je mnozina souboru Reprezentaciteto mnoziny lze implementovat ruznymi zpusoby z cehoz plynou i prıpadna omezenı namaximalnı pocet souboru obsazenych v jedinem adresari
Souborovy system ext2 ma v kazdem inode rezervovano 12 mıst pro ukazatele nabloky (tzv prıme adresovanı) Pokud je obsah souboru (nebo pocet souboru v adresari)
1File Allocation Table
9
bull Writeback mode ndash provadı se zalohovanı struktury souboroveho systemu takzepri poruse sice nedojde ke ztrate metadat souboroveho systemu ale obsah zapi-sovaneho bloku nemusı byt korektnı To je zpusobeno poradım operacı zapis dozurnalu zapis metadat zapis datoveho bloku
bull Ordered mode ndash podobne jako writeback mode zalohujı se pouze metadataavsak zde je rozdıl v poradı provadenych operacı Nejdrıve se zapisujı data a azpote metadata do zurnalu
bull Data mode ndash nejvyssı uroven ochrany zalohujı se metadata i datove bloky To jeale vyvazeno nizsım vykonem protoze jsou veskera data ukladana dvakrat nejdrıvedo zurnalu a pote na skutecnou adresu
maly vyuzıvajı se prımo tato mısta pro ulozenı dat Delsı obsah se uklada do samostat-nych skupin bloku (tzv neprıme adresovanı prvnı az tretı urovne) ktere jsou adresovanyz mıst prımeho adresovanı
BFS (Berkley Fast Filesystem) pracuje s promennou delkou adresaru trochu jinymzpusobem Pri zakladanı adresare se alokuje prostor nejen pro prave zapisovany obsahale i rezervuje prostor pro prıpadne rozsırenı obsahu Soucastı metadat adresare jsoupro tyto ucely vyhrazeny dva ukazatele Prvnı smeruje na poslednı obsazeny zaznam adruhy na konec celkove alokovane oblasti (obsazena + rezervovana oblast)
224 Zurnalovanı
Pro zabezpecenı konzistence ukladanych dat v prıpade vypadku napajenı byla vyvinutatechnika zurnalovanı Jde o techniku kdy se na disk zapisujı krome uzivatelskych dati dalsı zaznamy ktere umoznujı v prıpade potreby obnovit konkretnı obsah datovehobloku a zajistit tak konzistenci bloku Tento specialnı zaznam se nazyva zurnal a jeto klasicky soubor ktery nenı beznemu uzivateli prıstupny Zurnalovanı lze realizovatpomocı nekolika prıstupu z nichz se vyuzıva predevsım
23 FUSE
FUSE [19] filesystem in userspace je technologie umoznujıcı neprivilegiovanym uzivate-lum pripojovanı a odpojovanı specialnıch souborovych systemu Projekt byl puvodnevyvıjen pro system GNULinux avsak v dnesnı dobe je k dispozici i pro platformyFreeBSD Mac OS X OpenSolaris a rada dalsıch Pri beznem pripojenı svazku pomocımount je totiz nutne mıt opravnenı spravce systemu (root) Implementace FUSE je bez-nym programem ktery je spousten pod aktualne prihlasenym uzivatelem (samozrejmepokud nenı modifikovan prıkazy chmod ci chown) Z tohoto faktu vyplyvajı i dalsı vlast-nosti ze kterych zminme odstınenı programatora od nutnosti znat a dodrzovat pravidlapro tvorbu modulu jadra operacnıho systemu Bezne FS totiz byvajı do jadra zaclenenyprave touto formou
10
231 Struktura
FUSE se sklada ze trı vzajemne komunikujıcıch castı kterymi jsou
bull modul pro jadro ndash drıvejsı verze modulu FUSE byly sıreny samostatne avsak odverze jadra Linuxu 2614 je jiz zaclenen do hlavnı vyvojove vetve nenı protozpravidla nutne jej dodatecne zavadet pomocı modprobe
bull rozhranı knihovny FUSE ndash je nativne tvoreno nekolika hlavickovymi soubory v ja-zyce C poskytuje deklarace metod pro implementaci rady systemovych volanı
bull specialnı soubor devfuse ndash zprostredkovava koumunikaci mezi modulem v jadrea rozhranım knihovny Pri pripojovanı souboroveho systemu vyuzıvajıcı FUSE seprovede otevrenı tohoto specialnıho souboru a nasledna komunikace probıha uz jenskrze takto zıskany popisovac (file descriptor)
Modul v jadre je prave jeden ale rozhranı knihovny je implementovano v rade programo-vacıch jazyku Pro strucny prehled jimi jsou C C++ Java C Haskell Python PerlRuby PHP ci Lua Uplny vypis je dostupny na oficialnıch webovych strankach projektuFUSE Nasleduje obrazek 21 se znaroznenım prubehu systemoveho volanı readdiravsak princip komunikace je spolecny pro vsechna podporovana systemova volanı
11
Obrazek 21 Prubeh zpracovanı pozadavku ve FUSE Obrazek byl prevzat z [19]
Je zde videt prenos pozadavku na zobrazenı obsahu adresare prochazejıcı uzivatel-skym prostorem (userspace) skrze obecnou vrstvu VFS (Virtual File System) a nasled-neho predanı modulu FUSE v jadru systemu To jej dale distribuuje zpet do uzivatel-skeho prostoru kde se nachazı implementace rozhranı FUSE (examplehello) Volanıse vyhodnotı vykonanım prıslusne metody a vysledek operace putuje stejnou cestou zpet
232 Prıklady souborovych systemu vyuzıvajıcı FUSE
Technologie FUSE se drzı hesla systemu UNIXrdquovse je souborldquo a nasla si tak sve prız-
nivce Svedcı o tom mnozstvı vytvorenych souborovych systemu ktere tuto technologiivyuzıvajı Mezi ty znamejsı patrı
bull sshfs [6] ndash umoznuje pripojenı vzdaleneho adresare pomocı protokolu SSH
bull CurlFtpFS [2] ndash zprostredkovava pripojenı FTP serveru jako lokalnıho adresare
bull WikipediaFS [9] ndash prace s clanky z portalu zalozenych na systemu Wiki jakos beznymi soubory
bull BloggerFS [1] ndash manipulace s prıspevky na blogovacım portalu Bloggercom veforme beznych souboru
233 Zpusob pouzitı
Pouzitı knihovny FUSE spocıva ve vlastnı implementaci obsluznych funkcı (tzv han-dlers) pro jednotlive ukony ktere lze se soubory provadet a jejiz nazvy odpovıdajı sys-temovym volanım FUSE definuje pro manipulaci se soubory az 39 (od verze knihovny
12
26) obsluznych funkcı avsak pro zakladnı pouzitı nenı nutne implementovat vsechnyJednoduchy avsak jiz funkcnı souborovy system lze sestavit pomocı getattr openopendir a read Ukazka implementace tohoto FS je v jazyce C na obrazcıch 22 a 23Deklarace vsech obsluznych funkcı lze nalezt v hlavickovem souboru fuseh ktery byva
include ltstdiohgt
include ltfusehgt
static int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
int main(int argc char argv[])
struct fuse_operations fsOperations
fsOperationsgetattr = fuse_getattr
fsOperationsopen = fuse_open
fsOperationsread = fuse_read
fsOperationsreaddir = fuse_readdir
return fuse_main(argc argv ampfsOperations NULL)
Obrazek 22 Ukazka pouzitı knihovny FUSE
umısten v usrincludefuse (tato cesta se ale muze mezi linuxovymi distribucemilisit) Soubory zde nejsou identifikovany pomocı inode jak je zvykem ve skutecnych FSale pouze pomocı cesty kterou lze nalezt ve vetsine obsluznych funkcı na mıste prvnıhoparametru Pokud byla operace provedena korektne obsluzna funkce by mela ve vetsineprıpadu vracet cıslo 0 Vsechny druhy chyb jsou indikovany zapornou hodnotou kon-stant definujıcıch druh chyby Jejich soupis se naleza v hlavickovem souboru errorh
(umıstenı souboru se muze lisit)
24 Zabezpecenı citlivych dat
Potreba chranit data pred cizımi osobami vznikla uz v davnych dobach jeste pred rozvo-jem vypocetnı techniky Jednım z odvetvı ktere se ochranou dat zabyva je kryptografieData lze chranit vıce prostredky a jejich sifrovanı je pouze jednou z aplikacı Nasledujıcıcast poskytuje prehled o dalsıch zpusobech ochrany dat [15]
241 Steganografie
Steganografie spocıva ve skrytı zpravy Zasadnım rozdılem oproti kryptografii je prede-vsım snaha o skrytı samotne existence zpravy V minulosti se vyuzıvaly tzv neviditelne
13
Pro ukazku nasleduje prıklad implementace operace read
int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
char msg[] = Pokusny text pro ctenı
int msgLength = strlen(msg)
if(strcmp(path example) == 0)
memcpy(buffer msg msgLength)
return msgLength
else if(strcmp(path null) == 0)
return 0
else
return -ENOENT
Obrazek 23 Ukazka implementace operace read
inkousty jimiz byla napsana zprava na papır Jejı prıjemce pak cely list nahral a ter-mochemickou reakcı se text objevil Dokonce bylo pouzito i hlavy otroka kdy mu bylanejdrıve oholena hlava a pote na ni vytetovana zprava Az mu vlasy zpet dorostly bylvyslan na cestu pres nepratelske uzemı a prıjemce mu ji opet oholil aby si zpravu mohlprecıst Tento zpusob samozrejme nebyl vzdy vhodny a proto se lide snazili vymysletdalsı zpusoby skrytı dat Pri pouzitı psaneho textu (rukou ci na psacım stroji) jako nos-neho materialu se da vyuzıt mechanismu psacıho stroje Do volneho prostoru mezi radkyse skryvaly zpravy psanım bez barevne pasky takze v papıru zustal pouze otlak pısmenNebo se tajna zprava mnohonasobne zmensila aby pri letmem pohledu pripomınala jed-nolity cerny bod Ten se pak vlepil do tisteneho textu jako tecka na konci vety tzvmikrotecky
242 Digitalnı steganografie
I v digitalnı dobe stale existujı postupy jak skryvat data Naprıklad u fotografiı mu-zeme dobre vyuzıt nedokonalosti lidskeho oka Pokud zmenıme jen nepatrne barevnyodstın v nektere casti fotografie nenı tato uprava na pohled zretelna ndash nemusı se jednato anomalii ale ucel Stejny princip lze aplikovat i na zvuky Hudba se po digitalizacicasto komprimuje Podle druhu pouziteho algoritmu muze dochazet ke ztrate hudebnıinformace Pokud zmenıme nejnizsı bit u cısla reprezentujıcıho frekvenci stejne jakou obrazku nebude tato zmena pri poslechu patrna Tento typ techniky se oznacuje jakozmena hodnoty LSB (least significant bit) Pokud nekdo tento soubor jakkoliv bezneupravı (orıznutı obrazku zmena bitrate zvuku) znamena to ve vetsine prıpadu po-skozenı nebo uplnou ztratu skryte informace U pruznych disku (disket) umı nektere
14
programy zamerne oznacit sektory na jejım magnetickem povrchu jako poskozene Tımsice dojde k castecnemu snızenı kapacity pro bezne soubory ale nehrozı zde nebezpecıprepisu ztracenych dat pri bezne praci Pokud uzivatel chce zapsat soubor na disketuoperacnı system pro nej vyuzije pouze volne sektory ktere jsou v poradku a chybnevzdy preskocı Skrytı dat nemusı ale nutne znamenat rozpoznatelnou zmenu vystupuObrazovy format BMP svou stavbou umoznuje doslova neviditelne skrytı (omezeneho)mnozstvı dat Jedinym prıpadnym vodıtkem k odhalenı je zvyseny objem dat
243 Kryptografie
Kryptografie jinymi slovy sifrovanı je postup transformace originalnı zpravy do podobyktera je v idealnım prıpade citelna pouze se znalostı tzv klıce Prı pouzitı stejne vstupnızpravy sifrovacıho algoritmu ale jineho klıce zıskame odlisny vystup Mıra zabezpecenızpravy zavisı na zvolenem algoritmu a sifrovacım klıci Proto pri chybnem pouzitı nekte-reho z bezne pouzıvanych algoritmu (napr RSA) a klıce (pouzitı retezce
rdquohesloldquo) nemusı
byt pro utocnıka velkou prekazkou zjistit obsah puvodnı zpravySifrovacı algoritmy rozdelujeme do dvou zakladnıch skupin podle typu klıce
bull Symetricka kryptografie ndash pouzıva pro sifrovanı i desifrovanı stejny klıc kteryby mel zustat v tajnosti Patrı zde naprıklad algoritmy DES [14] TwoFish [8] av dnesnı dobe v teto kategorii nejpouzıvanejsı AES [10]
bull Asymetricka kryptografie ndash vyuzıva dva typy klıcu verejny a privatnı Verejnyklıc ktery slouzı pro desifrovanı (uz podle nazvu) je mozne jej zaslat prıjemncisifrovane zpravy beznou nezabezpecenou elektronickou postou nebo jej zverejnitna svych webovych strankach Oproti tomu privatnı klıc musı zustat v tajnostiu sveho majitele Zastupcem teto kategorie je algoritmus RSA [5]
Sifrovana komunikace pak probıha podle nasledujıcıho scenare pripomınajıcıho kla-sickou postovnı korespondenci
1 Odesilatel (osoba A) si zajistı verejny klıc prıjemce (osoba B) naprıklad jejımstazenım z osobnıho blogu osoby B
2 Osoba A zasifruje svou zpravu pomocı verejneho klıce B a odesle ji jako beznye-mail
3 Osoba B zpravu desifruje pomocı sveho privatnıho klıce a zıska tak puvodnıobsah
Oba typy klıcu se generujı vzdy jako par Pro jejich vytvorenı je nutne dodat radunahodnych cısel Jednou z pouzitych metod jejich generovanı je prectenı hodnotynahodne adresy v pameti nebo sledovanı pozice kurzoru mysi uzivatele
15
Kapitola 3
Analyza
V nasledujıcı casti budou popsany pozadavky na navrhovany souborovy system a prehledzakladnıch problemu ktere bude nutne behem navrhu resit
31 Pozadavky na souborovy system
Pro uceleny pohled a dalsı postup je vhodne nejprve specifikovat pozadavky na vytvarenysystem Jsou jimi predevsım
bull Ochrana obsahu FS heslem ndash skryty FS by mel idealne tajit nejen svou vlastnıexistenci ale predevsım by nemel dovolit uzivatelum neznajıcıch klıc prıstupovatk jeho obsahu
bull Existence vıce FS nad jednım ulozistem ndash tento pozadavek muze plnit hned dvefunkce V prve rade jde o castecne nezavisle varianty FS pro organizaci obsahunicmene dalsım dusledkem muze byt jeho vlastnı ochrana Pokud bychom uvazo-vali scenar kdy osoba-utocnık pod pohruzkou donutı svou obetrsquo k vyzrazenı heslado skryteho FS obetrsquo ma sanci sdelit jine nez skutecne heslo a tım dojde ke zprı-stupnenı odlisneho obsahu (pochopitelne za predpokladu ze byl drıve vytvoren)
bull Nezavislost na uloznem mediu ndash knihovna by mela poskytovat dostatecne obecnerozhranı ktere by bylo mozne vyuzıt pro implementaci ruznych typu ulozistrsquo beznutnosti hlubokych zasahu do knihovny samotne Prıkladem typu ulozistrsquo mohoubyt soubory MP3 JPG webova sluzba
bull Alespon castecna odolnost proti chybejıcım fragmentum ndash v prıpade ze bude ulo-zistem naprıklad adresar s MP3 soubory lze v prubehu casu predpokladat jeho mo-difikace ruzne zavazneho charaketru (platı pochopitelne nejen pro soubory MP3)Mohou jimi byt zmena umıstenı souboru v adresarıch i kompletnı odstranenı celehoalba Tyto zasahy ruznou merou ovlivnujı spolehlivost skryteho FS a bude nutneje v navrhu zohlednit
16
bull Jednouzivatelsky rezim ndash skryty FS ze sve podstaty nenı urcen pro kazdeho uziva-tele ktery ma prıstup k ulozisti Predpokladem je uzky okruh osob ktere budouznat heslo pro prıstup
Vyvoj aplikace splnujıcı vyse uvedena kriteria se muze ubırat dvema smery V prve radelze vytvorit tzv aplikaci na mıru To znamena kompletnı prizpusobenı vyvoje zakom-ponovanı optimalizacı vhodnych pro specificke pouzitı atd Dalsım smerem je knihovnaposkytujıcı obecne rozhranı v takove forme aby bylo mozne vyhovet pozadavkum nasystem Vyhodou muze byt dalsı samostatne pouzitı konkretnıch modulu bez nutnostihlubokych zasahu do puvodnıch zdrojovych kodu Konecne rozhodnutı pro perspektiv-nejsı pouzitı tak padlo na variantu vytvorenı knihovny ktera bude schopna vytvorit aspravovat skryty souborovy system
17
Kapitola 4
Navrh souboroveho systemu
Kapitola navrhu popisuje obecne postupy resenı problemu ktere jsou spojeny s nasled-nym vyvojem skryteho souboroveho systemu Jejich soupis je uveden v kapitole 3 Tyjsou dale detailneji rozvedeny v kapitole 5 zabyvajıcı se implementacı
41 Uloziste
Cılem prace je zajistit ukladanı souboru do jinych Umıstenı techto jinych souboru budedale oznacovano jako uloziste
42 Vymezenı termınu
Pro ujasnenı vyznamu nekterych termınu dale obsazenych v teto prace nasleduje jejichprehled s podrobnejsım vysvetlenım
bull hash ndash jednoznacna identifikace prave jedne entitiy v ulozisti
bull fragment ndash souvisı se skrytym souborem a jde o poradove cıslo useku dat kterepredstavuje cast obsahu skryteho souboru Slozenım vsech fragmentu dostanemekompletnı obsah souboru proto jeho hodnota v ramci skryteho FS musı byt jedi-necna
bull blok ndash souvisı s entitou v ulozisti jedna se o poradove cıslo dılcı casti obsahufyzickeho souboru Tento identifikator musı byt unikatnı v ramci hash
bull vnoreny FS ndash samostatny prostor pro skryvanı souboru v ramci stejneho ulozisteImplementace systemu je muze rozlisovat naprıklad pomocı zadaneho hesla
43 Zpusob organizace souboru
Jak jiz bylo v zmıneno v teoreticke casti 221 nejpouzıvanejsımi druhy organizace obsahusouboru je fragmentace a spojita alokace Uloziste je jen obecne rozhranı a muze mıt
18
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
bull Writeback mode ndash provadı se zalohovanı struktury souboroveho systemu takzepri poruse sice nedojde ke ztrate metadat souboroveho systemu ale obsah zapi-sovaneho bloku nemusı byt korektnı To je zpusobeno poradım operacı zapis dozurnalu zapis metadat zapis datoveho bloku
bull Ordered mode ndash podobne jako writeback mode zalohujı se pouze metadataavsak zde je rozdıl v poradı provadenych operacı Nejdrıve se zapisujı data a azpote metadata do zurnalu
bull Data mode ndash nejvyssı uroven ochrany zalohujı se metadata i datove bloky To jeale vyvazeno nizsım vykonem protoze jsou veskera data ukladana dvakrat nejdrıvedo zurnalu a pote na skutecnou adresu
maly vyuzıvajı se prımo tato mısta pro ulozenı dat Delsı obsah se uklada do samostat-nych skupin bloku (tzv neprıme adresovanı prvnı az tretı urovne) ktere jsou adresovanyz mıst prımeho adresovanı
BFS (Berkley Fast Filesystem) pracuje s promennou delkou adresaru trochu jinymzpusobem Pri zakladanı adresare se alokuje prostor nejen pro prave zapisovany obsahale i rezervuje prostor pro prıpadne rozsırenı obsahu Soucastı metadat adresare jsoupro tyto ucely vyhrazeny dva ukazatele Prvnı smeruje na poslednı obsazeny zaznam adruhy na konec celkove alokovane oblasti (obsazena + rezervovana oblast)
224 Zurnalovanı
Pro zabezpecenı konzistence ukladanych dat v prıpade vypadku napajenı byla vyvinutatechnika zurnalovanı Jde o techniku kdy se na disk zapisujı krome uzivatelskych dati dalsı zaznamy ktere umoznujı v prıpade potreby obnovit konkretnı obsah datovehobloku a zajistit tak konzistenci bloku Tento specialnı zaznam se nazyva zurnal a jeto klasicky soubor ktery nenı beznemu uzivateli prıstupny Zurnalovanı lze realizovatpomocı nekolika prıstupu z nichz se vyuzıva predevsım
23 FUSE
FUSE [19] filesystem in userspace je technologie umoznujıcı neprivilegiovanym uzivate-lum pripojovanı a odpojovanı specialnıch souborovych systemu Projekt byl puvodnevyvıjen pro system GNULinux avsak v dnesnı dobe je k dispozici i pro platformyFreeBSD Mac OS X OpenSolaris a rada dalsıch Pri beznem pripojenı svazku pomocımount je totiz nutne mıt opravnenı spravce systemu (root) Implementace FUSE je bez-nym programem ktery je spousten pod aktualne prihlasenym uzivatelem (samozrejmepokud nenı modifikovan prıkazy chmod ci chown) Z tohoto faktu vyplyvajı i dalsı vlast-nosti ze kterych zminme odstınenı programatora od nutnosti znat a dodrzovat pravidlapro tvorbu modulu jadra operacnıho systemu Bezne FS totiz byvajı do jadra zaclenenyprave touto formou
10
231 Struktura
FUSE se sklada ze trı vzajemne komunikujıcıch castı kterymi jsou
bull modul pro jadro ndash drıvejsı verze modulu FUSE byly sıreny samostatne avsak odverze jadra Linuxu 2614 je jiz zaclenen do hlavnı vyvojove vetve nenı protozpravidla nutne jej dodatecne zavadet pomocı modprobe
bull rozhranı knihovny FUSE ndash je nativne tvoreno nekolika hlavickovymi soubory v ja-zyce C poskytuje deklarace metod pro implementaci rady systemovych volanı
bull specialnı soubor devfuse ndash zprostredkovava koumunikaci mezi modulem v jadrea rozhranım knihovny Pri pripojovanı souboroveho systemu vyuzıvajıcı FUSE seprovede otevrenı tohoto specialnıho souboru a nasledna komunikace probıha uz jenskrze takto zıskany popisovac (file descriptor)
Modul v jadre je prave jeden ale rozhranı knihovny je implementovano v rade programo-vacıch jazyku Pro strucny prehled jimi jsou C C++ Java C Haskell Python PerlRuby PHP ci Lua Uplny vypis je dostupny na oficialnıch webovych strankach projektuFUSE Nasleduje obrazek 21 se znaroznenım prubehu systemoveho volanı readdiravsak princip komunikace je spolecny pro vsechna podporovana systemova volanı
11
Obrazek 21 Prubeh zpracovanı pozadavku ve FUSE Obrazek byl prevzat z [19]
Je zde videt prenos pozadavku na zobrazenı obsahu adresare prochazejıcı uzivatel-skym prostorem (userspace) skrze obecnou vrstvu VFS (Virtual File System) a nasled-neho predanı modulu FUSE v jadru systemu To jej dale distribuuje zpet do uzivatel-skeho prostoru kde se nachazı implementace rozhranı FUSE (examplehello) Volanıse vyhodnotı vykonanım prıslusne metody a vysledek operace putuje stejnou cestou zpet
232 Prıklady souborovych systemu vyuzıvajıcı FUSE
Technologie FUSE se drzı hesla systemu UNIXrdquovse je souborldquo a nasla si tak sve prız-
nivce Svedcı o tom mnozstvı vytvorenych souborovych systemu ktere tuto technologiivyuzıvajı Mezi ty znamejsı patrı
bull sshfs [6] ndash umoznuje pripojenı vzdaleneho adresare pomocı protokolu SSH
bull CurlFtpFS [2] ndash zprostredkovava pripojenı FTP serveru jako lokalnıho adresare
bull WikipediaFS [9] ndash prace s clanky z portalu zalozenych na systemu Wiki jakos beznymi soubory
bull BloggerFS [1] ndash manipulace s prıspevky na blogovacım portalu Bloggercom veforme beznych souboru
233 Zpusob pouzitı
Pouzitı knihovny FUSE spocıva ve vlastnı implementaci obsluznych funkcı (tzv han-dlers) pro jednotlive ukony ktere lze se soubory provadet a jejiz nazvy odpovıdajı sys-temovym volanım FUSE definuje pro manipulaci se soubory az 39 (od verze knihovny
12
26) obsluznych funkcı avsak pro zakladnı pouzitı nenı nutne implementovat vsechnyJednoduchy avsak jiz funkcnı souborovy system lze sestavit pomocı getattr openopendir a read Ukazka implementace tohoto FS je v jazyce C na obrazcıch 22 a 23Deklarace vsech obsluznych funkcı lze nalezt v hlavickovem souboru fuseh ktery byva
include ltstdiohgt
include ltfusehgt
static int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
int main(int argc char argv[])
struct fuse_operations fsOperations
fsOperationsgetattr = fuse_getattr
fsOperationsopen = fuse_open
fsOperationsread = fuse_read
fsOperationsreaddir = fuse_readdir
return fuse_main(argc argv ampfsOperations NULL)
Obrazek 22 Ukazka pouzitı knihovny FUSE
umısten v usrincludefuse (tato cesta se ale muze mezi linuxovymi distribucemilisit) Soubory zde nejsou identifikovany pomocı inode jak je zvykem ve skutecnych FSale pouze pomocı cesty kterou lze nalezt ve vetsine obsluznych funkcı na mıste prvnıhoparametru Pokud byla operace provedena korektne obsluzna funkce by mela ve vetsineprıpadu vracet cıslo 0 Vsechny druhy chyb jsou indikovany zapornou hodnotou kon-stant definujıcıch druh chyby Jejich soupis se naleza v hlavickovem souboru errorh
(umıstenı souboru se muze lisit)
24 Zabezpecenı citlivych dat
Potreba chranit data pred cizımi osobami vznikla uz v davnych dobach jeste pred rozvo-jem vypocetnı techniky Jednım z odvetvı ktere se ochranou dat zabyva je kryptografieData lze chranit vıce prostredky a jejich sifrovanı je pouze jednou z aplikacı Nasledujıcıcast poskytuje prehled o dalsıch zpusobech ochrany dat [15]
241 Steganografie
Steganografie spocıva ve skrytı zpravy Zasadnım rozdılem oproti kryptografii je prede-vsım snaha o skrytı samotne existence zpravy V minulosti se vyuzıvaly tzv neviditelne
13
Pro ukazku nasleduje prıklad implementace operace read
int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
char msg[] = Pokusny text pro ctenı
int msgLength = strlen(msg)
if(strcmp(path example) == 0)
memcpy(buffer msg msgLength)
return msgLength
else if(strcmp(path null) == 0)
return 0
else
return -ENOENT
Obrazek 23 Ukazka implementace operace read
inkousty jimiz byla napsana zprava na papır Jejı prıjemce pak cely list nahral a ter-mochemickou reakcı se text objevil Dokonce bylo pouzito i hlavy otroka kdy mu bylanejdrıve oholena hlava a pote na ni vytetovana zprava Az mu vlasy zpet dorostly bylvyslan na cestu pres nepratelske uzemı a prıjemce mu ji opet oholil aby si zpravu mohlprecıst Tento zpusob samozrejme nebyl vzdy vhodny a proto se lide snazili vymysletdalsı zpusoby skrytı dat Pri pouzitı psaneho textu (rukou ci na psacım stroji) jako nos-neho materialu se da vyuzıt mechanismu psacıho stroje Do volneho prostoru mezi radkyse skryvaly zpravy psanım bez barevne pasky takze v papıru zustal pouze otlak pısmenNebo se tajna zprava mnohonasobne zmensila aby pri letmem pohledu pripomınala jed-nolity cerny bod Ten se pak vlepil do tisteneho textu jako tecka na konci vety tzvmikrotecky
242 Digitalnı steganografie
I v digitalnı dobe stale existujı postupy jak skryvat data Naprıklad u fotografiı mu-zeme dobre vyuzıt nedokonalosti lidskeho oka Pokud zmenıme jen nepatrne barevnyodstın v nektere casti fotografie nenı tato uprava na pohled zretelna ndash nemusı se jednato anomalii ale ucel Stejny princip lze aplikovat i na zvuky Hudba se po digitalizacicasto komprimuje Podle druhu pouziteho algoritmu muze dochazet ke ztrate hudebnıinformace Pokud zmenıme nejnizsı bit u cısla reprezentujıcıho frekvenci stejne jakou obrazku nebude tato zmena pri poslechu patrna Tento typ techniky se oznacuje jakozmena hodnoty LSB (least significant bit) Pokud nekdo tento soubor jakkoliv bezneupravı (orıznutı obrazku zmena bitrate zvuku) znamena to ve vetsine prıpadu po-skozenı nebo uplnou ztratu skryte informace U pruznych disku (disket) umı nektere
14
programy zamerne oznacit sektory na jejım magnetickem povrchu jako poskozene Tımsice dojde k castecnemu snızenı kapacity pro bezne soubory ale nehrozı zde nebezpecıprepisu ztracenych dat pri bezne praci Pokud uzivatel chce zapsat soubor na disketuoperacnı system pro nej vyuzije pouze volne sektory ktere jsou v poradku a chybnevzdy preskocı Skrytı dat nemusı ale nutne znamenat rozpoznatelnou zmenu vystupuObrazovy format BMP svou stavbou umoznuje doslova neviditelne skrytı (omezeneho)mnozstvı dat Jedinym prıpadnym vodıtkem k odhalenı je zvyseny objem dat
243 Kryptografie
Kryptografie jinymi slovy sifrovanı je postup transformace originalnı zpravy do podobyktera je v idealnım prıpade citelna pouze se znalostı tzv klıce Prı pouzitı stejne vstupnızpravy sifrovacıho algoritmu ale jineho klıce zıskame odlisny vystup Mıra zabezpecenızpravy zavisı na zvolenem algoritmu a sifrovacım klıci Proto pri chybnem pouzitı nekte-reho z bezne pouzıvanych algoritmu (napr RSA) a klıce (pouzitı retezce
rdquohesloldquo) nemusı
byt pro utocnıka velkou prekazkou zjistit obsah puvodnı zpravySifrovacı algoritmy rozdelujeme do dvou zakladnıch skupin podle typu klıce
bull Symetricka kryptografie ndash pouzıva pro sifrovanı i desifrovanı stejny klıc kteryby mel zustat v tajnosti Patrı zde naprıklad algoritmy DES [14] TwoFish [8] av dnesnı dobe v teto kategorii nejpouzıvanejsı AES [10]
bull Asymetricka kryptografie ndash vyuzıva dva typy klıcu verejny a privatnı Verejnyklıc ktery slouzı pro desifrovanı (uz podle nazvu) je mozne jej zaslat prıjemncisifrovane zpravy beznou nezabezpecenou elektronickou postou nebo jej zverejnitna svych webovych strankach Oproti tomu privatnı klıc musı zustat v tajnostiu sveho majitele Zastupcem teto kategorie je algoritmus RSA [5]
Sifrovana komunikace pak probıha podle nasledujıcıho scenare pripomınajıcıho kla-sickou postovnı korespondenci
1 Odesilatel (osoba A) si zajistı verejny klıc prıjemce (osoba B) naprıklad jejımstazenım z osobnıho blogu osoby B
2 Osoba A zasifruje svou zpravu pomocı verejneho klıce B a odesle ji jako beznye-mail
3 Osoba B zpravu desifruje pomocı sveho privatnıho klıce a zıska tak puvodnıobsah
Oba typy klıcu se generujı vzdy jako par Pro jejich vytvorenı je nutne dodat radunahodnych cısel Jednou z pouzitych metod jejich generovanı je prectenı hodnotynahodne adresy v pameti nebo sledovanı pozice kurzoru mysi uzivatele
15
Kapitola 3
Analyza
V nasledujıcı casti budou popsany pozadavky na navrhovany souborovy system a prehledzakladnıch problemu ktere bude nutne behem navrhu resit
31 Pozadavky na souborovy system
Pro uceleny pohled a dalsı postup je vhodne nejprve specifikovat pozadavky na vytvarenysystem Jsou jimi predevsım
bull Ochrana obsahu FS heslem ndash skryty FS by mel idealne tajit nejen svou vlastnıexistenci ale predevsım by nemel dovolit uzivatelum neznajıcıch klıc prıstupovatk jeho obsahu
bull Existence vıce FS nad jednım ulozistem ndash tento pozadavek muze plnit hned dvefunkce V prve rade jde o castecne nezavisle varianty FS pro organizaci obsahunicmene dalsım dusledkem muze byt jeho vlastnı ochrana Pokud bychom uvazo-vali scenar kdy osoba-utocnık pod pohruzkou donutı svou obetrsquo k vyzrazenı heslado skryteho FS obetrsquo ma sanci sdelit jine nez skutecne heslo a tım dojde ke zprı-stupnenı odlisneho obsahu (pochopitelne za predpokladu ze byl drıve vytvoren)
bull Nezavislost na uloznem mediu ndash knihovna by mela poskytovat dostatecne obecnerozhranı ktere by bylo mozne vyuzıt pro implementaci ruznych typu ulozistrsquo beznutnosti hlubokych zasahu do knihovny samotne Prıkladem typu ulozistrsquo mohoubyt soubory MP3 JPG webova sluzba
bull Alespon castecna odolnost proti chybejıcım fragmentum ndash v prıpade ze bude ulo-zistem naprıklad adresar s MP3 soubory lze v prubehu casu predpokladat jeho mo-difikace ruzne zavazneho charaketru (platı pochopitelne nejen pro soubory MP3)Mohou jimi byt zmena umıstenı souboru v adresarıch i kompletnı odstranenı celehoalba Tyto zasahy ruznou merou ovlivnujı spolehlivost skryteho FS a bude nutneje v navrhu zohlednit
16
bull Jednouzivatelsky rezim ndash skryty FS ze sve podstaty nenı urcen pro kazdeho uziva-tele ktery ma prıstup k ulozisti Predpokladem je uzky okruh osob ktere budouznat heslo pro prıstup
Vyvoj aplikace splnujıcı vyse uvedena kriteria se muze ubırat dvema smery V prve radelze vytvorit tzv aplikaci na mıru To znamena kompletnı prizpusobenı vyvoje zakom-ponovanı optimalizacı vhodnych pro specificke pouzitı atd Dalsım smerem je knihovnaposkytujıcı obecne rozhranı v takove forme aby bylo mozne vyhovet pozadavkum nasystem Vyhodou muze byt dalsı samostatne pouzitı konkretnıch modulu bez nutnostihlubokych zasahu do puvodnıch zdrojovych kodu Konecne rozhodnutı pro perspektiv-nejsı pouzitı tak padlo na variantu vytvorenı knihovny ktera bude schopna vytvorit aspravovat skryty souborovy system
17
Kapitola 4
Navrh souboroveho systemu
Kapitola navrhu popisuje obecne postupy resenı problemu ktere jsou spojeny s nasled-nym vyvojem skryteho souboroveho systemu Jejich soupis je uveden v kapitole 3 Tyjsou dale detailneji rozvedeny v kapitole 5 zabyvajıcı se implementacı
41 Uloziste
Cılem prace je zajistit ukladanı souboru do jinych Umıstenı techto jinych souboru budedale oznacovano jako uloziste
42 Vymezenı termınu
Pro ujasnenı vyznamu nekterych termınu dale obsazenych v teto prace nasleduje jejichprehled s podrobnejsım vysvetlenım
bull hash ndash jednoznacna identifikace prave jedne entitiy v ulozisti
bull fragment ndash souvisı se skrytym souborem a jde o poradove cıslo useku dat kterepredstavuje cast obsahu skryteho souboru Slozenım vsech fragmentu dostanemekompletnı obsah souboru proto jeho hodnota v ramci skryteho FS musı byt jedi-necna
bull blok ndash souvisı s entitou v ulozisti jedna se o poradove cıslo dılcı casti obsahufyzickeho souboru Tento identifikator musı byt unikatnı v ramci hash
bull vnoreny FS ndash samostatny prostor pro skryvanı souboru v ramci stejneho ulozisteImplementace systemu je muze rozlisovat naprıklad pomocı zadaneho hesla
43 Zpusob organizace souboru
Jak jiz bylo v zmıneno v teoreticke casti 221 nejpouzıvanejsımi druhy organizace obsahusouboru je fragmentace a spojita alokace Uloziste je jen obecne rozhranı a muze mıt
18
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
231 Struktura
FUSE se sklada ze trı vzajemne komunikujıcıch castı kterymi jsou
bull modul pro jadro ndash drıvejsı verze modulu FUSE byly sıreny samostatne avsak odverze jadra Linuxu 2614 je jiz zaclenen do hlavnı vyvojove vetve nenı protozpravidla nutne jej dodatecne zavadet pomocı modprobe
bull rozhranı knihovny FUSE ndash je nativne tvoreno nekolika hlavickovymi soubory v ja-zyce C poskytuje deklarace metod pro implementaci rady systemovych volanı
bull specialnı soubor devfuse ndash zprostredkovava koumunikaci mezi modulem v jadrea rozhranım knihovny Pri pripojovanı souboroveho systemu vyuzıvajıcı FUSE seprovede otevrenı tohoto specialnıho souboru a nasledna komunikace probıha uz jenskrze takto zıskany popisovac (file descriptor)
Modul v jadre je prave jeden ale rozhranı knihovny je implementovano v rade programo-vacıch jazyku Pro strucny prehled jimi jsou C C++ Java C Haskell Python PerlRuby PHP ci Lua Uplny vypis je dostupny na oficialnıch webovych strankach projektuFUSE Nasleduje obrazek 21 se znaroznenım prubehu systemoveho volanı readdiravsak princip komunikace je spolecny pro vsechna podporovana systemova volanı
11
Obrazek 21 Prubeh zpracovanı pozadavku ve FUSE Obrazek byl prevzat z [19]
Je zde videt prenos pozadavku na zobrazenı obsahu adresare prochazejıcı uzivatel-skym prostorem (userspace) skrze obecnou vrstvu VFS (Virtual File System) a nasled-neho predanı modulu FUSE v jadru systemu To jej dale distribuuje zpet do uzivatel-skeho prostoru kde se nachazı implementace rozhranı FUSE (examplehello) Volanıse vyhodnotı vykonanım prıslusne metody a vysledek operace putuje stejnou cestou zpet
232 Prıklady souborovych systemu vyuzıvajıcı FUSE
Technologie FUSE se drzı hesla systemu UNIXrdquovse je souborldquo a nasla si tak sve prız-
nivce Svedcı o tom mnozstvı vytvorenych souborovych systemu ktere tuto technologiivyuzıvajı Mezi ty znamejsı patrı
bull sshfs [6] ndash umoznuje pripojenı vzdaleneho adresare pomocı protokolu SSH
bull CurlFtpFS [2] ndash zprostredkovava pripojenı FTP serveru jako lokalnıho adresare
bull WikipediaFS [9] ndash prace s clanky z portalu zalozenych na systemu Wiki jakos beznymi soubory
bull BloggerFS [1] ndash manipulace s prıspevky na blogovacım portalu Bloggercom veforme beznych souboru
233 Zpusob pouzitı
Pouzitı knihovny FUSE spocıva ve vlastnı implementaci obsluznych funkcı (tzv han-dlers) pro jednotlive ukony ktere lze se soubory provadet a jejiz nazvy odpovıdajı sys-temovym volanım FUSE definuje pro manipulaci se soubory az 39 (od verze knihovny
12
26) obsluznych funkcı avsak pro zakladnı pouzitı nenı nutne implementovat vsechnyJednoduchy avsak jiz funkcnı souborovy system lze sestavit pomocı getattr openopendir a read Ukazka implementace tohoto FS je v jazyce C na obrazcıch 22 a 23Deklarace vsech obsluznych funkcı lze nalezt v hlavickovem souboru fuseh ktery byva
include ltstdiohgt
include ltfusehgt
static int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
int main(int argc char argv[])
struct fuse_operations fsOperations
fsOperationsgetattr = fuse_getattr
fsOperationsopen = fuse_open
fsOperationsread = fuse_read
fsOperationsreaddir = fuse_readdir
return fuse_main(argc argv ampfsOperations NULL)
Obrazek 22 Ukazka pouzitı knihovny FUSE
umısten v usrincludefuse (tato cesta se ale muze mezi linuxovymi distribucemilisit) Soubory zde nejsou identifikovany pomocı inode jak je zvykem ve skutecnych FSale pouze pomocı cesty kterou lze nalezt ve vetsine obsluznych funkcı na mıste prvnıhoparametru Pokud byla operace provedena korektne obsluzna funkce by mela ve vetsineprıpadu vracet cıslo 0 Vsechny druhy chyb jsou indikovany zapornou hodnotou kon-stant definujıcıch druh chyby Jejich soupis se naleza v hlavickovem souboru errorh
(umıstenı souboru se muze lisit)
24 Zabezpecenı citlivych dat
Potreba chranit data pred cizımi osobami vznikla uz v davnych dobach jeste pred rozvo-jem vypocetnı techniky Jednım z odvetvı ktere se ochranou dat zabyva je kryptografieData lze chranit vıce prostredky a jejich sifrovanı je pouze jednou z aplikacı Nasledujıcıcast poskytuje prehled o dalsıch zpusobech ochrany dat [15]
241 Steganografie
Steganografie spocıva ve skrytı zpravy Zasadnım rozdılem oproti kryptografii je prede-vsım snaha o skrytı samotne existence zpravy V minulosti se vyuzıvaly tzv neviditelne
13
Pro ukazku nasleduje prıklad implementace operace read
int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
char msg[] = Pokusny text pro ctenı
int msgLength = strlen(msg)
if(strcmp(path example) == 0)
memcpy(buffer msg msgLength)
return msgLength
else if(strcmp(path null) == 0)
return 0
else
return -ENOENT
Obrazek 23 Ukazka implementace operace read
inkousty jimiz byla napsana zprava na papır Jejı prıjemce pak cely list nahral a ter-mochemickou reakcı se text objevil Dokonce bylo pouzito i hlavy otroka kdy mu bylanejdrıve oholena hlava a pote na ni vytetovana zprava Az mu vlasy zpet dorostly bylvyslan na cestu pres nepratelske uzemı a prıjemce mu ji opet oholil aby si zpravu mohlprecıst Tento zpusob samozrejme nebyl vzdy vhodny a proto se lide snazili vymysletdalsı zpusoby skrytı dat Pri pouzitı psaneho textu (rukou ci na psacım stroji) jako nos-neho materialu se da vyuzıt mechanismu psacıho stroje Do volneho prostoru mezi radkyse skryvaly zpravy psanım bez barevne pasky takze v papıru zustal pouze otlak pısmenNebo se tajna zprava mnohonasobne zmensila aby pri letmem pohledu pripomınala jed-nolity cerny bod Ten se pak vlepil do tisteneho textu jako tecka na konci vety tzvmikrotecky
242 Digitalnı steganografie
I v digitalnı dobe stale existujı postupy jak skryvat data Naprıklad u fotografiı mu-zeme dobre vyuzıt nedokonalosti lidskeho oka Pokud zmenıme jen nepatrne barevnyodstın v nektere casti fotografie nenı tato uprava na pohled zretelna ndash nemusı se jednato anomalii ale ucel Stejny princip lze aplikovat i na zvuky Hudba se po digitalizacicasto komprimuje Podle druhu pouziteho algoritmu muze dochazet ke ztrate hudebnıinformace Pokud zmenıme nejnizsı bit u cısla reprezentujıcıho frekvenci stejne jakou obrazku nebude tato zmena pri poslechu patrna Tento typ techniky se oznacuje jakozmena hodnoty LSB (least significant bit) Pokud nekdo tento soubor jakkoliv bezneupravı (orıznutı obrazku zmena bitrate zvuku) znamena to ve vetsine prıpadu po-skozenı nebo uplnou ztratu skryte informace U pruznych disku (disket) umı nektere
14
programy zamerne oznacit sektory na jejım magnetickem povrchu jako poskozene Tımsice dojde k castecnemu snızenı kapacity pro bezne soubory ale nehrozı zde nebezpecıprepisu ztracenych dat pri bezne praci Pokud uzivatel chce zapsat soubor na disketuoperacnı system pro nej vyuzije pouze volne sektory ktere jsou v poradku a chybnevzdy preskocı Skrytı dat nemusı ale nutne znamenat rozpoznatelnou zmenu vystupuObrazovy format BMP svou stavbou umoznuje doslova neviditelne skrytı (omezeneho)mnozstvı dat Jedinym prıpadnym vodıtkem k odhalenı je zvyseny objem dat
243 Kryptografie
Kryptografie jinymi slovy sifrovanı je postup transformace originalnı zpravy do podobyktera je v idealnım prıpade citelna pouze se znalostı tzv klıce Prı pouzitı stejne vstupnızpravy sifrovacıho algoritmu ale jineho klıce zıskame odlisny vystup Mıra zabezpecenızpravy zavisı na zvolenem algoritmu a sifrovacım klıci Proto pri chybnem pouzitı nekte-reho z bezne pouzıvanych algoritmu (napr RSA) a klıce (pouzitı retezce
rdquohesloldquo) nemusı
byt pro utocnıka velkou prekazkou zjistit obsah puvodnı zpravySifrovacı algoritmy rozdelujeme do dvou zakladnıch skupin podle typu klıce
bull Symetricka kryptografie ndash pouzıva pro sifrovanı i desifrovanı stejny klıc kteryby mel zustat v tajnosti Patrı zde naprıklad algoritmy DES [14] TwoFish [8] av dnesnı dobe v teto kategorii nejpouzıvanejsı AES [10]
bull Asymetricka kryptografie ndash vyuzıva dva typy klıcu verejny a privatnı Verejnyklıc ktery slouzı pro desifrovanı (uz podle nazvu) je mozne jej zaslat prıjemncisifrovane zpravy beznou nezabezpecenou elektronickou postou nebo jej zverejnitna svych webovych strankach Oproti tomu privatnı klıc musı zustat v tajnostiu sveho majitele Zastupcem teto kategorie je algoritmus RSA [5]
Sifrovana komunikace pak probıha podle nasledujıcıho scenare pripomınajıcıho kla-sickou postovnı korespondenci
1 Odesilatel (osoba A) si zajistı verejny klıc prıjemce (osoba B) naprıklad jejımstazenım z osobnıho blogu osoby B
2 Osoba A zasifruje svou zpravu pomocı verejneho klıce B a odesle ji jako beznye-mail
3 Osoba B zpravu desifruje pomocı sveho privatnıho klıce a zıska tak puvodnıobsah
Oba typy klıcu se generujı vzdy jako par Pro jejich vytvorenı je nutne dodat radunahodnych cısel Jednou z pouzitych metod jejich generovanı je prectenı hodnotynahodne adresy v pameti nebo sledovanı pozice kurzoru mysi uzivatele
15
Kapitola 3
Analyza
V nasledujıcı casti budou popsany pozadavky na navrhovany souborovy system a prehledzakladnıch problemu ktere bude nutne behem navrhu resit
31 Pozadavky na souborovy system
Pro uceleny pohled a dalsı postup je vhodne nejprve specifikovat pozadavky na vytvarenysystem Jsou jimi predevsım
bull Ochrana obsahu FS heslem ndash skryty FS by mel idealne tajit nejen svou vlastnıexistenci ale predevsım by nemel dovolit uzivatelum neznajıcıch klıc prıstupovatk jeho obsahu
bull Existence vıce FS nad jednım ulozistem ndash tento pozadavek muze plnit hned dvefunkce V prve rade jde o castecne nezavisle varianty FS pro organizaci obsahunicmene dalsım dusledkem muze byt jeho vlastnı ochrana Pokud bychom uvazo-vali scenar kdy osoba-utocnık pod pohruzkou donutı svou obetrsquo k vyzrazenı heslado skryteho FS obetrsquo ma sanci sdelit jine nez skutecne heslo a tım dojde ke zprı-stupnenı odlisneho obsahu (pochopitelne za predpokladu ze byl drıve vytvoren)
bull Nezavislost na uloznem mediu ndash knihovna by mela poskytovat dostatecne obecnerozhranı ktere by bylo mozne vyuzıt pro implementaci ruznych typu ulozistrsquo beznutnosti hlubokych zasahu do knihovny samotne Prıkladem typu ulozistrsquo mohoubyt soubory MP3 JPG webova sluzba
bull Alespon castecna odolnost proti chybejıcım fragmentum ndash v prıpade ze bude ulo-zistem naprıklad adresar s MP3 soubory lze v prubehu casu predpokladat jeho mo-difikace ruzne zavazneho charaketru (platı pochopitelne nejen pro soubory MP3)Mohou jimi byt zmena umıstenı souboru v adresarıch i kompletnı odstranenı celehoalba Tyto zasahy ruznou merou ovlivnujı spolehlivost skryteho FS a bude nutneje v navrhu zohlednit
16
bull Jednouzivatelsky rezim ndash skryty FS ze sve podstaty nenı urcen pro kazdeho uziva-tele ktery ma prıstup k ulozisti Predpokladem je uzky okruh osob ktere budouznat heslo pro prıstup
Vyvoj aplikace splnujıcı vyse uvedena kriteria se muze ubırat dvema smery V prve radelze vytvorit tzv aplikaci na mıru To znamena kompletnı prizpusobenı vyvoje zakom-ponovanı optimalizacı vhodnych pro specificke pouzitı atd Dalsım smerem je knihovnaposkytujıcı obecne rozhranı v takove forme aby bylo mozne vyhovet pozadavkum nasystem Vyhodou muze byt dalsı samostatne pouzitı konkretnıch modulu bez nutnostihlubokych zasahu do puvodnıch zdrojovych kodu Konecne rozhodnutı pro perspektiv-nejsı pouzitı tak padlo na variantu vytvorenı knihovny ktera bude schopna vytvorit aspravovat skryty souborovy system
17
Kapitola 4
Navrh souboroveho systemu
Kapitola navrhu popisuje obecne postupy resenı problemu ktere jsou spojeny s nasled-nym vyvojem skryteho souboroveho systemu Jejich soupis je uveden v kapitole 3 Tyjsou dale detailneji rozvedeny v kapitole 5 zabyvajıcı se implementacı
41 Uloziste
Cılem prace je zajistit ukladanı souboru do jinych Umıstenı techto jinych souboru budedale oznacovano jako uloziste
42 Vymezenı termınu
Pro ujasnenı vyznamu nekterych termınu dale obsazenych v teto prace nasleduje jejichprehled s podrobnejsım vysvetlenım
bull hash ndash jednoznacna identifikace prave jedne entitiy v ulozisti
bull fragment ndash souvisı se skrytym souborem a jde o poradove cıslo useku dat kterepredstavuje cast obsahu skryteho souboru Slozenım vsech fragmentu dostanemekompletnı obsah souboru proto jeho hodnota v ramci skryteho FS musı byt jedi-necna
bull blok ndash souvisı s entitou v ulozisti jedna se o poradove cıslo dılcı casti obsahufyzickeho souboru Tento identifikator musı byt unikatnı v ramci hash
bull vnoreny FS ndash samostatny prostor pro skryvanı souboru v ramci stejneho ulozisteImplementace systemu je muze rozlisovat naprıklad pomocı zadaneho hesla
43 Zpusob organizace souboru
Jak jiz bylo v zmıneno v teoreticke casti 221 nejpouzıvanejsımi druhy organizace obsahusouboru je fragmentace a spojita alokace Uloziste je jen obecne rozhranı a muze mıt
18
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
Obrazek 21 Prubeh zpracovanı pozadavku ve FUSE Obrazek byl prevzat z [19]
Je zde videt prenos pozadavku na zobrazenı obsahu adresare prochazejıcı uzivatel-skym prostorem (userspace) skrze obecnou vrstvu VFS (Virtual File System) a nasled-neho predanı modulu FUSE v jadru systemu To jej dale distribuuje zpet do uzivatel-skeho prostoru kde se nachazı implementace rozhranı FUSE (examplehello) Volanıse vyhodnotı vykonanım prıslusne metody a vysledek operace putuje stejnou cestou zpet
232 Prıklady souborovych systemu vyuzıvajıcı FUSE
Technologie FUSE se drzı hesla systemu UNIXrdquovse je souborldquo a nasla si tak sve prız-
nivce Svedcı o tom mnozstvı vytvorenych souborovych systemu ktere tuto technologiivyuzıvajı Mezi ty znamejsı patrı
bull sshfs [6] ndash umoznuje pripojenı vzdaleneho adresare pomocı protokolu SSH
bull CurlFtpFS [2] ndash zprostredkovava pripojenı FTP serveru jako lokalnıho adresare
bull WikipediaFS [9] ndash prace s clanky z portalu zalozenych na systemu Wiki jakos beznymi soubory
bull BloggerFS [1] ndash manipulace s prıspevky na blogovacım portalu Bloggercom veforme beznych souboru
233 Zpusob pouzitı
Pouzitı knihovny FUSE spocıva ve vlastnı implementaci obsluznych funkcı (tzv han-dlers) pro jednotlive ukony ktere lze se soubory provadet a jejiz nazvy odpovıdajı sys-temovym volanım FUSE definuje pro manipulaci se soubory az 39 (od verze knihovny
12
26) obsluznych funkcı avsak pro zakladnı pouzitı nenı nutne implementovat vsechnyJednoduchy avsak jiz funkcnı souborovy system lze sestavit pomocı getattr openopendir a read Ukazka implementace tohoto FS je v jazyce C na obrazcıch 22 a 23Deklarace vsech obsluznych funkcı lze nalezt v hlavickovem souboru fuseh ktery byva
include ltstdiohgt
include ltfusehgt
static int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
int main(int argc char argv[])
struct fuse_operations fsOperations
fsOperationsgetattr = fuse_getattr
fsOperationsopen = fuse_open
fsOperationsread = fuse_read
fsOperationsreaddir = fuse_readdir
return fuse_main(argc argv ampfsOperations NULL)
Obrazek 22 Ukazka pouzitı knihovny FUSE
umısten v usrincludefuse (tato cesta se ale muze mezi linuxovymi distribucemilisit) Soubory zde nejsou identifikovany pomocı inode jak je zvykem ve skutecnych FSale pouze pomocı cesty kterou lze nalezt ve vetsine obsluznych funkcı na mıste prvnıhoparametru Pokud byla operace provedena korektne obsluzna funkce by mela ve vetsineprıpadu vracet cıslo 0 Vsechny druhy chyb jsou indikovany zapornou hodnotou kon-stant definujıcıch druh chyby Jejich soupis se naleza v hlavickovem souboru errorh
(umıstenı souboru se muze lisit)
24 Zabezpecenı citlivych dat
Potreba chranit data pred cizımi osobami vznikla uz v davnych dobach jeste pred rozvo-jem vypocetnı techniky Jednım z odvetvı ktere se ochranou dat zabyva je kryptografieData lze chranit vıce prostredky a jejich sifrovanı je pouze jednou z aplikacı Nasledujıcıcast poskytuje prehled o dalsıch zpusobech ochrany dat [15]
241 Steganografie
Steganografie spocıva ve skrytı zpravy Zasadnım rozdılem oproti kryptografii je prede-vsım snaha o skrytı samotne existence zpravy V minulosti se vyuzıvaly tzv neviditelne
13
Pro ukazku nasleduje prıklad implementace operace read
int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
char msg[] = Pokusny text pro ctenı
int msgLength = strlen(msg)
if(strcmp(path example) == 0)
memcpy(buffer msg msgLength)
return msgLength
else if(strcmp(path null) == 0)
return 0
else
return -ENOENT
Obrazek 23 Ukazka implementace operace read
inkousty jimiz byla napsana zprava na papır Jejı prıjemce pak cely list nahral a ter-mochemickou reakcı se text objevil Dokonce bylo pouzito i hlavy otroka kdy mu bylanejdrıve oholena hlava a pote na ni vytetovana zprava Az mu vlasy zpet dorostly bylvyslan na cestu pres nepratelske uzemı a prıjemce mu ji opet oholil aby si zpravu mohlprecıst Tento zpusob samozrejme nebyl vzdy vhodny a proto se lide snazili vymysletdalsı zpusoby skrytı dat Pri pouzitı psaneho textu (rukou ci na psacım stroji) jako nos-neho materialu se da vyuzıt mechanismu psacıho stroje Do volneho prostoru mezi radkyse skryvaly zpravy psanım bez barevne pasky takze v papıru zustal pouze otlak pısmenNebo se tajna zprava mnohonasobne zmensila aby pri letmem pohledu pripomınala jed-nolity cerny bod Ten se pak vlepil do tisteneho textu jako tecka na konci vety tzvmikrotecky
242 Digitalnı steganografie
I v digitalnı dobe stale existujı postupy jak skryvat data Naprıklad u fotografiı mu-zeme dobre vyuzıt nedokonalosti lidskeho oka Pokud zmenıme jen nepatrne barevnyodstın v nektere casti fotografie nenı tato uprava na pohled zretelna ndash nemusı se jednato anomalii ale ucel Stejny princip lze aplikovat i na zvuky Hudba se po digitalizacicasto komprimuje Podle druhu pouziteho algoritmu muze dochazet ke ztrate hudebnıinformace Pokud zmenıme nejnizsı bit u cısla reprezentujıcıho frekvenci stejne jakou obrazku nebude tato zmena pri poslechu patrna Tento typ techniky se oznacuje jakozmena hodnoty LSB (least significant bit) Pokud nekdo tento soubor jakkoliv bezneupravı (orıznutı obrazku zmena bitrate zvuku) znamena to ve vetsine prıpadu po-skozenı nebo uplnou ztratu skryte informace U pruznych disku (disket) umı nektere
14
programy zamerne oznacit sektory na jejım magnetickem povrchu jako poskozene Tımsice dojde k castecnemu snızenı kapacity pro bezne soubory ale nehrozı zde nebezpecıprepisu ztracenych dat pri bezne praci Pokud uzivatel chce zapsat soubor na disketuoperacnı system pro nej vyuzije pouze volne sektory ktere jsou v poradku a chybnevzdy preskocı Skrytı dat nemusı ale nutne znamenat rozpoznatelnou zmenu vystupuObrazovy format BMP svou stavbou umoznuje doslova neviditelne skrytı (omezeneho)mnozstvı dat Jedinym prıpadnym vodıtkem k odhalenı je zvyseny objem dat
243 Kryptografie
Kryptografie jinymi slovy sifrovanı je postup transformace originalnı zpravy do podobyktera je v idealnım prıpade citelna pouze se znalostı tzv klıce Prı pouzitı stejne vstupnızpravy sifrovacıho algoritmu ale jineho klıce zıskame odlisny vystup Mıra zabezpecenızpravy zavisı na zvolenem algoritmu a sifrovacım klıci Proto pri chybnem pouzitı nekte-reho z bezne pouzıvanych algoritmu (napr RSA) a klıce (pouzitı retezce
rdquohesloldquo) nemusı
byt pro utocnıka velkou prekazkou zjistit obsah puvodnı zpravySifrovacı algoritmy rozdelujeme do dvou zakladnıch skupin podle typu klıce
bull Symetricka kryptografie ndash pouzıva pro sifrovanı i desifrovanı stejny klıc kteryby mel zustat v tajnosti Patrı zde naprıklad algoritmy DES [14] TwoFish [8] av dnesnı dobe v teto kategorii nejpouzıvanejsı AES [10]
bull Asymetricka kryptografie ndash vyuzıva dva typy klıcu verejny a privatnı Verejnyklıc ktery slouzı pro desifrovanı (uz podle nazvu) je mozne jej zaslat prıjemncisifrovane zpravy beznou nezabezpecenou elektronickou postou nebo jej zverejnitna svych webovych strankach Oproti tomu privatnı klıc musı zustat v tajnostiu sveho majitele Zastupcem teto kategorie je algoritmus RSA [5]
Sifrovana komunikace pak probıha podle nasledujıcıho scenare pripomınajıcıho kla-sickou postovnı korespondenci
1 Odesilatel (osoba A) si zajistı verejny klıc prıjemce (osoba B) naprıklad jejımstazenım z osobnıho blogu osoby B
2 Osoba A zasifruje svou zpravu pomocı verejneho klıce B a odesle ji jako beznye-mail
3 Osoba B zpravu desifruje pomocı sveho privatnıho klıce a zıska tak puvodnıobsah
Oba typy klıcu se generujı vzdy jako par Pro jejich vytvorenı je nutne dodat radunahodnych cısel Jednou z pouzitych metod jejich generovanı je prectenı hodnotynahodne adresy v pameti nebo sledovanı pozice kurzoru mysi uzivatele
15
Kapitola 3
Analyza
V nasledujıcı casti budou popsany pozadavky na navrhovany souborovy system a prehledzakladnıch problemu ktere bude nutne behem navrhu resit
31 Pozadavky na souborovy system
Pro uceleny pohled a dalsı postup je vhodne nejprve specifikovat pozadavky na vytvarenysystem Jsou jimi predevsım
bull Ochrana obsahu FS heslem ndash skryty FS by mel idealne tajit nejen svou vlastnıexistenci ale predevsım by nemel dovolit uzivatelum neznajıcıch klıc prıstupovatk jeho obsahu
bull Existence vıce FS nad jednım ulozistem ndash tento pozadavek muze plnit hned dvefunkce V prve rade jde o castecne nezavisle varianty FS pro organizaci obsahunicmene dalsım dusledkem muze byt jeho vlastnı ochrana Pokud bychom uvazo-vali scenar kdy osoba-utocnık pod pohruzkou donutı svou obetrsquo k vyzrazenı heslado skryteho FS obetrsquo ma sanci sdelit jine nez skutecne heslo a tım dojde ke zprı-stupnenı odlisneho obsahu (pochopitelne za predpokladu ze byl drıve vytvoren)
bull Nezavislost na uloznem mediu ndash knihovna by mela poskytovat dostatecne obecnerozhranı ktere by bylo mozne vyuzıt pro implementaci ruznych typu ulozistrsquo beznutnosti hlubokych zasahu do knihovny samotne Prıkladem typu ulozistrsquo mohoubyt soubory MP3 JPG webova sluzba
bull Alespon castecna odolnost proti chybejıcım fragmentum ndash v prıpade ze bude ulo-zistem naprıklad adresar s MP3 soubory lze v prubehu casu predpokladat jeho mo-difikace ruzne zavazneho charaketru (platı pochopitelne nejen pro soubory MP3)Mohou jimi byt zmena umıstenı souboru v adresarıch i kompletnı odstranenı celehoalba Tyto zasahy ruznou merou ovlivnujı spolehlivost skryteho FS a bude nutneje v navrhu zohlednit
16
bull Jednouzivatelsky rezim ndash skryty FS ze sve podstaty nenı urcen pro kazdeho uziva-tele ktery ma prıstup k ulozisti Predpokladem je uzky okruh osob ktere budouznat heslo pro prıstup
Vyvoj aplikace splnujıcı vyse uvedena kriteria se muze ubırat dvema smery V prve radelze vytvorit tzv aplikaci na mıru To znamena kompletnı prizpusobenı vyvoje zakom-ponovanı optimalizacı vhodnych pro specificke pouzitı atd Dalsım smerem je knihovnaposkytujıcı obecne rozhranı v takove forme aby bylo mozne vyhovet pozadavkum nasystem Vyhodou muze byt dalsı samostatne pouzitı konkretnıch modulu bez nutnostihlubokych zasahu do puvodnıch zdrojovych kodu Konecne rozhodnutı pro perspektiv-nejsı pouzitı tak padlo na variantu vytvorenı knihovny ktera bude schopna vytvorit aspravovat skryty souborovy system
17
Kapitola 4
Navrh souboroveho systemu
Kapitola navrhu popisuje obecne postupy resenı problemu ktere jsou spojeny s nasled-nym vyvojem skryteho souboroveho systemu Jejich soupis je uveden v kapitole 3 Tyjsou dale detailneji rozvedeny v kapitole 5 zabyvajıcı se implementacı
41 Uloziste
Cılem prace je zajistit ukladanı souboru do jinych Umıstenı techto jinych souboru budedale oznacovano jako uloziste
42 Vymezenı termınu
Pro ujasnenı vyznamu nekterych termınu dale obsazenych v teto prace nasleduje jejichprehled s podrobnejsım vysvetlenım
bull hash ndash jednoznacna identifikace prave jedne entitiy v ulozisti
bull fragment ndash souvisı se skrytym souborem a jde o poradove cıslo useku dat kterepredstavuje cast obsahu skryteho souboru Slozenım vsech fragmentu dostanemekompletnı obsah souboru proto jeho hodnota v ramci skryteho FS musı byt jedi-necna
bull blok ndash souvisı s entitou v ulozisti jedna se o poradove cıslo dılcı casti obsahufyzickeho souboru Tento identifikator musı byt unikatnı v ramci hash
bull vnoreny FS ndash samostatny prostor pro skryvanı souboru v ramci stejneho ulozisteImplementace systemu je muze rozlisovat naprıklad pomocı zadaneho hesla
43 Zpusob organizace souboru
Jak jiz bylo v zmıneno v teoreticke casti 221 nejpouzıvanejsımi druhy organizace obsahusouboru je fragmentace a spojita alokace Uloziste je jen obecne rozhranı a muze mıt
18
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
26) obsluznych funkcı avsak pro zakladnı pouzitı nenı nutne implementovat vsechnyJednoduchy avsak jiz funkcnı souborovy system lze sestavit pomocı getattr openopendir a read Ukazka implementace tohoto FS je v jazyce C na obrazcıch 22 a 23Deklarace vsech obsluznych funkcı lze nalezt v hlavickovem souboru fuseh ktery byva
include ltstdiohgt
include ltfusehgt
static int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
int main(int argc char argv[])
struct fuse_operations fsOperations
fsOperationsgetattr = fuse_getattr
fsOperationsopen = fuse_open
fsOperationsread = fuse_read
fsOperationsreaddir = fuse_readdir
return fuse_main(argc argv ampfsOperations NULL)
Obrazek 22 Ukazka pouzitı knihovny FUSE
umısten v usrincludefuse (tato cesta se ale muze mezi linuxovymi distribucemilisit) Soubory zde nejsou identifikovany pomocı inode jak je zvykem ve skutecnych FSale pouze pomocı cesty kterou lze nalezt ve vetsine obsluznych funkcı na mıste prvnıhoparametru Pokud byla operace provedena korektne obsluzna funkce by mela ve vetsineprıpadu vracet cıslo 0 Vsechny druhy chyb jsou indikovany zapornou hodnotou kon-stant definujıcıch druh chyby Jejich soupis se naleza v hlavickovem souboru errorh
(umıstenı souboru se muze lisit)
24 Zabezpecenı citlivych dat
Potreba chranit data pred cizımi osobami vznikla uz v davnych dobach jeste pred rozvo-jem vypocetnı techniky Jednım z odvetvı ktere se ochranou dat zabyva je kryptografieData lze chranit vıce prostredky a jejich sifrovanı je pouze jednou z aplikacı Nasledujıcıcast poskytuje prehled o dalsıch zpusobech ochrany dat [15]
241 Steganografie
Steganografie spocıva ve skrytı zpravy Zasadnım rozdılem oproti kryptografii je prede-vsım snaha o skrytı samotne existence zpravy V minulosti se vyuzıvaly tzv neviditelne
13
Pro ukazku nasleduje prıklad implementace operace read
int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
char msg[] = Pokusny text pro ctenı
int msgLength = strlen(msg)
if(strcmp(path example) == 0)
memcpy(buffer msg msgLength)
return msgLength
else if(strcmp(path null) == 0)
return 0
else
return -ENOENT
Obrazek 23 Ukazka implementace operace read
inkousty jimiz byla napsana zprava na papır Jejı prıjemce pak cely list nahral a ter-mochemickou reakcı se text objevil Dokonce bylo pouzito i hlavy otroka kdy mu bylanejdrıve oholena hlava a pote na ni vytetovana zprava Az mu vlasy zpet dorostly bylvyslan na cestu pres nepratelske uzemı a prıjemce mu ji opet oholil aby si zpravu mohlprecıst Tento zpusob samozrejme nebyl vzdy vhodny a proto se lide snazili vymysletdalsı zpusoby skrytı dat Pri pouzitı psaneho textu (rukou ci na psacım stroji) jako nos-neho materialu se da vyuzıt mechanismu psacıho stroje Do volneho prostoru mezi radkyse skryvaly zpravy psanım bez barevne pasky takze v papıru zustal pouze otlak pısmenNebo se tajna zprava mnohonasobne zmensila aby pri letmem pohledu pripomınala jed-nolity cerny bod Ten se pak vlepil do tisteneho textu jako tecka na konci vety tzvmikrotecky
242 Digitalnı steganografie
I v digitalnı dobe stale existujı postupy jak skryvat data Naprıklad u fotografiı mu-zeme dobre vyuzıt nedokonalosti lidskeho oka Pokud zmenıme jen nepatrne barevnyodstın v nektere casti fotografie nenı tato uprava na pohled zretelna ndash nemusı se jednato anomalii ale ucel Stejny princip lze aplikovat i na zvuky Hudba se po digitalizacicasto komprimuje Podle druhu pouziteho algoritmu muze dochazet ke ztrate hudebnıinformace Pokud zmenıme nejnizsı bit u cısla reprezentujıcıho frekvenci stejne jakou obrazku nebude tato zmena pri poslechu patrna Tento typ techniky se oznacuje jakozmena hodnoty LSB (least significant bit) Pokud nekdo tento soubor jakkoliv bezneupravı (orıznutı obrazku zmena bitrate zvuku) znamena to ve vetsine prıpadu po-skozenı nebo uplnou ztratu skryte informace U pruznych disku (disket) umı nektere
14
programy zamerne oznacit sektory na jejım magnetickem povrchu jako poskozene Tımsice dojde k castecnemu snızenı kapacity pro bezne soubory ale nehrozı zde nebezpecıprepisu ztracenych dat pri bezne praci Pokud uzivatel chce zapsat soubor na disketuoperacnı system pro nej vyuzije pouze volne sektory ktere jsou v poradku a chybnevzdy preskocı Skrytı dat nemusı ale nutne znamenat rozpoznatelnou zmenu vystupuObrazovy format BMP svou stavbou umoznuje doslova neviditelne skrytı (omezeneho)mnozstvı dat Jedinym prıpadnym vodıtkem k odhalenı je zvyseny objem dat
243 Kryptografie
Kryptografie jinymi slovy sifrovanı je postup transformace originalnı zpravy do podobyktera je v idealnım prıpade citelna pouze se znalostı tzv klıce Prı pouzitı stejne vstupnızpravy sifrovacıho algoritmu ale jineho klıce zıskame odlisny vystup Mıra zabezpecenızpravy zavisı na zvolenem algoritmu a sifrovacım klıci Proto pri chybnem pouzitı nekte-reho z bezne pouzıvanych algoritmu (napr RSA) a klıce (pouzitı retezce
rdquohesloldquo) nemusı
byt pro utocnıka velkou prekazkou zjistit obsah puvodnı zpravySifrovacı algoritmy rozdelujeme do dvou zakladnıch skupin podle typu klıce
bull Symetricka kryptografie ndash pouzıva pro sifrovanı i desifrovanı stejny klıc kteryby mel zustat v tajnosti Patrı zde naprıklad algoritmy DES [14] TwoFish [8] av dnesnı dobe v teto kategorii nejpouzıvanejsı AES [10]
bull Asymetricka kryptografie ndash vyuzıva dva typy klıcu verejny a privatnı Verejnyklıc ktery slouzı pro desifrovanı (uz podle nazvu) je mozne jej zaslat prıjemncisifrovane zpravy beznou nezabezpecenou elektronickou postou nebo jej zverejnitna svych webovych strankach Oproti tomu privatnı klıc musı zustat v tajnostiu sveho majitele Zastupcem teto kategorie je algoritmus RSA [5]
Sifrovana komunikace pak probıha podle nasledujıcıho scenare pripomınajıcıho kla-sickou postovnı korespondenci
1 Odesilatel (osoba A) si zajistı verejny klıc prıjemce (osoba B) naprıklad jejımstazenım z osobnıho blogu osoby B
2 Osoba A zasifruje svou zpravu pomocı verejneho klıce B a odesle ji jako beznye-mail
3 Osoba B zpravu desifruje pomocı sveho privatnıho klıce a zıska tak puvodnıobsah
Oba typy klıcu se generujı vzdy jako par Pro jejich vytvorenı je nutne dodat radunahodnych cısel Jednou z pouzitych metod jejich generovanı je prectenı hodnotynahodne adresy v pameti nebo sledovanı pozice kurzoru mysi uzivatele
15
Kapitola 3
Analyza
V nasledujıcı casti budou popsany pozadavky na navrhovany souborovy system a prehledzakladnıch problemu ktere bude nutne behem navrhu resit
31 Pozadavky na souborovy system
Pro uceleny pohled a dalsı postup je vhodne nejprve specifikovat pozadavky na vytvarenysystem Jsou jimi predevsım
bull Ochrana obsahu FS heslem ndash skryty FS by mel idealne tajit nejen svou vlastnıexistenci ale predevsım by nemel dovolit uzivatelum neznajıcıch klıc prıstupovatk jeho obsahu
bull Existence vıce FS nad jednım ulozistem ndash tento pozadavek muze plnit hned dvefunkce V prve rade jde o castecne nezavisle varianty FS pro organizaci obsahunicmene dalsım dusledkem muze byt jeho vlastnı ochrana Pokud bychom uvazo-vali scenar kdy osoba-utocnık pod pohruzkou donutı svou obetrsquo k vyzrazenı heslado skryteho FS obetrsquo ma sanci sdelit jine nez skutecne heslo a tım dojde ke zprı-stupnenı odlisneho obsahu (pochopitelne za predpokladu ze byl drıve vytvoren)
bull Nezavislost na uloznem mediu ndash knihovna by mela poskytovat dostatecne obecnerozhranı ktere by bylo mozne vyuzıt pro implementaci ruznych typu ulozistrsquo beznutnosti hlubokych zasahu do knihovny samotne Prıkladem typu ulozistrsquo mohoubyt soubory MP3 JPG webova sluzba
bull Alespon castecna odolnost proti chybejıcım fragmentum ndash v prıpade ze bude ulo-zistem naprıklad adresar s MP3 soubory lze v prubehu casu predpokladat jeho mo-difikace ruzne zavazneho charaketru (platı pochopitelne nejen pro soubory MP3)Mohou jimi byt zmena umıstenı souboru v adresarıch i kompletnı odstranenı celehoalba Tyto zasahy ruznou merou ovlivnujı spolehlivost skryteho FS a bude nutneje v navrhu zohlednit
16
bull Jednouzivatelsky rezim ndash skryty FS ze sve podstaty nenı urcen pro kazdeho uziva-tele ktery ma prıstup k ulozisti Predpokladem je uzky okruh osob ktere budouznat heslo pro prıstup
Vyvoj aplikace splnujıcı vyse uvedena kriteria se muze ubırat dvema smery V prve radelze vytvorit tzv aplikaci na mıru To znamena kompletnı prizpusobenı vyvoje zakom-ponovanı optimalizacı vhodnych pro specificke pouzitı atd Dalsım smerem je knihovnaposkytujıcı obecne rozhranı v takove forme aby bylo mozne vyhovet pozadavkum nasystem Vyhodou muze byt dalsı samostatne pouzitı konkretnıch modulu bez nutnostihlubokych zasahu do puvodnıch zdrojovych kodu Konecne rozhodnutı pro perspektiv-nejsı pouzitı tak padlo na variantu vytvorenı knihovny ktera bude schopna vytvorit aspravovat skryty souborovy system
17
Kapitola 4
Navrh souboroveho systemu
Kapitola navrhu popisuje obecne postupy resenı problemu ktere jsou spojeny s nasled-nym vyvojem skryteho souboroveho systemu Jejich soupis je uveden v kapitole 3 Tyjsou dale detailneji rozvedeny v kapitole 5 zabyvajıcı se implementacı
41 Uloziste
Cılem prace je zajistit ukladanı souboru do jinych Umıstenı techto jinych souboru budedale oznacovano jako uloziste
42 Vymezenı termınu
Pro ujasnenı vyznamu nekterych termınu dale obsazenych v teto prace nasleduje jejichprehled s podrobnejsım vysvetlenım
bull hash ndash jednoznacna identifikace prave jedne entitiy v ulozisti
bull fragment ndash souvisı se skrytym souborem a jde o poradove cıslo useku dat kterepredstavuje cast obsahu skryteho souboru Slozenım vsech fragmentu dostanemekompletnı obsah souboru proto jeho hodnota v ramci skryteho FS musı byt jedi-necna
bull blok ndash souvisı s entitou v ulozisti jedna se o poradove cıslo dılcı casti obsahufyzickeho souboru Tento identifikator musı byt unikatnı v ramci hash
bull vnoreny FS ndash samostatny prostor pro skryvanı souboru v ramci stejneho ulozisteImplementace systemu je muze rozlisovat naprıklad pomocı zadaneho hesla
43 Zpusob organizace souboru
Jak jiz bylo v zmıneno v teoreticke casti 221 nejpouzıvanejsımi druhy organizace obsahusouboru je fragmentace a spojita alokace Uloziste je jen obecne rozhranı a muze mıt
18
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
Pro ukazku nasleduje prıklad implementace operace read
int fuse_read(const char path char buffer size_t size
off_t length struct fuse_file_info file_i)
char msg[] = Pokusny text pro ctenı
int msgLength = strlen(msg)
if(strcmp(path example) == 0)
memcpy(buffer msg msgLength)
return msgLength
else if(strcmp(path null) == 0)
return 0
else
return -ENOENT
Obrazek 23 Ukazka implementace operace read
inkousty jimiz byla napsana zprava na papır Jejı prıjemce pak cely list nahral a ter-mochemickou reakcı se text objevil Dokonce bylo pouzito i hlavy otroka kdy mu bylanejdrıve oholena hlava a pote na ni vytetovana zprava Az mu vlasy zpet dorostly bylvyslan na cestu pres nepratelske uzemı a prıjemce mu ji opet oholil aby si zpravu mohlprecıst Tento zpusob samozrejme nebyl vzdy vhodny a proto se lide snazili vymysletdalsı zpusoby skrytı dat Pri pouzitı psaneho textu (rukou ci na psacım stroji) jako nos-neho materialu se da vyuzıt mechanismu psacıho stroje Do volneho prostoru mezi radkyse skryvaly zpravy psanım bez barevne pasky takze v papıru zustal pouze otlak pısmenNebo se tajna zprava mnohonasobne zmensila aby pri letmem pohledu pripomınala jed-nolity cerny bod Ten se pak vlepil do tisteneho textu jako tecka na konci vety tzvmikrotecky
242 Digitalnı steganografie
I v digitalnı dobe stale existujı postupy jak skryvat data Naprıklad u fotografiı mu-zeme dobre vyuzıt nedokonalosti lidskeho oka Pokud zmenıme jen nepatrne barevnyodstın v nektere casti fotografie nenı tato uprava na pohled zretelna ndash nemusı se jednato anomalii ale ucel Stejny princip lze aplikovat i na zvuky Hudba se po digitalizacicasto komprimuje Podle druhu pouziteho algoritmu muze dochazet ke ztrate hudebnıinformace Pokud zmenıme nejnizsı bit u cısla reprezentujıcıho frekvenci stejne jakou obrazku nebude tato zmena pri poslechu patrna Tento typ techniky se oznacuje jakozmena hodnoty LSB (least significant bit) Pokud nekdo tento soubor jakkoliv bezneupravı (orıznutı obrazku zmena bitrate zvuku) znamena to ve vetsine prıpadu po-skozenı nebo uplnou ztratu skryte informace U pruznych disku (disket) umı nektere
14
programy zamerne oznacit sektory na jejım magnetickem povrchu jako poskozene Tımsice dojde k castecnemu snızenı kapacity pro bezne soubory ale nehrozı zde nebezpecıprepisu ztracenych dat pri bezne praci Pokud uzivatel chce zapsat soubor na disketuoperacnı system pro nej vyuzije pouze volne sektory ktere jsou v poradku a chybnevzdy preskocı Skrytı dat nemusı ale nutne znamenat rozpoznatelnou zmenu vystupuObrazovy format BMP svou stavbou umoznuje doslova neviditelne skrytı (omezeneho)mnozstvı dat Jedinym prıpadnym vodıtkem k odhalenı je zvyseny objem dat
243 Kryptografie
Kryptografie jinymi slovy sifrovanı je postup transformace originalnı zpravy do podobyktera je v idealnım prıpade citelna pouze se znalostı tzv klıce Prı pouzitı stejne vstupnızpravy sifrovacıho algoritmu ale jineho klıce zıskame odlisny vystup Mıra zabezpecenızpravy zavisı na zvolenem algoritmu a sifrovacım klıci Proto pri chybnem pouzitı nekte-reho z bezne pouzıvanych algoritmu (napr RSA) a klıce (pouzitı retezce
rdquohesloldquo) nemusı
byt pro utocnıka velkou prekazkou zjistit obsah puvodnı zpravySifrovacı algoritmy rozdelujeme do dvou zakladnıch skupin podle typu klıce
bull Symetricka kryptografie ndash pouzıva pro sifrovanı i desifrovanı stejny klıc kteryby mel zustat v tajnosti Patrı zde naprıklad algoritmy DES [14] TwoFish [8] av dnesnı dobe v teto kategorii nejpouzıvanejsı AES [10]
bull Asymetricka kryptografie ndash vyuzıva dva typy klıcu verejny a privatnı Verejnyklıc ktery slouzı pro desifrovanı (uz podle nazvu) je mozne jej zaslat prıjemncisifrovane zpravy beznou nezabezpecenou elektronickou postou nebo jej zverejnitna svych webovych strankach Oproti tomu privatnı klıc musı zustat v tajnostiu sveho majitele Zastupcem teto kategorie je algoritmus RSA [5]
Sifrovana komunikace pak probıha podle nasledujıcıho scenare pripomınajıcıho kla-sickou postovnı korespondenci
1 Odesilatel (osoba A) si zajistı verejny klıc prıjemce (osoba B) naprıklad jejımstazenım z osobnıho blogu osoby B
2 Osoba A zasifruje svou zpravu pomocı verejneho klıce B a odesle ji jako beznye-mail
3 Osoba B zpravu desifruje pomocı sveho privatnıho klıce a zıska tak puvodnıobsah
Oba typy klıcu se generujı vzdy jako par Pro jejich vytvorenı je nutne dodat radunahodnych cısel Jednou z pouzitych metod jejich generovanı je prectenı hodnotynahodne adresy v pameti nebo sledovanı pozice kurzoru mysi uzivatele
15
Kapitola 3
Analyza
V nasledujıcı casti budou popsany pozadavky na navrhovany souborovy system a prehledzakladnıch problemu ktere bude nutne behem navrhu resit
31 Pozadavky na souborovy system
Pro uceleny pohled a dalsı postup je vhodne nejprve specifikovat pozadavky na vytvarenysystem Jsou jimi predevsım
bull Ochrana obsahu FS heslem ndash skryty FS by mel idealne tajit nejen svou vlastnıexistenci ale predevsım by nemel dovolit uzivatelum neznajıcıch klıc prıstupovatk jeho obsahu
bull Existence vıce FS nad jednım ulozistem ndash tento pozadavek muze plnit hned dvefunkce V prve rade jde o castecne nezavisle varianty FS pro organizaci obsahunicmene dalsım dusledkem muze byt jeho vlastnı ochrana Pokud bychom uvazo-vali scenar kdy osoba-utocnık pod pohruzkou donutı svou obetrsquo k vyzrazenı heslado skryteho FS obetrsquo ma sanci sdelit jine nez skutecne heslo a tım dojde ke zprı-stupnenı odlisneho obsahu (pochopitelne za predpokladu ze byl drıve vytvoren)
bull Nezavislost na uloznem mediu ndash knihovna by mela poskytovat dostatecne obecnerozhranı ktere by bylo mozne vyuzıt pro implementaci ruznych typu ulozistrsquo beznutnosti hlubokych zasahu do knihovny samotne Prıkladem typu ulozistrsquo mohoubyt soubory MP3 JPG webova sluzba
bull Alespon castecna odolnost proti chybejıcım fragmentum ndash v prıpade ze bude ulo-zistem naprıklad adresar s MP3 soubory lze v prubehu casu predpokladat jeho mo-difikace ruzne zavazneho charaketru (platı pochopitelne nejen pro soubory MP3)Mohou jimi byt zmena umıstenı souboru v adresarıch i kompletnı odstranenı celehoalba Tyto zasahy ruznou merou ovlivnujı spolehlivost skryteho FS a bude nutneje v navrhu zohlednit
16
bull Jednouzivatelsky rezim ndash skryty FS ze sve podstaty nenı urcen pro kazdeho uziva-tele ktery ma prıstup k ulozisti Predpokladem je uzky okruh osob ktere budouznat heslo pro prıstup
Vyvoj aplikace splnujıcı vyse uvedena kriteria se muze ubırat dvema smery V prve radelze vytvorit tzv aplikaci na mıru To znamena kompletnı prizpusobenı vyvoje zakom-ponovanı optimalizacı vhodnych pro specificke pouzitı atd Dalsım smerem je knihovnaposkytujıcı obecne rozhranı v takove forme aby bylo mozne vyhovet pozadavkum nasystem Vyhodou muze byt dalsı samostatne pouzitı konkretnıch modulu bez nutnostihlubokych zasahu do puvodnıch zdrojovych kodu Konecne rozhodnutı pro perspektiv-nejsı pouzitı tak padlo na variantu vytvorenı knihovny ktera bude schopna vytvorit aspravovat skryty souborovy system
17
Kapitola 4
Navrh souboroveho systemu
Kapitola navrhu popisuje obecne postupy resenı problemu ktere jsou spojeny s nasled-nym vyvojem skryteho souboroveho systemu Jejich soupis je uveden v kapitole 3 Tyjsou dale detailneji rozvedeny v kapitole 5 zabyvajıcı se implementacı
41 Uloziste
Cılem prace je zajistit ukladanı souboru do jinych Umıstenı techto jinych souboru budedale oznacovano jako uloziste
42 Vymezenı termınu
Pro ujasnenı vyznamu nekterych termınu dale obsazenych v teto prace nasleduje jejichprehled s podrobnejsım vysvetlenım
bull hash ndash jednoznacna identifikace prave jedne entitiy v ulozisti
bull fragment ndash souvisı se skrytym souborem a jde o poradove cıslo useku dat kterepredstavuje cast obsahu skryteho souboru Slozenım vsech fragmentu dostanemekompletnı obsah souboru proto jeho hodnota v ramci skryteho FS musı byt jedi-necna
bull blok ndash souvisı s entitou v ulozisti jedna se o poradove cıslo dılcı casti obsahufyzickeho souboru Tento identifikator musı byt unikatnı v ramci hash
bull vnoreny FS ndash samostatny prostor pro skryvanı souboru v ramci stejneho ulozisteImplementace systemu je muze rozlisovat naprıklad pomocı zadaneho hesla
43 Zpusob organizace souboru
Jak jiz bylo v zmıneno v teoreticke casti 221 nejpouzıvanejsımi druhy organizace obsahusouboru je fragmentace a spojita alokace Uloziste je jen obecne rozhranı a muze mıt
18
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
programy zamerne oznacit sektory na jejım magnetickem povrchu jako poskozene Tımsice dojde k castecnemu snızenı kapacity pro bezne soubory ale nehrozı zde nebezpecıprepisu ztracenych dat pri bezne praci Pokud uzivatel chce zapsat soubor na disketuoperacnı system pro nej vyuzije pouze volne sektory ktere jsou v poradku a chybnevzdy preskocı Skrytı dat nemusı ale nutne znamenat rozpoznatelnou zmenu vystupuObrazovy format BMP svou stavbou umoznuje doslova neviditelne skrytı (omezeneho)mnozstvı dat Jedinym prıpadnym vodıtkem k odhalenı je zvyseny objem dat
243 Kryptografie
Kryptografie jinymi slovy sifrovanı je postup transformace originalnı zpravy do podobyktera je v idealnım prıpade citelna pouze se znalostı tzv klıce Prı pouzitı stejne vstupnızpravy sifrovacıho algoritmu ale jineho klıce zıskame odlisny vystup Mıra zabezpecenızpravy zavisı na zvolenem algoritmu a sifrovacım klıci Proto pri chybnem pouzitı nekte-reho z bezne pouzıvanych algoritmu (napr RSA) a klıce (pouzitı retezce
rdquohesloldquo) nemusı
byt pro utocnıka velkou prekazkou zjistit obsah puvodnı zpravySifrovacı algoritmy rozdelujeme do dvou zakladnıch skupin podle typu klıce
bull Symetricka kryptografie ndash pouzıva pro sifrovanı i desifrovanı stejny klıc kteryby mel zustat v tajnosti Patrı zde naprıklad algoritmy DES [14] TwoFish [8] av dnesnı dobe v teto kategorii nejpouzıvanejsı AES [10]
bull Asymetricka kryptografie ndash vyuzıva dva typy klıcu verejny a privatnı Verejnyklıc ktery slouzı pro desifrovanı (uz podle nazvu) je mozne jej zaslat prıjemncisifrovane zpravy beznou nezabezpecenou elektronickou postou nebo jej zverejnitna svych webovych strankach Oproti tomu privatnı klıc musı zustat v tajnostiu sveho majitele Zastupcem teto kategorie je algoritmus RSA [5]
Sifrovana komunikace pak probıha podle nasledujıcıho scenare pripomınajıcıho kla-sickou postovnı korespondenci
1 Odesilatel (osoba A) si zajistı verejny klıc prıjemce (osoba B) naprıklad jejımstazenım z osobnıho blogu osoby B
2 Osoba A zasifruje svou zpravu pomocı verejneho klıce B a odesle ji jako beznye-mail
3 Osoba B zpravu desifruje pomocı sveho privatnıho klıce a zıska tak puvodnıobsah
Oba typy klıcu se generujı vzdy jako par Pro jejich vytvorenı je nutne dodat radunahodnych cısel Jednou z pouzitych metod jejich generovanı je prectenı hodnotynahodne adresy v pameti nebo sledovanı pozice kurzoru mysi uzivatele
15
Kapitola 3
Analyza
V nasledujıcı casti budou popsany pozadavky na navrhovany souborovy system a prehledzakladnıch problemu ktere bude nutne behem navrhu resit
31 Pozadavky na souborovy system
Pro uceleny pohled a dalsı postup je vhodne nejprve specifikovat pozadavky na vytvarenysystem Jsou jimi predevsım
bull Ochrana obsahu FS heslem ndash skryty FS by mel idealne tajit nejen svou vlastnıexistenci ale predevsım by nemel dovolit uzivatelum neznajıcıch klıc prıstupovatk jeho obsahu
bull Existence vıce FS nad jednım ulozistem ndash tento pozadavek muze plnit hned dvefunkce V prve rade jde o castecne nezavisle varianty FS pro organizaci obsahunicmene dalsım dusledkem muze byt jeho vlastnı ochrana Pokud bychom uvazo-vali scenar kdy osoba-utocnık pod pohruzkou donutı svou obetrsquo k vyzrazenı heslado skryteho FS obetrsquo ma sanci sdelit jine nez skutecne heslo a tım dojde ke zprı-stupnenı odlisneho obsahu (pochopitelne za predpokladu ze byl drıve vytvoren)
bull Nezavislost na uloznem mediu ndash knihovna by mela poskytovat dostatecne obecnerozhranı ktere by bylo mozne vyuzıt pro implementaci ruznych typu ulozistrsquo beznutnosti hlubokych zasahu do knihovny samotne Prıkladem typu ulozistrsquo mohoubyt soubory MP3 JPG webova sluzba
bull Alespon castecna odolnost proti chybejıcım fragmentum ndash v prıpade ze bude ulo-zistem naprıklad adresar s MP3 soubory lze v prubehu casu predpokladat jeho mo-difikace ruzne zavazneho charaketru (platı pochopitelne nejen pro soubory MP3)Mohou jimi byt zmena umıstenı souboru v adresarıch i kompletnı odstranenı celehoalba Tyto zasahy ruznou merou ovlivnujı spolehlivost skryteho FS a bude nutneje v navrhu zohlednit
16
bull Jednouzivatelsky rezim ndash skryty FS ze sve podstaty nenı urcen pro kazdeho uziva-tele ktery ma prıstup k ulozisti Predpokladem je uzky okruh osob ktere budouznat heslo pro prıstup
Vyvoj aplikace splnujıcı vyse uvedena kriteria se muze ubırat dvema smery V prve radelze vytvorit tzv aplikaci na mıru To znamena kompletnı prizpusobenı vyvoje zakom-ponovanı optimalizacı vhodnych pro specificke pouzitı atd Dalsım smerem je knihovnaposkytujıcı obecne rozhranı v takove forme aby bylo mozne vyhovet pozadavkum nasystem Vyhodou muze byt dalsı samostatne pouzitı konkretnıch modulu bez nutnostihlubokych zasahu do puvodnıch zdrojovych kodu Konecne rozhodnutı pro perspektiv-nejsı pouzitı tak padlo na variantu vytvorenı knihovny ktera bude schopna vytvorit aspravovat skryty souborovy system
17
Kapitola 4
Navrh souboroveho systemu
Kapitola navrhu popisuje obecne postupy resenı problemu ktere jsou spojeny s nasled-nym vyvojem skryteho souboroveho systemu Jejich soupis je uveden v kapitole 3 Tyjsou dale detailneji rozvedeny v kapitole 5 zabyvajıcı se implementacı
41 Uloziste
Cılem prace je zajistit ukladanı souboru do jinych Umıstenı techto jinych souboru budedale oznacovano jako uloziste
42 Vymezenı termınu
Pro ujasnenı vyznamu nekterych termınu dale obsazenych v teto prace nasleduje jejichprehled s podrobnejsım vysvetlenım
bull hash ndash jednoznacna identifikace prave jedne entitiy v ulozisti
bull fragment ndash souvisı se skrytym souborem a jde o poradove cıslo useku dat kterepredstavuje cast obsahu skryteho souboru Slozenım vsech fragmentu dostanemekompletnı obsah souboru proto jeho hodnota v ramci skryteho FS musı byt jedi-necna
bull blok ndash souvisı s entitou v ulozisti jedna se o poradove cıslo dılcı casti obsahufyzickeho souboru Tento identifikator musı byt unikatnı v ramci hash
bull vnoreny FS ndash samostatny prostor pro skryvanı souboru v ramci stejneho ulozisteImplementace systemu je muze rozlisovat naprıklad pomocı zadaneho hesla
43 Zpusob organizace souboru
Jak jiz bylo v zmıneno v teoreticke casti 221 nejpouzıvanejsımi druhy organizace obsahusouboru je fragmentace a spojita alokace Uloziste je jen obecne rozhranı a muze mıt
18
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
Kapitola 3
Analyza
V nasledujıcı casti budou popsany pozadavky na navrhovany souborovy system a prehledzakladnıch problemu ktere bude nutne behem navrhu resit
31 Pozadavky na souborovy system
Pro uceleny pohled a dalsı postup je vhodne nejprve specifikovat pozadavky na vytvarenysystem Jsou jimi predevsım
bull Ochrana obsahu FS heslem ndash skryty FS by mel idealne tajit nejen svou vlastnıexistenci ale predevsım by nemel dovolit uzivatelum neznajıcıch klıc prıstupovatk jeho obsahu
bull Existence vıce FS nad jednım ulozistem ndash tento pozadavek muze plnit hned dvefunkce V prve rade jde o castecne nezavisle varianty FS pro organizaci obsahunicmene dalsım dusledkem muze byt jeho vlastnı ochrana Pokud bychom uvazo-vali scenar kdy osoba-utocnık pod pohruzkou donutı svou obetrsquo k vyzrazenı heslado skryteho FS obetrsquo ma sanci sdelit jine nez skutecne heslo a tım dojde ke zprı-stupnenı odlisneho obsahu (pochopitelne za predpokladu ze byl drıve vytvoren)
bull Nezavislost na uloznem mediu ndash knihovna by mela poskytovat dostatecne obecnerozhranı ktere by bylo mozne vyuzıt pro implementaci ruznych typu ulozistrsquo beznutnosti hlubokych zasahu do knihovny samotne Prıkladem typu ulozistrsquo mohoubyt soubory MP3 JPG webova sluzba
bull Alespon castecna odolnost proti chybejıcım fragmentum ndash v prıpade ze bude ulo-zistem naprıklad adresar s MP3 soubory lze v prubehu casu predpokladat jeho mo-difikace ruzne zavazneho charaketru (platı pochopitelne nejen pro soubory MP3)Mohou jimi byt zmena umıstenı souboru v adresarıch i kompletnı odstranenı celehoalba Tyto zasahy ruznou merou ovlivnujı spolehlivost skryteho FS a bude nutneje v navrhu zohlednit
16
bull Jednouzivatelsky rezim ndash skryty FS ze sve podstaty nenı urcen pro kazdeho uziva-tele ktery ma prıstup k ulozisti Predpokladem je uzky okruh osob ktere budouznat heslo pro prıstup
Vyvoj aplikace splnujıcı vyse uvedena kriteria se muze ubırat dvema smery V prve radelze vytvorit tzv aplikaci na mıru To znamena kompletnı prizpusobenı vyvoje zakom-ponovanı optimalizacı vhodnych pro specificke pouzitı atd Dalsım smerem je knihovnaposkytujıcı obecne rozhranı v takove forme aby bylo mozne vyhovet pozadavkum nasystem Vyhodou muze byt dalsı samostatne pouzitı konkretnıch modulu bez nutnostihlubokych zasahu do puvodnıch zdrojovych kodu Konecne rozhodnutı pro perspektiv-nejsı pouzitı tak padlo na variantu vytvorenı knihovny ktera bude schopna vytvorit aspravovat skryty souborovy system
17
Kapitola 4
Navrh souboroveho systemu
Kapitola navrhu popisuje obecne postupy resenı problemu ktere jsou spojeny s nasled-nym vyvojem skryteho souboroveho systemu Jejich soupis je uveden v kapitole 3 Tyjsou dale detailneji rozvedeny v kapitole 5 zabyvajıcı se implementacı
41 Uloziste
Cılem prace je zajistit ukladanı souboru do jinych Umıstenı techto jinych souboru budedale oznacovano jako uloziste
42 Vymezenı termınu
Pro ujasnenı vyznamu nekterych termınu dale obsazenych v teto prace nasleduje jejichprehled s podrobnejsım vysvetlenım
bull hash ndash jednoznacna identifikace prave jedne entitiy v ulozisti
bull fragment ndash souvisı se skrytym souborem a jde o poradove cıslo useku dat kterepredstavuje cast obsahu skryteho souboru Slozenım vsech fragmentu dostanemekompletnı obsah souboru proto jeho hodnota v ramci skryteho FS musı byt jedi-necna
bull blok ndash souvisı s entitou v ulozisti jedna se o poradove cıslo dılcı casti obsahufyzickeho souboru Tento identifikator musı byt unikatnı v ramci hash
bull vnoreny FS ndash samostatny prostor pro skryvanı souboru v ramci stejneho ulozisteImplementace systemu je muze rozlisovat naprıklad pomocı zadaneho hesla
43 Zpusob organizace souboru
Jak jiz bylo v zmıneno v teoreticke casti 221 nejpouzıvanejsımi druhy organizace obsahusouboru je fragmentace a spojita alokace Uloziste je jen obecne rozhranı a muze mıt
18
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
bull Jednouzivatelsky rezim ndash skryty FS ze sve podstaty nenı urcen pro kazdeho uziva-tele ktery ma prıstup k ulozisti Predpokladem je uzky okruh osob ktere budouznat heslo pro prıstup
Vyvoj aplikace splnujıcı vyse uvedena kriteria se muze ubırat dvema smery V prve radelze vytvorit tzv aplikaci na mıru To znamena kompletnı prizpusobenı vyvoje zakom-ponovanı optimalizacı vhodnych pro specificke pouzitı atd Dalsım smerem je knihovnaposkytujıcı obecne rozhranı v takove forme aby bylo mozne vyhovet pozadavkum nasystem Vyhodou muze byt dalsı samostatne pouzitı konkretnıch modulu bez nutnostihlubokych zasahu do puvodnıch zdrojovych kodu Konecne rozhodnutı pro perspektiv-nejsı pouzitı tak padlo na variantu vytvorenı knihovny ktera bude schopna vytvorit aspravovat skryty souborovy system
17
Kapitola 4
Navrh souboroveho systemu
Kapitola navrhu popisuje obecne postupy resenı problemu ktere jsou spojeny s nasled-nym vyvojem skryteho souboroveho systemu Jejich soupis je uveden v kapitole 3 Tyjsou dale detailneji rozvedeny v kapitole 5 zabyvajıcı se implementacı
41 Uloziste
Cılem prace je zajistit ukladanı souboru do jinych Umıstenı techto jinych souboru budedale oznacovano jako uloziste
42 Vymezenı termınu
Pro ujasnenı vyznamu nekterych termınu dale obsazenych v teto prace nasleduje jejichprehled s podrobnejsım vysvetlenım
bull hash ndash jednoznacna identifikace prave jedne entitiy v ulozisti
bull fragment ndash souvisı se skrytym souborem a jde o poradove cıslo useku dat kterepredstavuje cast obsahu skryteho souboru Slozenım vsech fragmentu dostanemekompletnı obsah souboru proto jeho hodnota v ramci skryteho FS musı byt jedi-necna
bull blok ndash souvisı s entitou v ulozisti jedna se o poradove cıslo dılcı casti obsahufyzickeho souboru Tento identifikator musı byt unikatnı v ramci hash
bull vnoreny FS ndash samostatny prostor pro skryvanı souboru v ramci stejneho ulozisteImplementace systemu je muze rozlisovat naprıklad pomocı zadaneho hesla
43 Zpusob organizace souboru
Jak jiz bylo v zmıneno v teoreticke casti 221 nejpouzıvanejsımi druhy organizace obsahusouboru je fragmentace a spojita alokace Uloziste je jen obecne rozhranı a muze mıt
18
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
Kapitola 4
Navrh souboroveho systemu
Kapitola navrhu popisuje obecne postupy resenı problemu ktere jsou spojeny s nasled-nym vyvojem skryteho souboroveho systemu Jejich soupis je uveden v kapitole 3 Tyjsou dale detailneji rozvedeny v kapitole 5 zabyvajıcı se implementacı
41 Uloziste
Cılem prace je zajistit ukladanı souboru do jinych Umıstenı techto jinych souboru budedale oznacovano jako uloziste
42 Vymezenı termınu
Pro ujasnenı vyznamu nekterych termınu dale obsazenych v teto prace nasleduje jejichprehled s podrobnejsım vysvetlenım
bull hash ndash jednoznacna identifikace prave jedne entitiy v ulozisti
bull fragment ndash souvisı se skrytym souborem a jde o poradove cıslo useku dat kterepredstavuje cast obsahu skryteho souboru Slozenım vsech fragmentu dostanemekompletnı obsah souboru proto jeho hodnota v ramci skryteho FS musı byt jedi-necna
bull blok ndash souvisı s entitou v ulozisti jedna se o poradove cıslo dılcı casti obsahufyzickeho souboru Tento identifikator musı byt unikatnı v ramci hash
bull vnoreny FS ndash samostatny prostor pro skryvanı souboru v ramci stejneho ulozisteImplementace systemu je muze rozlisovat naprıklad pomocı zadaneho hesla
43 Zpusob organizace souboru
Jak jiz bylo v zmıneno v teoreticke casti 221 nejpouzıvanejsımi druhy organizace obsahusouboru je fragmentace a spojita alokace Uloziste je jen obecne rozhranı a muze mıt
18
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
velmi odlisnou podobu V prıpade vetsıho mnozstvı kratkych samostatnych zaznamuse jevı jako vhodny typ fragmentace stejne tak jako varianta maleho mnozstvı delsıchzaznamu pro ktere uz muze byt vhodnejsım prıstupem spojita alokace Vyber jednohoz uvedenych prıstupu je silne zavisly na konkretnımu prıpadu uzitı vysledne aplikace kekteremu je nutne prihlednout
Tato prace se venuje realizaci uloziste ve forme ID3 tagu souboru MP3 Ve stega-nografii se casto pouzıva hodnota 10 pro definovanı objemu skrytych dat vuci ori-ginalnım V prıpade MP3 souboru se bezny rozptyl objemu originalnıch dat pohybujev rozmezı 3 az 7 MB Pokud bychom ukladali skryty soubor v delce radove jednotek MBbude rozmıstenı castı souboru v prıpade obou alokatoru velmi podobne Pouzitı fragmen-tace s nevhodnou velikostı bloku muze vest k degradaci vykonu je vsak univerzalnejsımresenım Z toho duvodu bude pro alokaci vyuzito prave fragmentace
44 Organizace metadat
Na zaklade rozhodnutı o zpusobu alokace je dale nutne navrhnout zpusob ulozenı me-tadat a prizpusobit mu dalsı struktury Zakladnım stavebnım kamenem jsou tabulkyumoznujıcı mapovanı jednoznacne identifikace skryvaneho souboru na dalsı atributy cimnoziny atributu Tabulek bude nutne udrzovat hned nekolik a jsou jimi predevsımstruktura souboru tabulka obsahu souboru a obsah uloziste
441 Struktura souboru
Tabulka struktury musı byt schopna uchovavat vsechny podstatne atributy souborukterymi jsou
bull inode jednoznacny identifikator souboru v ramci celeho FS
bull odkaz na nadrazeny adresar
bull nazev souboru
bull delka souboru v bytech
bull prıznaky
442 Obsah souboru
Na tuto tabulku jsou kladeny naroky zejmena v podpore redundance bloku ndash tj moznostipriradit jednomu fragmentu vıce umıstenı na kterych se tento obsah naleza Nasledujıcıobrazek 41 ilustruje prıklad casti obsahu tabulky s obsahem dvou souboru
Ochrana dat pred ztratou se casto resı u diskovych polı technologiı RAID1 ze kterychlze cerpat nektere mozne zpusoby resenı (podrobnosti o technologii RAID jsou k dispoziciv [12])
1RAID ndash Redundant Arrays of Independent Disks
19
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
Obrazek 41 Ukazka obsahu tabulky uchovavajıcı obsah souboru
bull Parita ndash souborovym systemem je vybran blok ktery bude uchovavat paritnı bitydalsıch bloku namısto bezneho obsahu Nemusı se jednat pouze o paritu ale i o dalsıinformace umonujıcı detekci a prıpadnou opravu poskozenych bloku
bull Redundance ndash bloky (respektive vsechny kopie prave jednoho bloku) jsou umıs-teny do ruznych castı uloziste Pokud by doslo k nedostupnosti jedne kopie pouzijese jina nesoucı stejny obsah
bull Modifikace a kombinace vyse uvedenych
V prıpade zde popisovaneho souboroveho systemu byla zvolena redundance Pri pouzitısouboru MP3 jako formy uloziste lze predpokladat spıse vypadek kompletnıho souborunez chybu pri ctenı jednoho z ID3 tagu stejneho souboru Pri pouzitı redundance jev tomto prıpade vetsı sance na prectenı chybejıcıho bloku z jineho skutecneho souboruNevyhodou je nekolikanasobne vyssı zatızenı uloziste ktere roste prımo umerne s obje-mem redundace Dochazı tak ke zmensenı vyuzitelneho prostoru pro uskladnenı souborua narustu casu potrebneho pro zapis
443 Ulozenı metadat
Veskera metadata skryteho souboroveho systemu je nutne (predevsım pri odpojenı) ulo-zit takovym zpusobem aby je bylo mozne pri dalsım pripojenı zpetne nacıst a rekonstru-ovat obsah Tabulka predstavuje mnozinu entit stejne struktury Tohoto faktu lze vyuzıtpri navrhu zpusobu ulozenı jejı reprezentace Jednım z moznych resenı predstavuje po-uzitı spojoveho seznamu
45 Varianty alokatoru
Proces prerozdelovanı volneho mısta (alokovanı bloku) muze byt realizovan nekolikazpusoby podle druhu prıstupu k ulozisti Knihovna by mela poskytovat nasledujıcı dvazakladnı typy
20
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
bull maximalizace vyuzitı kapacity uloziste ndash pri alokovanı preferovat castecnevyuzite skutecne soubory jinak data zapsat do prvnıho dosud neobsazeneho sku-tecneho souboru souboru
bull minimalnı prekryv vıce skrytych souboru v jednom skutecnem ndash v ideal-nım prıpade jde o mapovanı prave jednoho skryteho souboru na fyzicky
Na obrazku 42 je uveden prıklad odlisneho zpusobu zaplnenı uloziste skrytymi soubory(soubor1 az soubor4) v zavislosti na zvolene variante alokovanı
(a) Maximalizace vyuzitı kapacity
(b) Minimalnı prekrytı skrytych souboru
Obrazek 42 Prıklad vyuzitı uloziste pri pouzitı ruznych variant alokatoru
46 Programovacı jazyk
Jak jiz bylo v teoreticke casti zmıneno rozhranı FUSE je mozne vyuzıt v rade programo-vacıch jazycıch Pro tuto implementaci byl zvolen jazyk C++ a to predevsım z duvodupodpory objektove orientovaneho prıstupu v programovanı a dale predpokladu rychlej-sıho vykonavanı v porovnanı s interpretovanymi jazyky (napr Pythonu) Jednım z cılubyla i snaha o nenarocnou realizaci uloziste (a tım jednoduche pouzitı knihovny) kteraje pomocı dedicnosti v C++ dobre realizovatelna
21
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
47 Diagram trıd
Nedılnou soucastı procesu navrhu je i vytvorenı diagramu navzajem interagujıcıch trıdObrazek ktery je kompletne popisuje je z prostorovych duvodu umısten na prilozenemCD
48 Odolnost vuci chybejıcım blokum
Uloziste pro uskladnenı datovych bloku (a metadat ktera je popisujı) muze mıt ruz-nou povahu ndash od beznych souboru (JPEG MP3 ) po rozhranı k webovym sluzbamZejmena v prıpade beznych souboru se muze snadno stat ze uzivatel omylem do tohotoadresare zasahne a pozmenı nektery ze souboru obsahujıcı bloky skryteho souborovehosystemu Tomu lze alespon castecne zabranit redundancı Jeden fragment skryteho sou-boru nebude ulozen pouze v jednom skutecnem souboru ale jeho kopie mohou byt roz-distribuovany do dalsıch Kdyz nelze precıst jedna kopie muze se system pokusit precısttentyz fragment z jine Tım se snizuje pravdepodobnost totalnıho vypadku fragmentu atım nedostupnost obsahu souboru
49 Popis behu programu
Stejne jako volanı mount provadı nekolik operacı pred pripojenım k lokalnımu adresarii v tomto prıpade je proces pripojovanı slozen z vıce dılcıch ukonu
1 V prve rade je nutne provest indexaci uloziste Tato akce provadı prevod adresyk souboru (ktera by se mohla v case mezi odpojenım a znovupripojenım menit)na jednoznacny identifikator ndash otisk obsahu souboru (dale jen hash) Konkretnımetoda prevodu je zavisla na zpusobu dalsıho pouzitı knihovny protoze ruznedruhy uloziste mohou vyzadovat specificky zpusob zıskanı identifikace k souboruPri ukladanı do souboru MP3 je jednou z metod vyuzitı oblasti s hudebnımi MPEGramci Za predpokladu ze soubory nebudou v tomto smeru modifikovany (typickyprevodem na jiny bitrate) je obsah tohoto useku dat konstantnı a proto vhodnypro formu jednoznacne identifikace
2 Dale je potreba od uzivatele zıskat heslo slouzıcı pro sifrovanı a desifrovanı obsahusouboroveho systemu a tım i odlisenı jednotlivych vnorenych FS Pro sifrovanı jevyuzito symetricke sifry AES Vyhodou teto sifry je nenarocnost na manipulacis klıcem ktery se v zadne forme nemusı ukladat mezi ostatnı metadata systemu
3 Pote se vyhleda (v prıpade zcela prvnıho pripojenı vytvorı) tzv superblok obsahu-jıcı prehled o vsech vnorenych souborovych systemech Kazdy zaznam o vnorenemFS je sifrovan stejnym heslem jako zbyly obsah takze lze najıt pouze zaznamyodpovıdajıcı zadanemu heslu a ostatnı jsou zcela necitelne Kazdy zaznam uvnitrsuperbloku obsahuje umıstenı ulozenych metadat prave jednoho souboroveho sys-temu Ta se pote nactou a naplnı se jimi vsechny potrebne tabulky
22
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
4 Spustı se hlavnı smycka knihovny FUSE ktera je aktivnı az do doby odpojenısouboroveho systemu
5 Na zaver se ulozı vsechna metadata (obsahy tabulek kopie superbloku) a dochazık uvolnenı naalokovanych prostredku
410 Alokator bloku
Rozdelenı obsahu souboru na fragmenty a jejich umıstenı do uloziste predstavuje nezbyt-nou opraci kterou v souborovych systemech zajistrsquouje prvek oznacovany jako alokatorbloku
4101 Atributy alokace
Navrzeny alokator rozlisuje mezi tremi druhy prıstupu alokace z nichz vybrane z nichlze kombinovat pomocı operatoru bitoveho souctu
4102 Typy alokatoru
bull ALLOCATOR_SPEED ndash alokator preferuje maximalnı vyuzitı uloziste a neobsazenyfyzicky soubor vybıra pouze pokud to je nezbytne Nazev je odvozen od vyhodypri ctenı i zapisu Tım ze jsou bloky koncentrovany do maleho mnozstvı fyzickychsouboru nenı nutne vytvaret mnozstvı novych kontextu (coz muze byt casovenarocna operace) Z toho vyplyva i nevyhoda spocıvajıcı ve vetsıch napachanychskodach pri poskozenı ci vypadku fyzickeho souboru Pokud nebude soubor citelnyzpusobı to ztratu obsahu nekolika skrytych souboru soucasne (castecnym resenımmuze byt zvysenı mıry redundance) Jedna se o vychozı nastavenı alokatoru
bull ALLOCATOR_SAFETY ndash kazdy skryty soubor se pokousı ukladat do jeste neobsazenychzaznamu v ulozisti Oproti ALLOCATOR_SPEED je tento prıstup mene nachylny naztratu dat vıce souboru Pokud to nenı mozne vybere se prvnı dostupny castecneobsazeny zaznam S narustajıcım obsazovanı uloziste se zvysuje mıra koncentracevıce souboru na jeden zaznam uloziste Nasledne tak dochazı ke stıranı rozdılumezi obema prıstupy
bull ALLOCATOR_REDUNDANCY ndash nenı samostatnym zpusobem alokace ale pouze vlast-nostı kterou lze kombinovat s vyse uvedenymi Jejım smyslem je ulozit kopii blokupro prıpad vypadku originalu do jineho fyzickeho souboru Nastavenım tohotoprıznaku je mozne pomocı druheho parametru specifikovat mıru redundantnıhoukladanı souboru Pokud nenı tato mıra explicitne zmenena ma hodnotu 1 Re-dundance je aplikovana na cele bloky Tento prıznak tak ovlivnuje vyber souboruv ulozisti pri ukladanı fragmentu a zpusobuje vyber jinych skutecnych souboru prostejny obsah (kopii fragmemtu)
23
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
Kapitola 5
Implementace
V nasledujıcım textu bude popsan zpusob resenı problemu uvedenych v kapitole 4 popi-sujıcı navrh
Pro spravu verzı zdrojovych kodu bylo pouzito verzovacıho systemu GIT Ty jsou do-stupne na httpgithubcomtuzticzkahiddenfs-lib Prilozene CD obsahuje verzioznacenou v repozitari pomocı znacky v12
Slozitejsı systemy vyuzıvajı casto pro svou cinnost radu ruznych knihoven Zvysujese tak nebezpecı kolize jmen symbolu (promennych objektu) kteremu se ale da predejıtvyuzitı jmennych prostoru (namespaces) Knihovna popisovana v teto praci se nachazıv novem jmennem prostoru oznacovanem HiddenFS Cely FS je rozdelen do nekolikahlavnıch objektu pricemz kazdy je pro prehlednost umısten v samostatnem souborunesoucım stejne jmeno Stezejnımi trıdami jsou
bull hiddenFs ndash obsahuje jadro souboroveho systemu a rıdı vsechny operace nad virtu-alnımi soubory
bull structTable ndash organizuje virtualnı soubory uchovava jejich atributy a zarazenıdo adresarove struktury
bull contentTable ndash uchovava umıstenı obsahu virtualnıch souboru ve forme fragmentua to vcetne jejich prıpadnych zaloznıch kopiı
bull hashTable ndash uskladnuje adresy k polozkam uloziste (v tomto prıpade jimi jsoucesty k adresari se soubory MP3) a jejich jednoznacne identifikatory
bull superBlock ndash poskytuje prehled nad vsemi variantami souboroveho systemu lisıcıse pouzitym heslem
bull common ndash obsahuje drobne jednoucelove funkce ktere jsou vyuzity v ostatnıch ob-jektech
51 Indexace uloziste
Zakladnı struktura MP3 souboru 51 se sklada z nasledujıcıch castı
24
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
bull ID3v2 ramce ndash v prıpade ze jsou v souboru MP3 obsazeny jsou vzdy ulozenyna zacatku souboru a jejich delka je variabilnı
bull MPEG ramce ndash popisujı hudebnı obsah MP3 souboru
bull ID3v1 tagy ndash nalezajı se na samem konci souboru majı pevnou delku 128 bytua tvorı volitelnou cast souboru
Obrazek 51 Znazornenı struktury formatu MP3 Vypocet otisku souboru se provadız vysrafovane oblasti
Pro vytvorenı retezce identifikujıcıho kazdy soubor je precten usek dat na ktery jenasledne aplikovan algoritmus pro vypocet otisku (tzv hash) Z rady algoritmu patrıcıdo teto skupiny byl vybrat SHA1 S vystupem algoritmu je dale manipulovano jakosamotnou jednoznacnou identifikacı souboru Usek dat pro vypocet otisku ma delku 1 kBa je pocıtan z poslednıch 300 kB obsahu souboru Tento odstup je pouzit pro zvysenıpravdepodobnosti nalezenı unikatnıho obsahu Poslednı vteriny nahravky byva castovelmi tiche a po MPEG kompresi by mohly byt ulozeny v ruznych souborech stejneV zavislosti na bitrate predstavuje 300 kB hudby priblizne 10-15 s hudby Pokud bylynalezeny ID3v1 tagy jsou do teto delky zapocıtany jako zvetsenı hodnoty offsetu takzese otisk pocıta vzdy ze stejne oblasti MPEG ramcu Soubory ktere majı delku menenez 2 MB jsou pri indexaci ignorovany a dale se s nimi uz nepracuje Identifikace pomocıotisku obsahu dovoluje jeho prirazenı ke stejnemu identifikatoru v hashTable i v prıpadeprejmenovanı skutecneho souboru nebo jeho presun na jine mısto v ulozisti (v nekterychprıpadech i pri modifikaci obsahu ktera je mimo oblast pro vypocet otisku)
52 Kontext souboru
Kontextem je nazyvana struktura obsahujıcı stav bloku umıstenych ve skutecneho sou-boru a obsahuje slozky
bull maxBlocks ndash maximalnı pocet bloku ktere je mozne do jednoho souboru umıstit
bull avaliableBlocks ndash seznam neobsazenych cısel bloku
bull usedBlocks ndash seznam cısel bloku nesoucı obsah
bull userContext ndash ukazatel pro dale nespecifikovane pouzitı
25
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
Vytvorenı noveho kontextu muze byt pro objemnejsı soubory casove narocna operaceproto se neprovadı uvolnenı kontextu po kazdem zapisu do skutecnych souboru Kontextje vyuzıvan jak jadrem knihovny tak uzivatelskou implementacı uloziste Operace nadnım totiz nejsou identifikovany cestou (jako tomu je v prıpade FUSE) ale prave kontex-tem ktery je predavan pri kazde manipulaci s fyzickym souborem Je ciste na uzivatelik jakemu ucelu vyuzije slozku userContext V tomto prıpade obsahuje pouze ukazatelna instanci na otevreny soubor pomocı knihovny ID3
Dalsı cinnostı ktera se pri tvorbe kontextu provadı je analyza stavajıcıho obsahuDılcı casti obsahu jednoho zaznamu uloziste jsou nazyvany bloky (viz cast 42) Ze sou-boru MP3 se provede vyber vsech GEOB (General encapsulated object) ramcu z ID3v2tagu ktere podle normy nemajı pevne dany obsah delku ani zpusob jejich reprezentaceTyto ramce obsahujı atributy Filename a Encapsulated object
Bloky se cıslujı pocınaje hodnotou konstanty FIRST_BLOCK_NO Kazdy GEOB ramecje analyzovan pomocı atributu Filename V prıpade ze jeho hodnota je cıslem je tatohodnota reprezentovana jako cıslo bloku a provede se jeho zarazenı do pole usedBlocksPri vytvarenı kontextu jeste nelze rozhodnout o zpusobu interpretace obsahu ani prıslus-nosti k jednomu z vnorenych FS Podle celkove delky MPEG ramcu se provede vypocetmaximalnıho objemu dat umıstenych v GEOB ramcıch (10 z delky MPEG) Ten jeprepocten na maximalnı pocet bloku pro tento soubor ktery je pro dalsı pouzitı ulozenve slozce maxBlocks Nasledne se provede dopocet cısel bloku ktere je jeste mozne vy-uzıt pro zapis novych dat a dojde tak k naplnenı pole avaliableBlocks Pridelovanıcısel volnych bloku se provadı pri pruchodu seznamu jiz obsazenych bloku Pokud cıslaobsazenych bloku na sebe tesne nenavazujı a nebyl prekrocem maximalnı pocet blokuje tako mezera v cıselne rade vyplnena volnymi bloky
53 Alokator
Existuje nekolik kriteriı dle kterych lze prerozdelovat volne bloky Zakladnımi typy vy-beru jsou
bull sameHash ndash volny blok v souboru se stejnym hash
bull unused ndash blok v nevyuzitem hash
bull partUsed ndash blok v castecne vyuzitem hash s moznostı omezenı vysledku zakaza-nymi hash (excluded)
bull any ndash zcela libovolny volny blok
Rozsırenım zakladnıho vyberu o dalsı kriteria vzniknou dalsı dva typy alokace
bull partUsedPreferred ndash probehne vyhledanı castecne obsazeneho hash Pokud zadnytakovy uz neexistuje provede se vyber prvnıho neobsazeneho hash ktery se nena-leza v seznamu excluded vyjmutych pro alokaci
26
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
bull unusedPreferred ndash provede se vyhledanı neobsazeneho hash V prıpade neuspechuse dale provede pokus o vyhledanı castecne obsazaneho hash
Pri aplikovanı pravidel se ukoncı vyber vzdy pri prvnım uspesnem vysledku Pokud aniposlednı podmınka nevyhovı vsechny metody zpusobujı vyjimku ExceptionDiscFull
indikujıcı uplne vyuzitı vsech dostupnych blokuSpecialnım typem vyberu volneho bloku je StealReservedBlock Ten se vyuzıva
v nekterych prıpadech pokud uz nejsou k dispozici zadne volne bloky Metoda se po-kusı vyhledat skryty soubor ktery ma prirazeny alespon jeden rezervovany blok Ten jepuvodnımu souboru odebran tak ze je oznacen jako neobsazeny Tento alokator vracıskrze svuj prvnı parametr vracı inode souboru kteremu tento blok puvodne patril
54 Obecny format bloku
Bloky mohou obsahovat nekolik druhu obsahu ktery je ale umısten do do ID3 tagu vespolecnem formatu Ten se sklada ze trı slozek
bull CRC ndash kontrolnı soucet slouzı pro overenı neporusenosti zbyleho obsahu bloku
bull ID byte ndash slouzı k urcenı typu obsahu
bull obsah bloku ndash nejdelsı slozka bloku nesoucı uchovavana data
Nektere z nasledujıcıch obrazku obsahujı cervene oramovanı Je tak oznacena oblast datktera jsou sifrovana jako celek
Obrazek 52 Struktura obecneho formatu bloku a delky jednotlivych castı
541 Identifikacnı byte
Hodnota identifikacnıho bytu se pohybuje v rozmezı 0 - 255 Rozsah je rozdelen do trıcastı s hranicemi ulozenych v poli ID_BYTE_BOUNDARIES
bull DataBlock ndash cıslo v intervalu lt 1 126 gt ndash blok s obsahem fragmentu skrytehosouboru
bull SuperBlock ndash cıslo v intervalu lt 128 199 gt ndash blok obsahuje superblok
bull Chain ndash cıslo v intervalu lt 201 254 gt ndash blok obsahuje cast retezce entit
27
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
Overenı rozsahu pro jednotlive typy se provadı pomocı funkcı s prefixem idByteIsPokud by bylo potreba tato cısla generovat lze k tomu pouzit metody obsahujıcı prefixidByteGen
55 Format ulozenı bloku typu DataBlock
Obsah skrytych souboru je organizovan tabulkami v objektech structTable a contentTableDo obsahu bloku se tak zapisuje jejich zasifrovany usek a nema proto zadnou dalsı vnitrnıstrukturu Jeho obsah je citelny pouze po spojenı vsech fragmentu skryteho souboru anaslednem desifrovanı
56 Format ulozenı bloku typu SuperBlock
Superblok je specialnım typem a narozdıl od bezneho datoveho je jeho obsah citelnysamostatne Obsahuje zasifrovana umıstenı prvnıch clanku retezu entit vsech vnorenychFS Sklada se z jednotlivych zaznamu a zarazky Ta predstavuje blok dat v delce zaznamua obsahuje pouze hodnoty 0 Kazdy zaznam ma konstantnı delku a je sifrovan samo-statne To umoznuje preskocenı zaznamu ktere nejsou pomocı zadaneho hesla citelne
Struktura obsahu bloku je nasledujıcı
bull CRC ndash kontrolnı soucet vypocıtany ze zbyvajıcı casti zaznamu Pri ctenı zaznamu senejdrıve provede desifrovanı cele delky a nasledne se provede novy vypocet CRCShoda obou kontrolnıch souctu tak nastane pouze v prıpade pouzitı stejneho hesla
bull table ndash obsahuje ASCII znak identifikujıcı tabulku jejız obsah blok nese Nabyvahodnot pouze rsquocrsquo pro contentTable nebo rsquosrsquo v prıpade structTable
bull first ndash obsahuje umıstenı prvnıho clanku retezu
Struktura bloku je patrna z obrazku 53
Obrazek 53 Struktura obsahu bloku se superblokem
28
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
57 Format ulozenı bloku typu Chain
Take bloky s retezcem entit majı svou vnitrnı stukturu Entity obecne nemusı mıt kon-stantnı delku coz zpusobuje jejich ruzny pocet pri zapisu do bloku Obrazek 54 ilustrujestrukturu obsahu bloku tohoto typu Obsahuje tyto slozky
bull count ndash ve forme celeho cısla informuje o poctu entit obsazenym v tomto bloku
bull next ndash obsahuje umıstenı nasledujıcıho clanku retezce entit
bull serializovane entitiy ndash obsah teto slozky je variabilnı stejne jako delka zdeulozenych entit
Obrazek 54 Struktura obsahu bloku se serializovanymi entitami
58 Format serializovane entity
Kazda entita je jednoduchou strukturou kterou je mozne popsat obecne libovolny usekdat Obsahuje pouze dve nasledujıcı slozky
bull length ndash delka entity v bytech
bull obsah ndash samotny binarnı obsah ktery ma delku length
59 Organizace metadat
Pro spravne fungovanı souboroveho systemu je nutne udrzovat radu metadat organizujıcıjeho obsah Jsou jimi tabulky v objektech structTable contentTable hashTable asuperBlock Pro lepsı prehled je kazde z nich dale venovana samostatna cast
591 Tabulka struktury
Ucelem teto tabulky je uchovavat strukturu skrytych souboru vcetne jejich atributuv implementaci ji predstavuje objekt structTable Kazdy skryvany soubor je v tabulceulozen ve strukture vFile jejımi slozkami jsou
bull inode ndash jednoznacny identifikator v ramci skryteho souboroveho systemu ve formeceleho cısla
29
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
bull parent ndash inode adresare ve kterem je aktualnı soubor obsazen
bull filename ndash nazev souboru delka je omezena velikostı konstanty FILENAME_MAX_LENGTH
bull length ndash delka obsahu souboru v bytech v prıpade adresaru ma hodnotu 0
bull flags ndash prıznaky souboru aktualne jimi jsou ctenı (R) zapis (W) spoustenı (X)a identifikace adresare (D)
Operace ctenı adresare (jeho inode je dale oznaceno jako iParent) predstavuje pruchodtabulkou s vyberem vsech radek obsahujıcı hodnotu parent rovnu iParent Predevsımpri uskladnenı vetsıho poctu souboru by to znamenalo sekvencnı pruchod cele tabulkyv kazdem ctenı obsahu adresare Pro odstranenı teto nevyhody se pouzıva jeste dalsı po-mocna tabulka mapujıcı iParent na mnozinu souboru (obsah adresare) identifikovanychpomocı inode
Format serializace
Vzhledem ke komplexnımu obsahu struktury typu vFile nenı nutne pro obnovu obsahuukladat cokoli dalsıho Predevsım pomocna tabulka poskytuje jen jiny pohled na datahlavnı tabulky a lze ji z nı snadno rekonstruovat Slozky jsou ulozeny tesne za sebou jenu retezce filename je nutne jej ulozit vcetne zakoncovacıho znaku 0 Pri deserializacijej pak lze snadno zase prevest na retezec ulozeny ve stylu jazyka C
592 Tabulka obsahu
Kompletnı prehled o vsech vyuzitych fragmentech FS poskytuje objekt contentTableHlavnı tabulka se sklada predevsım z nekolika vnorenych asociativnıch polı ktera umoz-nujı okamzity prıstup k prvkum pole Podstatnou vlastnostı tabulky je konstantnı delkavsech zaznamu Tato vlastnost je zajımava pri serializaci a s tım souvisejıcı odhad vol-neho mısta kompletnıho skryteho FS
Format serializace
Obsah tabulky pri serializaci se sklada pouze z dvojic vBlock a inode Pri serializaci sedo entity uklada nejdrıve inode a nasledne vystupnı buffer metody serialize_vBlock
593 Tabulka fyzickych souboru
Pro ucely mapovanı fyzickych souboru (tj zaznamu uloziste) na jejich jednoznacnouidentifikaci byl vytvoren objekt hashTable Jeho nazev se nevztahuje k provedenı internıimplementace ale k uchovavanemu obsahu kterym je otisk souboru (hash) Je to jedinaz tabulek ktera se neuklada a pri kazdem pripojenı skryteho systemu se plnı znovu
30
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
594 Superblok
V terminologii souborovych systemu je superblok strukturou uchovavajıcı vitalnı infor-mace o souborovem systemu V tomto prıpade je analogicky oznacovan jeden blok v ulo-zisti uchovavajıcı odkazy na vsechny systemy souboru odlisene prıstupovym heslem Su-perblok se nachazı v ramci jednoho uloziste maximalne v SUPERBLOCK_REDUNDANCY_AMOUNT
kopiıch Skutecne soubory pro jejich uskladnenı jsou urceny vzestupny serazenım tabulkyhashTable vzdy v jedne kopii na jeden zaznam v tabulce Razenı nenı nutne resit protozeto je vlastnost pouziteho kontejneru stdmap Zde se da s vyhodou vyuzıt vlastnostiformy otisku souboru (blok hexadecimalnıch cısel v podobe ASCII retezce) Pokud majıdva skutecne soubory nekolik stejnych prvnıch znaku neznamena to jejich blızkost z po-hledu umıstenı Kazda kopie se uklada do prvnıho bloku (konstanta FIRST_BLOCK_NO
v souboru Snahou je umıstit kopie do ruznych castı uloziste pro zajistenı integrity dati v prıpade necitelneho obsahu nektereho ze zaznamu
Serializace obsahu tabulek
Obsah kazde z vyse popsanych tabulek lze prevest do jednotnych podoby tzv entit a typak ve forme spojoveho seznamu ulozit podobnym zpusobem jako fragmenty virtualnıhosouboru Prevod obsahu tabulky si zajistrsquouje kazdy z objektu (structTable contentTable)sam prostrednictvım metody serialize Entita je jednoduchou strukturou datovehotypu chainItem a sklada se z ukazatele na obsah a delky tohoto obsahu Posloupnosttechto entit je oznacovana jako retezec entit (chain of entities) a jeho reprezentacı vezdrojovem kodu je datovy typ chainList_t
Ulozenı retezce entit do souboru probıha pomocı metody chainListCompleteSave()ktera pres sve parametry prijıma referenci na retezec entit a preferovany prvnı blok odktereho se ma spustit ukladanı (muze byt i NULL) Pokud nebyl preferovany blok zadanvyhleda jej alokator unusedPreferred V cyklu se entity ukladajı do bufferu tesne zasebe dokud nedojde k jeho naplnenı (zpracovanı dalsı entity by zpusobilo zapis za aloko-vanou delku pole) Ten ma delku urcenou konstantou BLOCK_USABLE_LENGTH a vzhledemk tomu ze entity mohou mıt ruzne delky nemusı byt zcela naplnen Pote se provede ulo-zenı obsahu bufferu do bloku Pokud zapisujeme do drıve pouziteho retezce pouzije sese pro dalsı zapis jeho puvodnı hodnota slozky next V opacnem prıpade se pro nale-zenı dalsıho bloku pro zapis vola metoda chainListAllocate Ta uprednostnuje stejnyfyzicky soubor v jakem je obsazen prave zapisovany blok Tento prıstup se snazı eli-minovat fragmentaci obsahu retezce do vıce fyzickych souboru Pro svazanı bloku dospojoveho seznamu se zapisuje kazdy blok 2x Poprve s ukazatelem na nasledujıcı clanekretezu hodnotou NULL a nasledne po zapisu nasledujıcıho clanku kdy je uz znamo jehoumıstenı v ulozisti Poslednı clanek se pochopitelne zapisuje pouze jednou
Deserializace
Deserializace je proces prevodu obsahu bloku zpet do retezce entit Nactenım prvnıhobloku precteme i umıstenı nasledujıcıho v rade V prıpade ze je oblast s umıstenım na-
31
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
sledujıcıho bloku vyplnena znakem 0 jedna se v tomto prıpade o identifikaci poslednıhobloku v rade Obsah kazdeho bloku se nasledne prevede entity
510 Operace nad soubory
Kazda z operacı ktera je pomocı FUSE implementovana predstavuje volanı statickemetody obsluhujıcı patricnou akci Ty je nutne jeste pred spustenım hlavnı smycky FUSEpredat pomocı naplnene struktury datoveho typu fuse_operations spolu s argumentyzıskane z prıkazove radky
5101 Ctenı
Komplexnı rekonstrukci souboru z fragmentu provadı metoda getContent Ta v prverade nacte metadata o vsech fragmentech souboru ktere nasledne prochazı po fragmen-tech Kazdemu fragmentu je prirazeno pole jeho kopiı Pres nej se provadı iterace dokudse nepodarı nacıst prvnı korektnı kopii fragmentu ostatnı kopie se jiz dale nezkoumajıProvede se ulozenı obsahu fragmentu do vysledneho bufferu a cyklus pokracuje dalsımcıslem fragmentu V prıpade ze se nektery z fragmentu nepodarı nacıst z zadne kopie jetento chybejıcı usek dat detekovan dochazı k uvolnenı prostredku a je vyvolana vyjimkaExceptionRuntimeError Nynı je jiz obsah souboru kompletnı a pouze se provede jehodesifrovanı
5102 Zapis
Stejne jako zapis na kterekoliv jine zarızenı i v tomto prıpade je proces zapisu rozdelen navolanı write a flush V prıpade volanı write (implementovano v metode fuse_write)se provede zkopırovanı dat ze vstupnıho bufferu do vnitrnıho a provede se nastavenı prı-znaku indikujıcı aktivnı manipulaci s bufferem pomocı promenne fileWriteBuffenabledVnitrnı buffer ma vychozı delku 0 bytu a v prıpade potreby se provadı jeho alokace navelikost bloku urcenou konstantou WRITE_BUFF_ALLOC_BLOCKSIZE Pokud by aktualnıvolanı write zusobilo zapis za buffer provede jeho realokace a tım dojde ke zvetsenı bu-fferu o velikost bloku Nenı vhodne volit delku bloku na hodnotu blızkou nekolikanasobkuvelikosti alokacnı jednotky kterou pouzıva operacnı system (casto 4 kB) Dochazelo bytak k castym velkym presunum v pameti a zvysenım hodnoty teto konstanty lze mnozstvırealokacı redukovat Proto byla hodnota konstanty zvolena na velikost 1 MB
Samotny zapis dat do ID3 tagu se provadı az metodou fuse_flush To je systememvolano pri kazdem uzavrenı souboru (tedy vcetne ctenı kdy nedochazı k modifikaciobsahu) Data z vnitrnıho bufferu se zasifrujı a volanım allocatorAllocate se provadıjejich samotny zapis Nasleduje ulozenı vsech metadat pro zajistenı konzistence obsahusouboroveho systemu Oba tyto zapisy mohou vyvolat vyjimku ExceptionDiscFullNa to je reagovano kompletnım odstranenım souboru (vsech jeho jiz zapsanych castı)Dojde tak k recyklaci bloku pro dalsı pouzitı a nastavenı navratove hodnoty na -ENOSPCkterou operacnı system uzivateli prelozı na chybove hlasenı
rdquoNa zarızenı nenı volne
mıstoldquo Nasledne se provede dalsı pokus o zapis metadat V teto dobe jiz mohlo dojıt
32
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
k uvolnenı dostatecneho prostoru pro jejich kompletnı ulozenı V prıpade dalsıho selhanıdochazı k nekonzistenci dat kterou muze v nekterych prıpadech opravit pouze odstranenınektereho z jiz ulozenych virtualnıch souboru
Kazdym zapisem se krome samotneho obsahu oznacujı i dalsı bloky jako rezervovaneJejich obsah nenı definovan a slouzı pouze pro uskladnenı budoucıho obsahu presahujı-cıho stavajıcı delku Mnozstvı rezervovanych bloku je omezeno na mnozstvı dane aktu-alnı delkou souboru nasobenou konstantou ALLOCATOR_RESERVED_QUANTITY (ve formecelocıselneho procenta) Pri zapisu muze v teto souvislosti dojıt k nekolika okolnostem
1 Novy obsah presahuje vsechny jiz vyuzite i rezervovane bloky Podle atri-butu alokatoru se provede vyhledanı novych bloku pro zapis obsahu Nasledne seprovede vypocet noveho poctu rezervovanych bloku a specifickym alokatorem (zdezalezı na drıve nastavene strategii alokace) se provede jejich rezervace Rezerovo-nanym blokum se priradı do skupiny reserved patrıcı inode (prıslusnost k ruznyminode nehraje roli) a provede se fyzicky zapis do uloziste Na jejich obsahu nezalezıprotoze prvnı operace ktera s nimi bude v budoucnu provedena je vzdy zapis a nectenı
2 Novy obsah je vyrazne kratsı nez puvodnı Podle rozdılu aktualne rezer-vovanych a maximalne rezerovanych (vypocet podle delky souboru) se provedeuvolnenı prebytecnych bloku ndash jsou oznaceny jako nepouzite a jakakoliv variantaFS nad stejnym ulozistem je muze vyuzıt
3 V prıpade ze se i po zapisu pohybuje objem rezervovanych bloku do povolenehomnozstvı se neprovadı dalsı rezervovanı Pocet takto vymezenych bloku je totizmaximalnı hodnotou ktera je pro zpracovavany soubor korektnı
5103 Vytvorenı bezneho souboru
Rozhranı FUSE stejne jako VFS umoznuje dva zpusoby vytvarenı novych souboru
bull volanım create ktere se pouzıva vyhradne pro tuto operaci
bull volanım open s prıznakem O_CREAT ktery signalizuje vytvorenı noveho souborupokud jeste neexistuje
Pokud nenı definovan obsah metody create pouzije se volanı open Pro implementacibylo pouzito volanı create protoze se tak da usetrit jedno systemove volanı
5104 Vytvorenı adresare
Tato operace spocıva pouze v extrakci cesty na inode nadrazeneho a nazev vytvarenehoadresare Pote je vytvorena nova struktura typu vFile nastavı se prıznak adresare aprovede se jejı zarazenı do tabulky structTable pomocı metody newFile
33
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
5105 Ctenı obsahu adresare
Na zacatku je nutne provest preklad cesty na inode adresare pomocı metody pathToInodeVolanım directoryContent objektu structTable je vracen iterator jehoz pruchodemlze precıst kompletnı obsah obsazenych souboru do urovne 1 (v terminologii OOP1 sejedna o prıme potomky) Ty jsou pak metodou filler umısteny do promenne bufferktery je rozhranım FUSE dale zpracovavan jako obsah adresare a nakonec se aktualizujenazev souboru (adresar je take druh souboru)
5106 Prejmenovanı presun souboru
Obe operace jsou reseny stejnym systemovym volanım proto pro ne existuje spolecnaobsluzna funkce Jejı implementace spocıva v pokusu o nalezenı cıloveho souboru Pokudexistuje provede se jeho odstranenı Dale se v tabulce objektu structTable provede mo-difikace nadrazeneho adresare zdrojoveho souboru spolu s aktualizacı obsahu pomocnetabulky tableDirContent
5107 Odstranenı souboru
Odstranenı souboru z FS probıha po castech v nekolika krocıch Nejdrıve je potrebauvolnit vsechny bloky ktere jsou k souboru prirazeny Volanım metody findAllBlocks
dostavame tento seznam bloku ktery obsahuje jak samotny obsah (vcetne vsech jehoredundantnıch kopiı) tak rezervovane bloky V nasledne iteraci pres tento seznam sefyzicky tyto bloky uvolnı v ulozisti Vyslednym stavem je pak stale existujıcı zaznams inode v tabulce objektu contentTable Ten je nutne pro zachovanı konzistence metadattake odstranit coz provadı metoda (tehoz objektu) removeFile Dale je nutne odstranitjeho atributy K tomu slouzı stejnojmenna metoda objektu structTable
5108 Odstranenı adresare
Odstranenı adresare spocıva pouze ve vymazanı zaznamu s jeho inode v hlavnı tabulceobjektu structTable a pomocne tableDirContent Nemuze se stat ze by v adresarizustal nejaky soubor Tuto vlastnost zajistrsquouje operacnı system Pokud zadame prıkazrm -r plnyAdresar provede operacnı system nejdrıve odstranenı vsech souboru kterejsou v adresari obsazeny a teprve pote se provede volanı unlink na jiz prazdny adresar
5109 Odhad volneho mısta
Zadanım prıkazu df dochazı k volanı metody fuse_statfs Objem dat dostupny prozapis souboru je v ulozisti sdılen mezi jeho vlastnı obsah a delkou serializovanych tabu-lek obsahujıcı metadata skryteho souboru Objem metadat je prımo umerny mnozstvıredundance poctu ulozenych souboru delce nazvu souboru a poctu kopiı serializovanychtabulek Z uvedenych faktoru jej ovlivnuje mıra redundance a predevsım pocet souborujako vyznamna promenna Z toho duvodu nelze presne urcit maximalnı budoucı objem
1Objetove Orientovane Programovanı
34
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
dat pro skryvane soubory Provadı se proto pouze hornı odhad v prıpade vyuzitı ulozistezapisem jedineho souboru maximalnı mozne delky
lsum minus celkova delka zapisovanych dat do uloziste [byty]
lfile minus delka zapisovaneho souboru [byty]
CT minus delka jednoho serializovaneho zaznamu v contentTable [byty]
ST minus delka jednoho serializovaneho zaznamu v structTable [byty]
R minus mıra redundance [pocet kopiı]
u minus vyuzitelna velikost bloku [byty]
lsum = lfile + ST + R lowast CT lowast(lfileu
)
511 Zname chyby
Ve vytvorenem souborovem systemu se nachazı nekolik castı ktere jsou implemento-vany pouze experimentalne a jejich cinnost nebyla zcela odladena Jedna se konkretneo nasledujıcı
bull Redundance rezervovanı bloku ndash tyto vlastnosti nebyly dostatecne testovany
bull Vypocet volneho mısta ndash nenı implementovano v casti 5109 je uveden navrhmozneho resenı
bull Alokator typu ALLOCATOR_SAFETY ndash nebylo testovano pri jeho nasazenı ve sta-vajıcı podobe muze dojıt k poskozenı metadat skryteho souboroveho systemu
35
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
Kapitola 6
Experimentalnı overenı
Tato kapitola popisuje experimentalnı overenı vlastnostı implementace skryteho soubo-roveho systemu Hlavnım cılem bylo zmerit rychlost operacı ctenı a zapisu s ruznoukombinacı zapisovanych souboru Implementace byla overena na verzi aplikace bez pod-pory rezervace bloku ktera se naleza na prilozenem CD
61 Metoda merenı
Pro automatizovane merenı byl vytvoren skript pro interpret bash ktery provadel me-renı doby vykonanı zakladnıch diskovych operacı a vypocet objemu uloziste po zapisuVystup skriptu byl formatovan takovym zpusobem aby bylo mozne vysledky dale stro-jove zpracovavat Proto byl zvolen textovy format CSV1 pro svou jednoduchosti pridalsım pouzitı Rucnı zmenou parametru merıcıho skriptu vznikla sada hodnot vhodnak dalsımu zpracovanı ktere probehlo v prostredı aplikace OpenOffice Calc
62 Podmınky merenı
Spustenı skriptu provadejıcı samotne merenı probıhalo pri beznem zatızenı operacnıhosystemu kancelarskou cinnostı Bylo tak simulovano predpokladane pouzitı v praxi Ulo-ziste obsahovalo adresarovou strukturu s MP3 soubory ulozene v ruznych urovnıch za-norenı o celkovem objemu dat 21773 MB
63 Prubeh a vysledky experimentu
Experimentovanı probıhalo ve ctyrech seriıch lisıcı se velikostı operovanych souboru(1 kB 10 kB 100 kB 1 MB) Promennou hodnotou byl pocet souboru k zapisu kteryjehoz hodnota se menila v rozsahu 10 az 100 s krokem 10 souboru Pouze v prıpade sou-boru delky 1 MB byl z casovych duvodu proveden zapis pouze 10-ti souboru s krokem 1soubor Scenar merenı byl nasledujıcı
1Comma-separated Values
36
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
1 Priprava na spustenı merenı spocıva ve zkopırovanı referencnıho obsahu ulozisteNasledne se provede pripojenı skryteho FS
2 Do skryteho souboroveho systemu se provede zapis noveho souboru Pocet souboruk zapisu se v jednotlivych krocıch menil (viz vyse) Merı se celkova doba zapisuvsech souboru jako jedine operace Dojde tak k naplnenı skryteho souborovehosystemu obsahem
3 Nasleduje merenı doby ctenı obsahu ktere bylo provadeno kopırovanım jednotli-vych skrytych souboru do pracovnıho adresare mimo skryty FS Provadı se opetmerenı celkove jako celku
4 Zaverecna faze provadı pouze odstranenı pracovnıch souboru pochazejıcı z merenıpredchozıho bodu
V tabulce 61 se nalezajı prumerne hodnoty vsech provedenych merenı Kompletnınamerene hodnoty se z prostorovych duvodu naleza pouze na prilozenem CD Obrazek61 ilustruje vysledny charakter jednotlivych merenı
velikost souboru [kB] prumerna rychlost zapisu [kBs] prumerna rychlost ctenı [kBs]
1 1215 17188
10 4984 69927
100 7614 28355
1000 9726 9058
Tabulka 61 Souhrn namerenych udaju zıskanych skriptem pro merenı
64 Shrnutı
Z grafickeho prubehu provedenych experimentu lze pozorovat konstantnı charakter rych-losti zapisu i ctenı ktery ma tendenci konvergovat k hodnote 100 kBs (to by ale prıpadneprokazalo merenı s vetsım objemem dat radove MB) Prıpadne vykyvy mohly byt zpu-sobeny momentalnım vyssım vytızenı operacnıho systemu jinym procesem Vyslednaprenosova rychlost je omezena znatelnou reziı souboroveho systemu
37
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
Obrazek 61 Prehled namerenych prenosovych rychlostı pri ruznych velikostech souboru
38
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
Kapitola 7
Zaver
Cılem teto prace bylo navrhnout skryty souborovy system ktery by umoznoval ukla-danı souboru do jinych Vznikla samostatna knihovna napsana v jazyce C++ kteraorganizuje fragmenty skryvanych souboru do ID3 tagu a poskytuje obecne rozhranı proimplementaci uloziste Knihovna dovoluje vyber ze dvou znacne odlisnych prıstupu pou-zitych pri obsazovanı uloziste Inspiracı pro navrh metod alokace byla technologie RAIDV implementaci byl kladen duraz na prehlednost a cistotu kodu Na zaklade provedenychexperimentalnıch merenı byla prokazana funkcnost systemu na platforme 32 bit Mere-nım bylo zjistena pumerna prenosova rychlost ctenı a zapisu ktera se pohybuje kolemrychlosti 100 kBs Vysledny program tak muze byt vhodny pro skrytı souboru s jinymihesly nebo privatnıch klıcu pouzıvanych v asymetricke kryptografie
V teoreticke casti byly popsany principy vybranych souborovych systemu a prehledo obecnych metodach zabezpecenı dat pomocı steganografie a kryptografie Pro detailnıpochopenı techto principu bylo nutne nastudovat implementaci nekolika castı jadra ope-racnıho systemu Linux ktere realizujı nızkourovnove operace se soubory V dalsı castiprace obsahuje popis technologie FUSE jejı strukturu a komentovany prıklad implemen-tace jednoducheho souboroveho systemu
71 Dalsı rozsırenı prace
Vysledny produkt teto prace je samostatnym a pouzitelnym celkem Neimplementujeale vsechny vlastnosti ktere jsou v souborovych systemech vyuzıvany Nasleduje prehlednametu o ktere by bylo mozne stavajıcı provedenı obohatit
bull Podpora pro zurnalovanı ndash pri operaci zapisu muze dojıt k neocekavanym pro-blemum nebo i k nahlemu vypadku uloziste (napr ulozistem bude vzdaleny servera dojde ke ztrate konektivity) Souborovy system by pak mohl pripojit zaloznı ulo-ziste a provadenou operaci korektne dokoncit
bull Podpora casovych razıtek souboru ndash implementovany system podporuje za-kladnı prıznaky a atributy souboru Pro nektere uzivatele to vsak muze byt limi-tujıcım faktorem
39
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
bull Vizualizace obsazenı polozek uloziste ndash vytvorenı graficke nadstavby ktera byposkytovala uzivateli uceleny pohled na jednotky uloziste jejich detailnı vyuzitı
bull Vytvorenı nastroje pro defragmentaci ndash po delsım case intenzivnıho pouzıvanıuz nelze zarucit stejne schopnosti vybraneho typu alokace jako v prıpade pouzitıprazdneho uloziste Nastroj by analyzoval rozmıstenı bloku a nasledne provedljejich preusporadanı podle pouzite alokace
bull Podpora 64 bit datovych typu ndash stavajıcı implementace byla vyvıjena a pri-marne testovana na 32 bitove platforme z cehoz plyne omezenı maximalnı delkyjednoho souboru na priblizne 4 GB Pokud by melo uloziste dostatecnou kapacitumuze se toto omezenı stat aktualnı
40
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
Literatura
[1] bloggerfs [Online navstıveno 2012-02-24]URL httpcodegooglecompbloggerfs
[2] CurlFtpFS [Online navstıveno 2012-04-11]URL httpcurlftpfssourceforgenet
[3] IBM Linear Tape File System [Online navstıveno 2012-03-25]URL httpwww-03ibmcomsystemsstoragetapeltfs
[4] Network File System (NFS) Version 4 Minor Version 1 Protocol [Onlinenavstıveno 2012-03-18]URL httptoolsietforghtmlrfc5661
[5] PKCS 1 RSA Cryptography Standard [Online navstıveno 2012-03-03]URL httpwwwrsacomrsalabsnodeaspid=2125
[6] sshfs [Online navstıveno 2012-04-05]URL httpfusesourceforgenetsshfshtml
[7] TrueCrypt [Online navstıveno 2012-03-15]URL httpwwwtruecryptorg
[8] Twofish [Online navstıveno 2012-03-20]URL httpwwwschneiercomtwofishhtml
[9] WikipediaFS [Online navstıveno 2012-03-15]URL httpwikipediafssourceforgenet
[10] Advanced encryption standard (AES) 2001 [Online navstıveno 2012-03-25]URL httpcsrcnistgovpublicationsfipsfips197fips-197pdf
[11] Ext4 Design 2011 [Online navstıveno 2012-04-07]URL httpsext4wikikernelorgindexphpExt4_Design
[12] Abraham Silberschatz and Greg Gagne and Peter Baer Galvin Operating systemconcepts John Wiley amp Sons Inc 7 vydanı 2005 ISBN 0-471-69466-5 921 s
41
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
[13] ECMA International Volume and File Structure of Disk Cartridges forInformation Interchange 1995 [Online navstıveno 2012-01-31]URL http
wwwecma-internationalorgpublicationsstandardsEcma-107htm
[14] Federal Information Processing Standards Publications Data encryption standard(DES) 1999 [Online navstıveno 2012-03-15]URL httpcsrcnistgovpublicationsfipsfips46-3fips46-3pdf
[15] Gregory Kipper Investigatorrsquos guide to steganography CRC Press LLC 1 vydanı2004 ISBN 0-8493-2433-5 220 s
[16] Ludek Skocovsky UNIX POSIX Plan 9 Ludek Skocovsky 1998 ISBN80-902612-0-5 394 s
[17] institut detı a mladeze N Jaka je hodnota informacı 2010-01-01 [cit2012-02-24]URL httpwwwnidmczinspiromatinspiromat-01-2010mohlo
-by-vas-zaujmoutjaka-je-hodnota-informaci
[18] Steve D Pate UNIX Filesystems Wiley Publishing 2003 ISBN 0-471-16483-6443 s
[19] Szeredi M LanguageBindings 2008 [cit 2012-02-24] [Online navstıveno2012-02-24]URL httpsourceforgenetappsmediawikifuse
42
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
Prılohy
43
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
Seznam prıloh
A Obsah CD 45
44
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45
Prıloha A
Obsah CD
Prehled obsahu README ndash textovy soubor ktery obsahuje strucne informace o knihovnea jejıch zavislostech na dalsıch knihovnachbalıccıch
doc-api ndash dokumentace vygenerovana prıkazem make doc pomocı nastroje Doxy-gen
src ndash obsahuje zdrojove kody knihovny HiddenFs-lib vcetne ukazkove implemen-tace uloziste manipulujıcı s ID3 tagy MP3 souboru
thesis ndash obsahuje elektronickou podobu teto bakalarske prace ve formatu PDFspolu s obrazky v nı obsazene a odkazovane
45