Základy souborových systémů

V současné době nabízí trh s počítači obrovské množství možností pro ukládání informací v digitální podobě. Mezi stávající úložná zařízení patří interní a externí pevné disky, paměťové karty foto/video kamer, USB flash disky, zařízení RAID a další složitá úložiště. Části dat jsou na nich uchovávány ve formě souborů, jako jsou dokumenty, obrázky, databáze, e-mailové zprávy atd., které musí být na disku efektivně uspořádány a v případě potřeby snadno vyhledány. Následující článek poskytuje obecný přehled o souborových systémech, hlavního prostředku pro správu dat na jakémkoli úložišti, a popisuje zvláštnosti jeho různých typů.

Základy souborových systémů

Co je to souborový systém?

Každý počítačový soubor je uložen na paměťovém médiu s danou kapacitou. Ve skutečnosti je každé úložiště lineárním prostorem pro čtení nebo čtení i zápis digitálních informací. Každý bajt informace na něm má svůj offset od počátku úložiště známý jako adresa a je na něj odkazováno touto adresou. Úložiště lze představit jako mřížku se sadou očíslovaných buněk (každá buňka je jeden bajt). Každá položka uložená v úložišti dostane své vlastní buňky.

Obecně platí, že počítačová úložiště používají k odkazu na libovolný bajt informace v úložišti dvojici sektor a offset v sektoru. Sektor je skupina bajtů (obvykle 512 bajtů), minimální adresovatelná jednotka fyzického úložiště. Například bajt 1040 na pevném disku bude odkazován jako sektor č. 3 a offset v sektoru 16 bajtů ([sektor]+[sektor]+[16 bajtů]). Toto schéma se používá k optimalizaci adresování úložiště a k použití menšího čísla pro odkaz na libovolnou část informace umístěnou na úložišti.

Aby se vynechala druhá část adresy (offset v sektoru), ukládají se soubory obvykle od začátku sektoru a zabírají celé sektory (například: 10bajtový soubor zabírá celý sektor, 512bajtový soubor zabírá také celý sektor, zároveň 514bajtový zabírá dva celé sektory).

Každý soubor je uložen v "nevyužitých" sektorech a lze jej později přečíst podle jeho známé pozice a velikosti. Jak však poznáme, které sektory jsou obsazené a které volné? Kam se ukládá velikost, pozice a název souboru? Právě to má na starosti souborový systém.

Souborový systém (často označovaný zkratkou FS) jako celek představuje strukturovanou reprezentaci dat a soubor metadat popisujících tato data. Na úložiště se aplikuje během operace formátování. Tato struktura slouží pro účely celého úložiště a je také součástí izolovaného segmentu úložiště - diskového oddílu. Obvykle pracuje v blocích, nikoliv v sektorech. Bloky FS jsou skupiny sektorů, které optimalizují adresování úložiště. Moderní typy obvykle používají velikosti bloků od 1 do 128 sektorů (512-65536 bajtů). Soubory jsou obvykle uloženy na začátku bloku a zabírají celé bloky.

Neustálé operace zápisu/odstranění v rámci úložiště způsobují jeho fragmentaci. Soubory tedy nejsou ukládány jako celé jednotky, ale rozdělují se na fragmenty. Například svazek je zcela obsazen soubory, z nichž každý má velikost přibližně 4 bloky (např. sbírka fotografií). Uživatel chce uložit takový, který zabere 8 bloků, a proto odstraní první a poslední soubor. Tím uvolní místo o velikosti 8 bloků, avšak první segment se nachází poblíž začátku úložiště, zatímco druhý na jeho konci. V tomto případě se 8blokový soubor rozdělí na dvě části (4 bloky pro každou část) a zabere volné místo "díry". Informace o obou fragmentech jako jeho částech jsou uloženy v souborovém systému.

Kromě uživatelských dat obsahuje souborový systém také vlastní parametry (například velikost bloku), deskriptory souboru (včetně jeho velikosti, umístění, fragmentů atd.), názvy a hierarchii adresářů. Může také uchovávat informace o zabezpečení, rozšířené atributy a další parametry.

Aby bylo možné vyhovět různým požadavkům uživatelů, jako je výkonnost, stabilita a spolehlivost úložiště, je vyvinuto mnoho typů (nebo formátů) FS, které mohou efektivněji sloužit různým účelům.

Souborové systémy systému Windows

Microsoft Windows používá dva hlavní souborové systémy: NTFS, primární formát, který ve výchozím nastavení používá většina moderních verzí tohoto operačního systému, a FAT, který byl zděděn ze starého systému DOS a má pozdější příponu exFAT. Od systému Windows Server 2012 zavedla společnost Microsoft také formát ReFS jako novou generaci pro serverové počítače. Se systémem HPFS, který vyvinula společnost Microsoft společně s IBM, se lze setkat pouze na extrémně starých počítačích se systémem Windows NT do verze 3.5.

FAT

FAT (File Allocation Table) je jedním z nejjednodušších typů FS, který se používá od 80. let 20. století. Skládá se z deskriptorového sektoru FS (zaváděcího sektoru nebo superbloku), tabulky přidělování bloků (označované jako tabulka přidělování souborů) a prostého úložného prostoru pro ukládání dat. Soubory ve FAT jsou uloženy v adresářích. Každý adresář je pole 32bajtových záznamů, z nichž každý definuje soubor nebo jeho rozšířené atributy (např. dlouhý název). Záznam přiřazuje první blok souboru. Každý další blok lze najít prostřednictvím tabulky pro přidělování bloků tak, že se použije jako spojový seznam.

Alokační tabulka bloků obsahuje pole deskriptorů bloků. Nulová hodnota znamená, že blok není použit, nenulová hodnota se vztahuje k dalšímu bloku souboru nebo ke speciální hodnotě pro jeho konec.

Čísla v souborech FAT12, FAT16, FAT32 znamenají počet bitů použitých k adresaci bloku FS. To znamená, že FAT12 může používat až 4096 různých odkazů na blok, zatímco FAT16 a FAT32 mohou používat až 65536 a 4294967296 odpovídajícím způsobem. Skutečný maximální počet bloků je ještě menší a závisí na implementaci ovladače FS.

FAT12 a FAT16 se dříve používaly na starých disketách a v dnešní době nenacházejí široké uplatnění. FAT32 se stále hojně používá pro paměťové karty a klíčenky USB. Tento formát podporují chytré telefony, digitální fotoaparáty a další přenosná zařízení.

Formát FAT32 lze použít na externích úložištích kompatibilních se systémem Windows nebo na diskových oddílech o velikosti do 32 GB, pokud jsou naformátovány vestavěným nástrojem tohoto operačního systému, nebo až do velikosti 2 TB, pokud jsou k formátování použity jiné prostředky. Souborový systém také neumožňuje vytvářet soubory, jejichž velikost přesahuje 4 GB. Pro řešení tohoto problému byl zaveden systém exFAT, který nemá žádná reálná omezení týkající se velikosti a je často využíván na moderních externích pevných discích a SSD.

NTFS

Souborový systém NTFS (New Technology File System) byl uveden v roce 1993 se systémem Windows NT a v současné době je nejrozšířenějším souborovým systémem pro počítače koncových uživatelů založené na systému Windows. Tento formát používá také většina operačních systémů řady Windows Server.

Tento typ FS je díky žurnálování poměrně spolehlivý a podporuje mnoho funkcí, včetně řízení přístupu, šifrování atd. Každý soubor v systému NTFS je uložen jako deskriptor v hlavní tabulce souborů a jeho datový obsah. Hlavní tabulka souborů (Master File Table - MFT) obsahuje záznamy se všemi informacemi o nich: velikost, alokace, název atd. Prvních 16 záznamů tabulky se zachovává pro BitMap, která uchovává záznamy o všech volných a použitých clusterech, Log používaný pro záznamy v žurnálu a BadClus obsahující informace o špatných clusterech. První a poslední sektor souborového systému obsahuje jeho nastavení (zaváděcí záznam nebo superblock). Tento formát používá 48 a 64bitové hodnoty pro odkazování na soubory, čímž je schopen podporovat datová úložiště s extrémně vysokou kapacitou.

ReFS

Systém ReFS (Resilient File System) je nejnovějším vývojem společnosti Microsoft, který byl představen v systému Windows 8 a nyní je k dispozici pro systém Windows 10. Jeho architektura se naprosto liší od ostatních formátů systému Windows a je organizována především ve formě stromu B+. Systém ReFS má díky novým funkcím, které jsou v něm obsaženy, vysokou odolnost vůči selháním. Nejpozoruhodnější z nich je Copy-on-Write (CoW): žádná metadata se nemění, aniž by byla zkopírována; data se nezapisují přes stávající data - jsou umístěna do jiné oblasti na disku. Po jakékoli úpravě se nová kopie metadat uloží do volné oblasti na úložišti a systém pak vytvoří odkaz ze starších metadat na novější kopii. Značné množství starších záloh je tak uloženo na různých místech, což zajišťuje snadnou obnovu dat, pokud nedojde k přepsání tohoto úložného prostoru.

HPFS

Systém HPFS (High Performance File System) vytvořila společnost Microsoft ve spolupráci s IBM a uvedla jej v roce 1989 s operačním systémem OS/2 1.20 jako souborový systém pro servery, který ve srovnání se systémem FAT poskytuje mnohem vyšší výkon. Na rozdíl od systému FAT, který pro fragment souboru jednoduše přidělí jakýkoli první volný cluster na disku, se systém HPFS snaží uspořádat soubor do souvislých bloků nebo alespoň zajistit, aby jeho fragmenty (označované jako extenty) byly umístěny maximálně blízko sebe. Na začátku systému HPFS jsou tři řídicí bloky zabírající 18 sektorů: zaváděcí blok boot block), super blok (super block) a rezervní blok (spare block). Zbývající úložný prostor je rozdělen na části sousedících sektorů označovaných jako pásma (bands) po 8 MB. Pásmo má vlastní bitovou mapu přidělení sektorů, která ukazuje, které sektory v něm jsou obsazeny (1 - obsazeno, 0 - volno). Každý soubor a adresář má svůj vlastní uzel F-Node umístěný v jeho blízkosti na disku - tato struktura obsahuje informace o umístění souboru a jeho rozšířené atributy. Pro ukládání adresářů se používá speciální adresářový pás umístěný uprostřed disku, přičemž samotná adresářová struktura je vyvážený strom s abecedně řazenými položkami.

Máte smazaná data na Windows? Čtěte více: obnova smazaných dat na Windows

Souborové systémy systému macOS

Systém macOS od společnosti Apple používá dva typy souborů FS: HFS+, což je rozšíření staršího systému HFS používaného ve starých počítačích Macintosh, a APFS, což je formát používaný v moderních počítačích Mac se systémem macOS 10.14 a novějším.

HFS+

HFS+ býval primárním formátem desktop produktů Apple, včetně počítačů Mac, iPodů a také produktů Apple X Server, než byl v systému macOS High Sierra nahrazen formátem APFS. Pokročilé serverové produkty používají také Apple Xsan, clusterový souborový systém odvozený od StorNext a CentraVision.

HFS+ používá k umisťování a vyhledávání souborů tzv. B-tree. Svazky jsou rozděleny na sektory o velikosti obvykle 512 bajtů, které jsou pak seskupeny do alokačních bloků, jejichž počet závisí na velikosti celého svazku. Informace o volných a použitých alokačních blocích jsou uchovávány v souboru Allocation. Všechny alokační bloky přiřazené každému souboru jako rozšiřující jsou zaznamenány v souboru Extends Overflow File. A konečně, všechny atributy souborů jsou uvedeny v souboru Attributes. Spolehlivost dat zvyšuje žurnálování, které umožňuje sledovat všechny změny v systému a v případě neočekávaných událostí jej rychle vrátit zpět do pracovního stavu. Mezi další podporované funkce patří pevné odkazy (hardlinks) na adresáře, šifrování logických svazků, řízení přístupu, komprese dat atd.

APFS

Souborový systém Apple je zaměřen na řešení zásadních problémů přítomných v jeho předchůdci a byl vyvinut tak, aby efektivně pracoval s moderními flashovými úložišti a polovodičovými disky. Tento 64bitový formát využívá ke zvýšení výkonu metodu kopírování při zápisu, která umožňuje kopírovat každý blok předtím, než jsou na něj aplikovány změny, a nabízí mnoho funkcí pro zajištění integrity dat a úsporu místa. Veškerý obsah a metadata o souborech, složkách spolu s dalšími strukturami APFS jsou uchovávány v kontejneru APFS. Container Superblock uchovává informace o počtu bloků v kontejneru, velikosti bloku atd. Informace o všech alokovaných a volných blocích kontejneru jsou spravovány pomocí bitmapových struktur. Každý svazek v kontejneru má svůj vlastní superblok svazku (Volume Superblock), který poskytuje informace o tomto svazku. Všechny soubory a složky svazku jsou zaznamenány v tzv B-tree files @ folders, zatímco B-tree Extents je zodpovědný za extenty - odkazy na obsah souboru (začátek souboru, jeho délka v blocích).

Máte smazaná data Mac OS? Čtěte více: obnova smazaných dat na Mac OS

Souborové systémy Linuxu

Open-source Linux se zaměřuje na implementaci, testování a používání různých typů souborových systémů. Mezi nejoblíbenější formáty pro Linux patří:

Ext

Ext2, Ext3, Ext4 jsou jednoduše různé verze "nativního" linuxového souborového systému Ext. Tento typ spadá pod aktivní vývoj a vylepšování. Ext3 je pouze rozšíření Ext2, které používá transakční operace zápisu souborů s žurnálem (journal). Ext4 je dalším vývojem Ext3, rozšířeným o podporu optimalizovaných informací o alokaci souborů (extents) a rozšířených atributů souborů. Tento FS se často používá jako "kořenový" pro většinu instalací Linuxu.

ReiserFS

ReiserFS - alternativní souborový systém Linuxu optimalizovaný pro ukládání velkého množství malých souborů. Má dobré vyhledávací schopnosti a umožňuje kompaktní alokaci souborů ukládáním jejich "tails" nebo jednoduše velmi malých položek spolu s metadaty, aby se k tomuto účelu nemusely používat velké bloky FS. Tento formát však již není aktivně vyvíjen a podporován.

XFS

XFS - robustní žurnálovací souborový systém, který byl původně vytvořen společností Silicon Graphics a používán na jejích serverech IRIX. V roce 2001 se dostal do linuxového jádra a nyní je podporován většinou linuxových distribucí, z nichž některé, jako například Red Hat Enterprise Linux, jej dokonce používají ve výchozím nastavení. Tento typ FS je optimalizován pro ukládání velmi velkých souborů a svazků na jednom hostiteli.

JFS

JFS - souborový systém vyvinutý společností IBM pro výkonné výpočetní systémy této společnosti. JFS1 obvykle znamená JFS, JFS2 je druhá verze. V současné době je tento projekt open-source a je implementován ve většině moderních verzí systému Linux.

Btrfs

Btrfs - souborový systém založený na principu kopírování při zápisu (COW), který navrhla společnost Oracle a který je od roku 2009 podporován hlavním linuxovým jádrem. Btrfs zahrnuje vlastnosti správce logických svazků, je schopen obsáhnout více zařízení a spolu s řadou pokročilých možností nabízí mnohem vyšší odolnost proti chybám, lepší škálovatelnost, snadnější správu atd.

F2FS

F2FS - linuxový souborový systém navržený společností Samsung Electronics, který je přizpůsoben specifikům úložných zařízení založených na paměti NAND flash, jež se hojně používají v moderních chytrých telefonech a dalších počítačových systémech. Tento typ pracuje na základě přístupu logicky strukturovaného systému FS (LFS) a zohledňuje takové zvláštnosti paměti flash, jako je konstantní přístupová doba a omezený počet cyklů přepisu dat. Namísto vytvoření jednoho velkého kusu pro zápis sestavuje F2FS bloky do samostatných kusů (až 6), které se zapisují současně.

Koncept "pevných odkazů" (hardlinks) používaný v tomto typu operačních systémů se většině typů linuxových FS podobá v tom, že název souboru není považován za atribut souboru a je spíše definován jako alias souboru v určitém adresáři. Souborový objekt může být propojen z mnoha míst, dokonce i násobně z téhož adresáře pod různými jmény. To může vést k vážným a dokonce nepřekonatelným potížím při obnově názvů souborů po jejich smazání nebo logickém poškození.

Máte smazaná data na Linuxu? Čtěte více: obnova smazaných dat na Linuxu

Souborové systémy BSD, Solaris, Unix

Nejběžnějším souborovým systémem těchto operačních systémů je UFS (Unix File System), často označovaný také jako FFS (Fast File System).

V současné době je systém UFS (v různých edicích) podporován všemi operačními systémy rodiny Unix a je hlavním souborovým systémem operačních systémů BSD a Sun Solaris. Moderní počítačové technologie mají tendenci implementovat náhrady systému UFS v různých operačních systémech (ZFS pro Solaris, JFS a odvozené formáty pro Unix atd.).

Clusterové souborové systémy

Clusterové souborové systémy se používají v počítačových clusterech a podporují distribuované ukládání.

Mezi distribuované typy FS patří:

  • ZFS – Společnost Sun "Zettabyte File System" - formát vyvinutý pro distribuovaná úložiště operačního systému Sun Solaris.

  • Apple Xsan –  od společnosti Apple.

  • VMFS – "Virtual Machine File System" vyvinutý společností VMware pro její server VMware ESX Server.

  • GFS – Red Hat Linux "Global File System".

  • JFS1 – původní (starší) návrh systému IBM JFS používaný ve starších úložných systémech AIX.

Mezi společné vlastnosti těchto souborových systémů patří podpora distribuovaných úložišť, rozšiřitelnost a modularita.