49
VYSOKÉ U ˇ CENÍ TECHNICKÉ V BRN ˇ E BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMA ˇ CNÍCH TECHNOLOGIÍ ÚSTAV INTELIGENTNÍCH SYSTÉM ˚ U FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INTELLIGENT SYSTEMS SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX A HIDDEN GNU/LINUX FILE SYSTEM BAKALÁ ˇ RSKÁ PRÁCE BACHELOR’S THESIS AUTOR PRÁCE MARTIN PAVLÁSEK AUTHOR VEDOUCÍ PRÁCE Ing. OND ˇ REJ LENGÁL SUPERVISOR BRNO 2012

SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 2: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 3: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 4: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 5: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 6: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 7: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 8: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 9: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 10: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 11: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 12: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 13: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 14: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 15: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 16: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 17: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 18: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 19: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 20: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 21: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 22: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 23: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 24: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 25: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 26: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 27: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 28: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 29: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 30: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 31: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 32: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 33: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 34: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 35: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 36: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 37: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 38: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 39: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 40: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 41: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 42: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 43: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 44: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 45: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

[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

Page 46: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 47: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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

Page 48: SKRYTÝ SOUBOROVÝ SYSTÉM PRO GNU/LINUX · 1 Uvod 5 2 Teoretick a c ast7 ... Jej teoreticka cast ... Opera cn syst em GNU/Linux je inspirovan OX UNIX a jednou z vlastnost , kterou

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