Souborový systém

Souborový systém (anglicky file system) je v informatice označení pro způsob organizace dat ve formě souborů (a většinou i adresářů) tak, aby k nim bylo možné uživatelsky srozumitelně 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 SSD disk,…) nebo může být zpřístupněna pomocí počítačové sítě (NFS, SMB, AppleTalk,…).

Účel souborového systému

Údaje v elektronické paměti jsou přístupné v podstatě jako vektor dvojkových čísel. Přitom různé oblasti tohoto vektoru mohou být v závislosti na typu a okamžitém stavu paměti různě rychle dostupné. Například harddisk nebo CD-mechanika potřebuje určitý čas na přesun hlavičky na jinou stopu a než se pod hlavičku dostane oblast s požadovanými daty.

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ů. Představme si rozsáhlou knihovnu dokumentů, kde bychom mohli popsat přístup ke konkrétnímu dokumentu například následovně: "budova C / 2. patro / místnost č. 12 / regál 3 / šuplík D2 / Šanon Akta-X / Dokument Vetřelec". V analogické abstraktní formě zpřístupňuje informace souborový systém, až na to že místo "budovy" nejspíše budeme mít písmeno označující logický disk, místo "patra" adresář 1. hierarchické úrovně, místo "místnosti" podadresář, dále podpodadresář, atp. Jednotlivým dokumentům v šanonech by pak odpovídaly soubory. 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.

Souborový systém a operační systémy

Mnoho operačních systémů podporuje více než jeden souborový systém. Občas jsou souborový systém a OS tak propojení, že je těžké je od sebe oddělit. Zde je potřeba, aby OS obsahoval rozhraní mezi uživatelem a souborovým systémem. Toto rozhraní může být textové (ovládané příkazovou řádkou) nebo grafické.

Unix a na Unixu založené systémy

Souborový systém má v unixových operačních systémech jen jeden kořen (tj. existuje jen jeden adresářový strom). Případné další souborové systémy jsou připojeny do adresářů existujícího stromu a nevytvářejí proto další kořen (další samostatný adresářový strom). Pro připojování souborových systémů do adresářového stromu slouží nástroj mount.

Při startu unixového systému (tj. při bootu) je zavedeno do paměti jádro, které si připojí kořenový souborový systém. Další souborové systémy jsou připojeny do existujících adresářů při startu automaticky dle definice v souboru /etc/fstab. Správce počítače může připojit další souborové systémy později, případně jsou připojovány automaticky (např. USB flash disk).

macOS

macOS používá souborový systém HFS+, který je převzat z klasického Mac OS. Firma Apple ho označuje termínem „Mac OS Extended“. Souborový systém HFS+ je velmi bohatý na metadata. Soubory mohou mít názvy délky až 255 znaků. HFS Plus používá pro kódování Unicode. Systém macOS podporuje též souborový systém UFS pocházející z BSD Unixu (souborový systém z NeXTSTEPu). Nové verze macOS jsou schopny číst a zapisovat do FAT. Umějí též číst novější NTFS z řady Windows NT.

Od roku 2017 používá Apple ve svém operačním systému IOS Apple souborový systém Apple File System APFS.

PC-BSD

PC-BSD je desktopová verze FreeBSD, který má stejnou podporu podobnou FreeNAS.

Microsoft Windows

Řada systémů Windows NT používá souborové systémy FAT, NTFS, exFAT, Live File System a ReFS (poslední z nich je podporován až Windows Server 2012 R2, ale Windows z nich nemůže nabootovat). Windows používá u každého souborového systému pro označení jeho kořene další písmeno abecedy. Například cesta C:\Windows představuje adresář Windows na disku pojmenovaném C. Označení C: je nejčastěji používáno jako označení primárního oddílu, na kterém bývá operační systém nejčastěji nainstalován.

FAT

Rodina souborových systémů FAT je podporována téměř všemi operačními systémy pro osobní počítače, včetně všech verzí Windows a MS-DOS/PC DOS a DR-DOS (PC DOS je OEM verzí MS-DOS). Je to univerzální formát použitelný mezi počítači a zařízeními většiny typů a věku. Během let se tento souborový systém vyvíjel z FAT12 na FAT16 a nakonec FAT32. Byly do něj přidány funkce navíc, například podsložky a dlouhé názvy souborů. FAT12 a FAT16 měly limit pro počet položek v kořenovém adresáři a limit maximální velikosti. Standardní FAT12, FAT16 a FAT32 mají pro název souboru limit 8+3 znaky (osm znaků pro název souboru a tři znaky pro příponu, například .EXE).

NTFS

Souborový systém NTFS byl představen s operačním systémem Windows NT v roce 1993.

exFAT

ExFAT je patenty zatížený souborový systém, který není kompatibilní s FAT. Je podporován v nových operačních systémech Windows NT (Windows Vista, Windows Server 2008, Windows 7, Windows 8 a podpora může být dodána do Windows XP. ExFAT je podporován v macOS od verze 10.6.5 (Snow Leopard). Podpora v dalších operačních systémech je malá, protože Microsoft nepublikoval specifikace souborového systému. ExFAT je jediný souborový systém plně podporovaný na operačních systémech Windows a macOS, který dokáže pracovat se soubory většími než 4 GB.

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, HFS+, ext3, ext4, XFS nebo ReiserFS.

Podrobnější informace naleznete v článku Žurnálovací systém souborů.

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.[zdroj?]

Přehledové tabulky

Tabulka omezení a doplňující informace

Souborový systémMaximální délka názvu souboruPoužitelné znaky v názvech adresářů[1]Maximální délka cestyMaximální velikost souboruMaximální velikost diskového oddílu[2]VyvinulPoužíváno od r.Původní operační systém
V6FS14b[3]libovolný bajt kromě NULL a / [3]Bez omezení[4]8MB2TBBell Labs1972Version 6 Unix
V7FS14b[3]libovolný bajt kromě NULL a / [3]Bez omezení[4]1GB2TBBell Labs1979Version 7 Unix
FAT12255bUnicode kromě NULL[5] [3]Bez omezení[4]32MiB32MiB až (??) 512MiBMicrosoft1980QDOS
FAT168b (původně) / 255b (pouze LFN / VFAT)Unicode kromě NULL[5] [3]Bez omezení[4]2 Gib / 4GiB16MiB až 4GiBMicrosoft1983MS-DOS verze 2
FAT328b (DOS bez LFN) / 255b (pouze LFN / VFAT)Unicode kromě NULL[5] [3]Bez omezení[4]2 Gib / 4GiB2 TiB[6]Microsoft1997Windows 95c
FATplus255bUnicode kromě NULL[5] [3]Bez omezení[4]256GiB2TiBUdo Kuhnt a další2006Enhanced DR-DOS
MFS30blibovolný bajt kromě NULL [3]Bez omezení[4]??Apple1983Mac OS
HFS30b[5]libovolný bajt kromě NULL [3]Bez omezení[4]??Apple1985Mac OS
OFS?????Metacomco pro Commodore1985Amiga OS
HPFS255bVšechny bajty kromě NULL[7]Bez omezení[4]4GB8GB až 2TB[8]IBM & Microsoft1988OS/2
NTFS255bUnicode kromě NULLBez omezení[4]16TB16EBMicrosoft, Gary Kimura, Tom Miller1995Windows NT
HFS+255 znaků[9]Unicode kromě NULL[10] [3]?8EB8EBApple1998Mac OS
FFS255bLibovolný bajt kromě NULL[3]Bez omezení[4]4GB256TBKirk McKusick19834.2BSD
Amiga FFS (Amiga)255bLibovolný bajt kromě NULL[3]Bez omezení[4]4GB256TBCommodore1987Amiga OS verze 1.3
UFS1255bLibovolný bajt kromě NULL[3]Bez omezení[4]4GB až 256TB256TBKirk McKusick19944.4BSD
UFS2255bLibovolný bajt kromě NULL[3]Bez omezení[4]512GB až 32PB1YBKirk McKusick2002FreeBSD 5.0
NILFS?????NTT2005Linux
ext2255blibovolný bajt kromě NULL a / [3]Bez omezení[4]16GB až 2TB[2]2TB až 32TBRémy Card1993Linux
ext3255blibovolný bajt kromě NULL a / [3]Bez omezení[4]16GB až 2TB[2]2TB až 32TBStephen Tweedie1999Linux
ext4255blibovolný bajt kromě NULL a / [3]Bez omezení16TB1EBTheodore Ts'o a další2006Linux
ReiserFS V34032b/255znakůLibovolný bajt kromě NULL[3]Bez omezení[4]8TB[11]16TBNamesys2001Linux
Reiser4??Bez omezení[4]8TB na x86?Namesys2004Linux
XFS255bLibovolný bajt kromě NULL[3]Bez omezení[4]9EB[4]9EB[4]SGI1994IRIX
JFS255bLibovolný bajt kromě NULL[3]Bez omezení[4]8EB512TB až 4PBIBM1990AIX[12]
JFS2255bLibovolný Unicode znak kromě NULLBez omezení[4]4PiB32PiBIBM1999OS/2 WSeB
Be File System255bLibovolný bajt kromě NULL[3]Bez omezení[4]12288b až 260GB[13]256PB až 2EBBe Inc., D. Giampaolo, C. Meurillon1996(?)BeOS
NSS?Závisí na použitém jmenném prostoru[14]Omezení limitované klientem8TB8TBNovell1998Netware 5
NWFS80bZávisí na použitém jmenném prostoru[14]Bez omezení[4]4GB1TBNovell1985Netware 286
ODS-2?????DEC1979OpenVMS
ODS-5236b[15]?4096b[16]1TB1TBDEC2003OpenVMS verze 8
UDF255bLibovolný Unicode znak kromě NULL1023b16EB?ISO/ECMA/OSTA1995-
UFS255bLibovolný bajt kromě NULLBez omezení[4]4 GiB až 256 TiB256 TiBKirk McKusick19944.4BSD
UFS2255bLibovolný bajt kromě NULLBez omezení[4]512 GiB až 32 PiB1 YiBKirk McKusick2002FreeBSD 5.0
QNX 4.x255blibovolný bajt kromě NULL255b4GB8GB až 2TB (?)QNX Software Systems QNX1990QNX
VxFS255bLibovolný bajt kromě NULL[3]Bez omezení[4]16EB?VERITAS1991SVR4.0
Plan9 Fosil+Venti?????Bell Labs2003Plan9 verze 4
ZFS255bLibovolný Unicode znak kromě NULLBez omezení[4]16EB16EBSun Microsystems2004Solaris 10
LFFS?? Unicode znak kromě NULL?[4]??Symbian OS2003Symbian OS S60 6.1

Vlastnosti souborového systému

Souborový systémTyp souboru metadataVlastník uložených souborůPřístupová práva k souborům podle POSIXČas vytvořeníČas poslední změnyČas posledního přístupuLast entry change timestampsČas poslední archivaceSeznam přístupových právZabezpečení/MAC labelsPevné odkazySymbolické odkazyAlternate data stream / resource fork
FAT12?NNAAANNNNNNN
FAT16?NNAAANNNNNNN
FAT32?NNAAANNNNNNN
FATplus?NNAAANNNNNNN
HPFS?A[17]NAAANNN?NNN
NTFS?AN[18]AAAANA?AA[19]A
HFS+?AAAA?????AAA

Žurnálování

Souborový systémŽurnálovací systémMeta-data only journalingCitlivost na velikost znakůCase-preservingLogování změn souborůDelayed allocationRozšířeníProměnlivá velikost datového bloku[20]
FAT12NNNNNNNN
FAT16NNNNNNNN
FAT32NNNNNNNN
FATplusNNNNNNNN
HPFSNNNANNA?
NTFSObnova[21]AAAAN??
HFS+N?AANNN?
FFSNNAANNNN
UFS1NNAANNNN
UFS2NAAANNNA
macOS UFSNNAANNNN
ext2NNAANNNN
ext3AAAANNN?
ReiserFS V3AAAANNN?
Reiser4AAAANNA?
XFSAAAAAAA?
JFSAAAANN??
Be File SystemNAAA?NN?
NSS?AAAANN?
NWFSNNAAANN?
ODS-5NANAANN?
VxFSANAAANN?
ZFSN?AANN??

Poznámky

  1. Jedná se o omezení vyplývající ze struktury vlastních adresářových záznamů. Některé ovladače souborových systémů mohou zavést svá vlastní omezení názvů souborů a adresářů; stejně tak i některé operační systémy mohou mít vlastní omezení bez ohledu na použitý souborový systém. MS-DOS, Microsoft Windows a OS/2 nedovolují použití znaků \ / : ? * „ > < | NUL v názvech souborů a adresářů ve všech souborových systémech. Unixy a Linux nedovolují použití znaků / NUL v názvech souborů a adresářů ve všech souborových systémech.
  2. a b c Pro souborové systémy, které mají proměnlivé velikosti alokačních jednotek (bloků/clusterů) je uvedeno rozmezí velikostí, ukazující maximální velikost volume pro minimální a maximální možnou velikost alokační jednotky souborového systému (např. 512 bytů a 128KiB pro FAT - což jsou velikosti clusterů povoleny pro datovou strukturu na disku, ačkoliv některé ovladače a operační systémy nepodporují velikost clusteru větší než 32KiB).
  3. a b c d e f g h i j k l m n o p q r s t u v w V těchto souborových systémech mají adresářové položky „.“ a „..“ zvláštní význam. Adresářové položky s těmito jmény nejsou zakázané a skutečně existují jako běžné položky adresářů ve struktuře dat na disku. Nicméně jsou povinné, s povinnými hodnotami, jsou automaticky vytvořeny v každém adresáři při jeho vytvoření; a adresáře bez nich jsou považovány za poškozené.
  4. a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad Struktura na disku nemá žádné vlastní omezení. Některé ovladače souborového systému a operační systémy ale mohou mít vlastní limity. MS-DOS nepodporuje cesty delší než 260 bytů pro FAT12 a FAT16. Windows NT nepodporují cesty delší než 32767 bytů pro NTFS.
  5. a b c d e Soubor ve FAT12, FAT16 a FAT32 má krátký název a může mít navíc dlouhý název. Pro dlouhé názvy platí uvedená omezení. Krátké názvy jsou přesně 11 bajtů dlouhé (8 bajtů název, 3 bajty přípona; doplněné mezerami, pokud jsou kratší); nesmí obsahovat znaky NUL (0x00) a 229 (0xE5), které mají zvláštní význam (označení konce adresáře, respektive smazané položky); a při normálním použití neobsahují malá písmena (lowercase). Některé ovladače souborových systémů nebo operační systémy nemusí podporovat dlouhé názvy. Například MS-DOS bez ovladače třetí strany (také Windows 95 a Windows 98 nabootované v režimu MS-DOS) umožňují přístup pouze ke krátkým názvům. Také v OS/2 ovladače k souborovým systémům FAT12 a FAT16 umožňují přístup pouze ke krátkým názvům.
  6. I když FAT32 oddíly takové velikosti fungují po vytvoření bez problému, některé programy neumožňují vytvořit FAT32 oddíl větší než 32GB. Mezi tyto programy patří instalační program Windows XP, což svádí k chybné domněnce že se jedná o limit souborového systému.
  7. Adresářové položky „.“ a „..“ v HPFS, které je možné vidět v uživatelských programech, jsou víceméně fikce vytvořená ovladači souborových systémů. Ve skutečnosti adresářové datové struktury na disku neobsahují záznamy s takovými názvy, ale místo toho obsahují zvláštní záznam „start“. Přestože adresáře s těmito názvy mohou na disku fyzicky existovat, nemohou být vytvořeny běžnými funkcemi a adresář obsahující takové záznamy je považován za poškozený.
  8. To je omezení struktury na disku. Ovladač souborového systému HPFS pro OS/2 používá vrchních 5 bitů čísla sektoru oddílu pro vlastní účely, omezujíc velikost diskového oddílu který dokáže spravovat na 64GiB.
  9. Starší verze HFS podporovala pouze 31 znakové názvy souborů. Kvůli tomu některé starší aplikace nepracovaly dobře se soubory, které měly názvy delší.
  10. HFS+ podporuje escape sekvence, která umožňuje použití libovolných Unicode znaků. Uživatelé předchozí verze uvidí escape sekvence místo požadovaných znaků.
  11. ReiserFS má teoretické maximum pro velikost souboru 1EB, ale „stránkovací keš to omezuje na 8TB na každé architektuře s 32bitovým integerem“[1] Archivováno 24. 10. 2007 na Wayback Machine.
  12. JFS vychází z AIX a byl kompletně přepsán pro OS/2. Linuxový souborový systém byl založen na verzi z OS/2.
  13. Velmi se liší v závislosti na velikosti bloku a fragmentaci block allocation groups.
  14. a b NSS umožňuje, aby soubory měli různá jména v různých jmenných prostorech.
  15. Maximální délka názvu souboru včetně přípony může být jen 236 bajtů; přestože každá jméno i přípona samostatně mohou být teoreticky až 255 bajtů dlouhé.
  16. Maximální délka cesty může být teoreticky 4096 bajtů, ale limity délek jednotlivých komponent jí omezují na 1664 bajtů.
  17. Struktura f-node obsahuje položku pro identifikátor uživatele. Nicméně s výjimkou operačního systému OS/2 Warp Server tato položka nebývá použita.
  18. NTFS access control list může vyjádřit každou přístupovou politiku zadatelnou přístupovými právy standardu POSIX, ale rozhraní POSIXového typu není podporováno bez přídavných programů jako Services for UNIX nebo Cygwin.
  19. NTFS 5.0 a vyšší umožňuje vytvářet tzv. junctions („křížení“), které dovoluje jednotlivým adresářům (ale nikoliv jednotlivým souborům) namapování kamkoliv do adresářové struktury lokálně spravovaného disku. Lze tak učinit skrze tzv. reparse points, které umožňují flexibilní rozšíření běžného procesu rozlišování jmen.
  20. Proměnlivá velikost datového bloku odkazuje na systémy, které podporují různou velikost bloku pro každý soubor. (To je podobné extentům, ale trochu odlišný výběr implementace.) Současná podpora v UFS2 je pouze pro čtení.
  21. NTFS ukládá vše, dokonce i souborová data, jako meta-data, takže jeho log připomíná spíš blokové žurnálování.

Externí odkazy