Unix file system

UFS (Unix file system, někdy též zvaný Berkeley Fast File System, BSD FFS, FFS) je v informatice název pro souborový systém používaný mnoha unixovými operačními systémy. UFS přímo vychází z původního unixového souborového systému (neměl název, označoval se prostě jako „souborový systém“ – filesystem, FS).

Struktura UFS

Struktura logického disku s UFS vychází ze struktury původního FS:

  • boot blok – informace nutné pro bootování
  • skupina
    • superblok – metadata souborového systému (identifikace, informace o logickém disku – počet i-nodů, volné místo, umístění kořenového adresáře, seznam volných bloků, …)
    • bloky s i-nody – tabulka i-nodů
    • datové bloky (alokační jednotky)
  • další skupina (skupiny se opakují až do konce logického disku)

Od původního unixového FS se UFS liší hlavně existencí tzv. „skupin“ (groups). Logický disk je rozdělen do opakujících se částí – skupin, přičemž každá skupina obsahuje vlastní zálohu superbloku, určitý počet i-nodů a datových bloků.

Při zápisu dat se UFS snaží udržet pohromadě v jedné skupině i-nody a k nim příslušná data v alokačních jednotkách (pokud to jde). Výhodou tohoto přístupu je zmenšení nutnosti přesunu hlaviček pevného disku, což vede k nižší latenci a k rychlejšímu přístupu k uloženým datům (souborům). UFS má oproti původnímu FS také větší velikost alokačního bloku (8 kB).

Z UFS vychází spousta dalších souborových systémů, např. MINIX file system, ext, …

Historie a vývoj

Dřívější verze unixových souborových systémů byly nazývány prostě FS (File System). Obsahovaly pouze boot blok, superblok, sadu i-nodů a datové bloky. Na discích s menší kapacitou, pro které byl původní FS navržen, to fungovalo dobře. Postupem času, jak šla technologie kupředu a kapacita disků se zvětšovala, čtecí hlava se musela pohybovat častěji tam zpět mezi bloky s i-nody a datovými bloky, což způsobovalo větší a větší latence (prodlevy). Marshall Kirk McKusick, absolvent univerzity v Berkeley, rozdělil disk na menší části, tzv. cylinder groups (skupiny válců), které měly vlastní i-nody a datové bloky. Výsledný systém souborů nazývaný Fast File System, FFS byl použit v BSD 4.2.

Záměrem BSD FFS bylo pokusit se sdružit datové bloky a metadata (i-nody) do jedné skupiny a pokud možno i celý obsah adresáře (obojí, data i metadata pro všechny soubory) do jedné nebo do přilehlé skupiny. Tím dojde nejen ke snížení latence, ale i ke zmenšení fragmentace dat, způsobené roztroušením obsahu jednoho adresáře po celém disku.

Některé z parametrů v superbloku obsahují číslo stopy a sektoru, rychlost hlavy a zarovnání sektorů mezi stopy. U plně optimalizovaných systémů by se hlava měla pohybovat při čtení pouze mezi sousedními stopami.

Disky se zvětšovaly a zvětšovaly a i toto řešení se stalo zastaralé. U velkých disků a velkých souborů bylo čtení fragmentovaných dat velký problémem. Aby tomu tak nebylo, tak se u BSD zvýšila velikost jednoho bloku souborového systému z jednoho sektoru (512 bajtů) na 1 KB ve verzi 4.0 BSD a 8 KB u FFS. Díky tomu vzrostla pravděpodobnost, že data v sousedících sektorech na sebe budou navazovat, a sníží se tak celková režie.

Další možností bylo zvětšit fyzickou velikost disku, protože počet bloků je omezen fixní bitovou šířkou jednoho bloku. Každý soubor musí mít přiřazen alespoň jeden datový blok, čímž u disků obsahujících mnoho malých souborů dochází k plýtvání místem (vnitřní fragmentace). Kvůli tomuto se přidala do BSD tzv. úroveň fragmentace bloku, díky tomu může být uložen poslední dílčí blok dat z několika souborů v jednom fragmentu namísto v soukromém skoro prázdném bloku.

Implementace

Prodejci některých unixových operačních systémů jako jsou např. SunOS/Solaris, System V Release 4, HP-UX a Tru64 přijali UFS. Většina z nich si UFS přizpůsobila na vlastní použití, přidáním některých rozšíření, která se nijak zvlášť neliší od rozšíření jiných prodejců. Mnoho z nich nadále používají stejné velikosti datových bloků a šířky datových polí jako původní UFS, takže je zde umožněna kompatibilita napříč platformami.

Do operačního systému Solaris 7 Sun Microsystems představil UFS Logging, který přinesl do UFS žurnálování filesystému, které je dosud dostupné v aktuální verzi Solarisu. UFS v Solarisu má další rozšíření pro velké soubory, pro disky s větší kapacitou a ještě další vlastnosti.

U 4.4BSD a Unixových systémů, které jsou z něj odvozeny, jako je např. FreeBSD, NetBSD, OpenBSD, a DragonFlyBSD, je implementace UFS1 a UFS2 rozdělena do dvou vrstev. Horní vrstva zajišťuje adresářovou strukturu a správu metadat (přístupové oprávnění, vlastnictví atd.) v i-node struktuře a spodní vrstvu, která se stará o datové kontejnery implementované jako i-nody. Důvodem tohoto bylo zachovat podporu, jak tradičního FFS, tak i LFS a aby se mohl sdílet kód a běžné funkce. Horní vrstva se nazývá „UFS“ a spodní vrstva se nazývá „FFS“ a „LFS“.

Kirk McKusick implementoval tzv. realokaci bloků, techniku, která přeuspořádá bloky v souborovém systému ještě předtím, než dojde k samotnému zápisu, čímž dojde k menší fragmentaci dat. Také implementoval některé mechanismy, které udržují systém v konzistentním stavu, aniž by došlo k poklesu výkonu, což byla nevýhoda dosavadního způsobu synchronizace. To mělo za následek snížení délky kontroly souborového systému po pádu systému nebo při výpadku proudu. Aby se tomuto problému předešlo, byla do systému zavedena utilita fsck.

Související články