Systém souborů Moderní OS používají téměř výhradně hiearchický systém souborů (adresáře, podadresáře, ...). Soubor je základní organizační jednotka pro uchovávání dat na discích či jiných médiích. Souborový systém (anglicky filesystem) je označení pro způsob organizace dat ve formě souborů (a většinou i adresářů) tak, aby k nim bylo možné snadno přistupovat. Souborové systémy jsou uloženy na vhodném typu elektronické paměti, která je umístěna přímo v počítači (pevný disk nebo CD…) nebo může být zpřístupněna pomocí počítačové sítě (NFS, SMB). Cluster (též alokační blok, alokační jednotka) je v počítači logická jednotka, do které se ukládají soubory a adresáře v souborovém systému. Sloučením několika bloků do větší alokační jednotky se snižuje režie komunikace počítače s úložným zařízením, snižuje se fragmentace a zvyšuje se tak rychlost a efektivita přenosu dat. Úložným zařízením může být jakékoliv blokové zařízení (pevný disk, CD, DVD, flash paměť, pásková jednotka a podobně).
Účel souborového systému Souborový systém zajišťuje ukládání a čtení dat paměťového média tak, aby s nimi uživatelé mohli pracovat ve formě souborů a adresářů. Základní ideou souborového systému je tedy zpřístupnění a ukládání dat pomocí hierarchicky organizovaného systému adresářů a souborů. Základním pravidlem každého souborového systému je, že data musí být jednoznačně určena svým jménem. Z toho vyplývá, že dva soubory nebo podadresáře umístěné ve stejném adresáři nesmí mít stejné jméno. Jednoúčelová zařízení jako jsou mp3 přehrávače nebo digitální fotoaparáty mohou podporovat pouze omezenou podmnožinu funkcí souborového systému. Avšak s plnohodnotnými hierarchickými souborovými systémy se setkáváme stále častěji (například v mobilních telefonech). Souborový systém zaznamenává kromě jména souboru a jeho umístění v hierarchii adresářů další informace sloužící pro správu souborů. Především jsou to časové známky (nejdůležitější je čas poslední změny). Dále může souborový systém vést informace o vlastnících souborů a přístupových právech, což je důležité ve víceuživatelských systémech, nebo při zpřístupňování dat na disku pomocí počítačové sítě.
Organizace dat na disku Pevné disky jsou obvykle logicky rozděleny na oddíly (partition), takže souborový systém se rozkládá jen na konkrétním oddílu a ne na celém disku. To umožňuje mít na pevném disku více nezávislých souborových systémů, které mohou být různého typu. Informace uložené v systému souborů dělíme na metadata a data. Metadata popisují strukturu systému souborů a nesou další služební a doplňující informace, jako je velikost souboru, čas poslední změny souboru, čas posledního přístupu k souboru, vlastník souboru, oprávnění v systému souborů, seznam bloků dat, které tvoří vlastní soubor atd. Pojmem data pak míníme vlastní obsah souboru, který můžeme přečíst, když soubor otevřeme. Software, který realizuje souborový systém, bývá obvykle součástí operačního systému. Většina operačních systémů podporuje několik různých souborových systémů. V Microsoft Windows nalezneme podporu pro souborové systémy FAT a NTFS a ISO 9660 pro ukládání souborů na CD a DVD. V Linuxu nalezneme kromě již zmíněných také ext2, ext3, ext4, ReiserFS, JFS, XFS a mnoho dalších. DOS podporuje systémy FAT, po instalaci CD/DVD driveru také ISO 9660. Solaris podporuje především UFS a ZFS, ale i mnoho dalších.
Omezení souborových systémů Různé souborové systémy mohou mít různá omezení, například: • • • • •
velikost paměťového média kterou je daný systém schopen pokrýt délka souboru délka jména souboru počet zanořených podadresářů podporovaná znaková sada
Žurnálování v systému souborů Zápis dat a metadat do systému souborů probíhá v několika krocích. Proto nejsou data a metadata v každém okamžiku konzistentní. Dojde-li v takové chvíli k havárii počítače (např. výpadek elektrického proudu, chyba hardware, software a podobně), zůstane systém souborů v nekonzistentním stavu. Z tohoto důvodu je při dalším startu operačního systému vhodné, aby byla provedena kontrola a nekonzistentní data byla opravena. K tomu může dojít automaticky (např. v Linuxu nebo ve Windows 95 a novějších systémech) nebo je nutné spustit kontrolu ručně (systémy DOS). Celková kontrola systému souborů a všech vazeb mezi daty a metadaty je časově velmi náročná operace, při které navíc může dojít ke zbytečné ztrátě již částečně zapsaných informací. Proto jsou moderní systémy souborů rozšířeny o žurnálování, které umožňuje po havárii rychlou opravu eventuálních nekonzistencí. Principem techniky je uchovávání chronologického záznamu prováděných operací, do kterého se zapisují všechny prováděné činnosti. Pokud dojde např. k výpadku napájení, je po restartu nekonzistence opravena návratem do předchozího zaznamenaného stavu za pomoci záznamů z žurnálu. Mezi žurnálovací souborové systémy patří např. NTFS, ext3, ext4, XFS nebo ReiserFS.
Kvóty Kvóty (anglicky quota) jsou limity nastavené správcem systému, které určitým způsobem omezují použití souborového systému. Nejčastěji se kvóty používají na omezení následujících věcí: • velikosti využitého místa (usage nebo block quota) • počtu souborů (file nebo inode quota) Dále může administrátor systému nastavit varování, tzv. soft quota, které uživatele informuje v případě, že se blíží ke svému limitu (který je pak nazýván hard quota). Často se také nastavuje tzv. grace interval, který v případě potřeby umožňuje krátkodobé mírné překročení kvóty.
Síťové souborové systémy Síťové souborové systémy (network filesystem) je označení pro systémy souborů, které jsou dostupné prostřednictvím počítačové sítě. Ve skutečnosti leží soubory a adresáře na jiném počítači a přistupujeme k nim pomocí speciálních síťových volání služeb (např. SMB, NFS, CODA apod.). Na vzdáleném počítači jsou pak soubory a adresáře fyzicky uloženy v podobě klasického systému souborů. Speciálními síťovými systémy souborů jsou distribuované souborové systémy (např. GFS v Linuxu), které se mohou rozkládat na několika počítačích, které jsou navzájem propojeny pomocí počítačové sítě.
Databázové souborové systémy V poslední době se začínají objevovat souborové systémy, které se odklánějí od klasické hierarchické struktury souborů a přiklánějí se více k databázovému pojetí reprezentace dat založené na jejich charakteristikách, tj. například na typu souboru, datu vytvoření, autoru a jiných metadat.
Fragmentace • vnější – soubory jsou rozkouskované po disku • vnitřní – velký počet malých souborů – volná místa v clusterech
Metody alokace bloků diskového zařízení Pokud chceme ukládat data o rozličné velikosti navíc s tím, že jejich velikost se může dále měnit, potřebujeme nástroj pro efektivní správu alokovaného místa na disku. Kromě toho je většinou nutné sledovat jak obsazené místo datovými bloky tak místo obsazené metadaty. V praxi se používají většinou tři základní metody alokace: souvislá, pomocí seznamu, pomocí indexu případně pomocí různých variant stromů. Většina systémů používá pouze jeden druh, některé umožňují typ alokace vybrat nebo alespoň pomocí parametrů upravit.
Souvislá alokace Souvislá alokace předpokládá, že každý soubor na disku je uložen v po sobě následujících blocích. Výhodou souvislé alokace je relativně velký výkon, protože se minimalizuje pohyb diskových hlav. Hlavním problémem u sekvenční alokace je vyhledávání volného místa pro nové soubory nebo prodloužení stávajících. V případě zrušení souboru nebo jeho zkrácení vznikají potenciálně volné úseky, ale postupně dochází k zhruba rovnoměrnému rozložení souboru a volného místa po celém disku. Nastává externí fragmentace. Jediným místem, kde se dnes více používá sekvenční alokace jsou souborové systémy určené pro read-only média jako CD-ROM (CD-R, RW atd), kde jsou dopředu vždy známy velikosti všech souborů a po prvním zápise se již nemění.
Alokace pomocí extentů Je rozšířením souvislé alokace. Při vytvoření nového souboru je alokována souvislá sekvence bloků zvaná extent. Jakmile soubor překročí velikost jednoho extentu, je na jiném vhodném místě (ideálně samozřejmě hned za předcházejícím) alokován extent další opět jako souvislá sekvence bloků. Pro jeden soubor je tedy nutno udržovat seznam extentů spolu s informací o jejich uložení, ale dosáhneme vysokého výkonu při práci se soubory díky alespoň částečně sekvenční alokaci.
Alokace pomocí seznamu Každý soubor ukládán do bloků umístěných libovolně na disku a k nim je uložena informace o posloupnosti bloků ve formě odkazu na další blok v každém bloku. Pro uložení informací o souboru pak potřebujeme odkaz na první a poslední blok (kde začít a přestat číst). Nevýhodou je zde výkon a vnitřní fragmentace. Větší problém ovšem nastává při požadavku na náhodný přístup. Zde jsme nuceni načítat všechny bloky od začátku disku abychom získali odkaz na následující blok i když data nevyužijeme. Přečtení jediného bajtu z konce souboru tak trvá stejně dlouho jako načtení celého souboru. Částečným řešením problému s výkonem je informace o následnících umístit mimo datové bloky tak aby bylo možné tyto oblasti držet přímo v paměti RAM. Tato technika se nazývá tabulka pro alokace souborů – FAT (File Allocation Table). Pokud je tato tabulka uložena v několika kopiích na různých místech disku, značně to zvyšuje spolehlivost, neboť ztráta FAT tabulky
znamená ztrátu všech souborů, neboť se k nim nejsme schopni dostat.
Alokace pomocí indexů a stromů Všechny ukazatele uloží do jednoho bloku – blok indexů. I-tá položka odkazuje na i-tý blok. Víceúrovňový index – první indexový blok ukazuje odkazy na další indexové bloky.
Sdílení složek a souboru více uživateli Microsoft • Klasické MS sdílení • FTP (File Transfer Protocol) Linux – Samba
Obvyklé souborové systémy ve Windows a v Linuxu Systém souborů v Unixu Systém souborů v Unixu je tvořen hierarchickým uspořádáním souborů a adresářů (stromová struktura), jejímž kořenem je adresář root, který se označuje „/“. V Unixu je, oproti některým jiným systémům (např. MS Windows), jeden strom adresářů (na jehož vrcholu leží právě root - kořen). Kořen se připojuje při startu operačního systému (jádra). Další systémy souborů (filesystem) jsou připojeny do nějakého adresáře. Vlastnosti systému souborů v UNIXu: • možnost vytvářet a mazat soubory • konzistentní přístup k datům v souboru • ochrana dat v souborech • kořenový systém souborů nelze odpojit Skoro vše v Unixu je soubor. V Unixu rozlišujeme tři základní skupiny souborů: • adresáře • soubory • speciální soubory Adresáře • Domovský adresář (též domácí, angl. home directory) – uživatel by měl mít vlastní domovský adresář. Po přihlášení do operačního systému je domovský adresář nastaven jako pracovní. • Pracovní adresář (angl. working directory) je ten, ve kterém momentálně uživatel pracuje. • Rodičovský adresář (angl. parent directory) je o úroveň výše ve vztahu s kterýmkoliv adresářem Soubory Obsahují vlastní data a programy, se kterými uživatel pracuje. Každému souboru přísluší tyto atributy: • jméno • velikost v bytech • číslo i-uzlu (angl. I-node number)
• • •
přístupová práva majitel a skupina datum poslední změny, datum posledního přístupu
Inode, i-node, česky i-uzel je datová struktura uchovávající metadata o souborech a adresářích používaná v unixových souborových systémech, které vycházejí z tradičního UFS (například linuxová řada ext2, ext3, ext4). Z důvodu zachování zpětné kompatibility ostatní souborové systémy i-uzly emulují (např. NFS). I-node – základní jednotka, která nese metadata o souboru (přístupová práva, počet odkazů – hard links, vlastník + skupina, délka) Speciální soubory • reprezentují I/O zařízení • jsou soustředěny v adresáři /dev • soubory znakových zařízení – čtou a zapisují po jednom znaku (sériový a paralelní port, USB, terminál) • soubory blokových zařízení – čtou a zapisují celý blok dat najednou (disk, disketa, CD, DVD) • další speciální soubory: socket (přímá dvousměrná komunikace mezi programy) a roura (trubka, angl. pipe, jednosměrná komunikace) Při tvorbě názvů souborů a adresářů v Unixu je jediný zakázaný znak „/“ (které odděluje adresáře). Odlišují se zde velká a malá písmena. Názvy nemají strukturu – znak . (tečka) je stejný jako ostatní. Přípony se používají dle dohody, vůbec nebo násobné. Žurnálování V žurnálovém souborovém systému je přítomna speciální datová struktura (žurnál), do kterého se zapisují změny se soubory. Žurnálují se – metadata nebo metadata + data. Při změnách ve Filesystému je změna nejprve zapsána do žurnálu. Po provedení změny (data, metadata) je úspěch zapsán do žurnálu, poté je žurnál operace zrušen. Pokud dojde k neočekávané havárii je Filesystém opraven dle žurnálu. FAT FAT je zkratka anglického názvu File Allocation Table. Jedná se o tabulku obsahující informace o obsazení disku v souborovém systému vytvořeným pro DOS. Zároveň se tak označuje zmíněný souborový systém. FAT je jednoduchý souborový systém, proto je podporován prakticky všemi operačními systémy. Kvůli jednoduchosti a rozšíření je velmi často používán na výměnných médiích, jako je disketa (zde se používá verze FAT12), USB flash disk (na CD se nepoužívá). Hlavní adresář maximálně 255 položek. FAT12, FAT16, FAT32 – 212, 216 a 232 clusterů. Jména souborů 8+3. NTFS NTFS (New Technology File System) je souborový systém vyvinutý společnostmi IBM a Microsoft, který jej poprvé zavedl ve svém operačním systému Windows NT. Jedná se o žurnálovací systém. Souborový systém NTFS již od svého počátku velice trpí svou nepříjemnou vlastností, s oblibou fragmentuje soubory. Čtení takto fragmentovaných souborů je pak zbytečně pomalé a čím více je takovýto soubor fragmentován, tím je to horší. Proto se musí oddíly NTFS pravidelně a poměrně často defragmentovat. Tuto skutečnost si mnoho uživatelů neuvědomuje a pak se jen diví, proč jsou u nich diskové operace nepříjemně pomalé. Jméno souboru nebo složky v
systému NTFS může být složeno až z 255 znaků, díky kódování v 16 bitovém Unicode není problém se specifickými národními znaky. ISO 9660 ISO 9660 je standard popisující způsob uložení souborů na CD nebo DVD. Rovněž se tak nazývá souborový systém, který vznikne uložením souborů podle této normy. Od většiny ostatních souborových systémů se liší tím, že do něj nelze přidávat soubory - musí se vytvořit rovnou se všemi soubory co v něm jsou. Windows implementují rozšíření zvané Joliet, umožňující delší jména v unicode. Linux kromě podpory Joliet podporuje také složitější rozšíření zvané Rock Ridge, které kromě delších jmen souborů podporuje i práva. Ext2 Původní souborový systém v Linuxu pochází ze systému MINIX. Ten byl později rozšířen a doplněn a nazván extfs – Extended filesystem. Po dalších úpravách vznikla verze ext2, která se používá v některých případech dodnes. Ext2 vychází do jisté míry ze systému souborů FastFilesystem, z projektu BSD. Každý adresář může obsahovat další adresáře a soubory; lze použít odkazy (links). Pevný odkaz (hard link) - více odkazů na stejný soubor, žádný není hlavní; soubor smí být smazán, když na něj již nevede žádný takovýto odkaz; nesmí vzniknout cykly; nesmí odkazovat na sebe sama a nesmí vést na jiný disk. Symbolické odkazy (soft link) - odkazují na umístění souborů; odpadají omezení u pevných odkazů. Volný prostor evidován v zřetězeném seznamu. Ext3 Pro disky do 4 TB. Názvy souborů mohou být dlouhé 255 znaků. Jedná se o žurnálovací systém. JFS JFS je moderní 64-bitový, žurnálovací souborový systém vyvinutý firmou IBM, šířený pod licencí GPL. NFS Network File System (NFS) je internetový protokol pro vzdálený přístup k souborům přes počítačovou síť. Poměrně pomalý, problémy se zabezpečením.