Systém souborů Unix - Unix File System

UFS
Vývojáři CSRG
Celé jméno Souborový systém UNIX
Představeno s 4,2BSD
Struktury
Obsah adresáře stoly
Limity
Max. velikost svazku 2 73 bytů (8 ZiB )
Max. velikost souboru 2 73 bytů (8 ZiB )
Max. délka názvu souboru 255 bajtů
Funkce
Zaznamenaná data UFS1 a UFS2: čas posledního přístupu (atime), čas poslední změny (mtime), čas změny posledního inodu (ctime), UFS2: čas vytvoření inodu (čas narození)
Časové období UFS1: 14. prosince 1901-18. ledna 2038, UFS2: 64bitový celočíselný posun podepsaný od epochy
Rozlišení data UFS1 a UFS2: Nanosekunda
jiný
Podporované operační systémy A/UX , DragonFly BSD , FreeBSD , FreeNAS , NAS4Free , HP-UX , NetBSD , NeXTSTEP , Linux , OpenBSD , illumos , Solaris , SunOS , Tru64 UNIX , UNIX System V a další

Systém Unix soubor ( UFS ) je souborový systém podporuje mnoho Unix a Unix-jako operační systémy. Jedná se o vzdáleného potomka původního souborového systému používaného verzí 7 Unix .

Později byl v Unixech používán Berkeley Fast File System (také nazývaný BSD Fast File System - FFS ), který není stejný jako UFS.

Design

Svazek UFS se skládá z následujících částí:

  • Několik bloků na začátku oddílu vyhrazeného pro spouštěcí bloky (které musí být inicializovány odděleně od souborového systému)
  • Superblock, obsahující magické číslo identifikující toto jako souborový systém UFS, a některá další zásadní čísla popisující geometrii a statistiku a parametry ladění chování tohoto souborového systému
  • Sbírka skupin válců. Každá skupina válců má následující komponenty:
    • Záložní kopie superbloku
    • Záhlaví skupiny válců se statistikami, volnými seznamy atd. O této skupině válců, podobné těm v superbloku
    • Několik inodů , z nichž každý obsahuje atributy souboru
    • Řada datových bloků

Inody jsou číslovány postupně, počínaje od 0. Inode 0 je vyhrazeno pro nepřidělené položky adresáře, inode 1 byl inode souboru špatného bloku v historických verzích UNIX, následovaný inode pro kořenový adresář , který je vždy inode 2 a inode pro adresář ztracený+nalezený, který je inode 3.

Soubory adresářů obsahují pouze seznam názvů souborů v adresáři a uzel přidružený ke každému souboru. Všechna metadata souborů jsou uložena v inodu.

Historie a evoluce

Dřívější verze unixových souborových systémů byly jednoduše označovány jako FS . FS zahrnoval pouze zaváděcí blok, superblock, shluk inodů a datové bloky. To fungovalo dobře u malých disků, na které byly rané Unixy navrženy, ale jak technologie pokročila a disky se zvětšovaly, pohyb hlavy tam a zpět mezi shlukem inodů a datovými bloky, o nichž hovořili, způsobovalo mlácení . Marshall Kirk McKusick , tehdejší absolvent Berkeley , optimalizoval FFS (Fast File System) BSD 4.2 vynalézáním skupin válců, které rozbíjí disk na menší kusy, přičemž každá skupina má své vlastní inody a datové bloky.

Účelem BSD FFS je pokusit se lokalizovat související datové bloky a metadata ve stejné skupině válců a v ideálním případě veškerý obsah adresáře (data i metadata pro všechny soubory) ve stejné nebo blízké skupině válců, tedy snížení fragmentace způsobené rozptylem obsahu adresáře na celý disk.

Některé parametry výkonu v superbloku zahrnovaly počet stop a sektorů, rychlost otáčení disku, rychlost hlavy a zarovnání sektorů mezi stopami. V plně optimalizovaném systému by hlava mohla být přesunuta mezi blízkými stopami, aby četla rozptýlené sektory ze střídajících se stop, zatímco čeká, až se talíř otočí.

Jak se disky zvětšovaly a zvětšovaly, optimalizace na úrovni sektorů zastarala (zejména u disků, které používaly lineární číslování sektorů a variabilní sektory na stopu). S většími disky a většími soubory se fragmentovaná čtení stala větším problémem. Aby se tomu zabránilo, BSD původně zvýšilo velikost bloku systému souborů z jednoho sektoru na 1 K v 4,0 BSD; a ve FFS zvýšil velikost bloku systému souborů z 1 K na 8 K. To má několik efektů. Šance, že sektory souboru budou sousedit, je mnohem větší. Množství režie na seznam bloků souboru se sníží, zatímco se zvýší počet bajtů reprezentovatelných jakýmkoli daným počtem bloků.

Jsou možné i větší velikosti disků, protože maximální počet bloků je omezen pevným číslem bloku bitové šířky. U větších bloků však disky s mnoha malými soubory budou plýtvat místem, protože každý soubor musí zabírat alespoň jeden blok. Z tohoto důvodu přidala BSD fragmentaci na úrovni bloku , nazývanou také bloková suballokace, slučování ocasu nebo balení ocasu , kde poslední dílčí blok dat z několika souborů může být uložen v jednom bloku „fragmentu“ namísto více většinou prázdných bloků ( Allen 2005 ).

Implementace

Dodavatelé některých proprietárních unixových systémů, jako jsou SunOS / Solaris , System V Release 4 , HP-UX a Tru64 UNIX , a otevřené unixové odvozené systémy, jako jsou illumos , přijaly UFS. Většina z nich přizpůsobila UFS svému vlastnímu použití a přidala proprietární rozšíření, která nemusí být rozpoznána verzemi Unixu jiných prodejců. Mnozí nadále používali původní velikost bloku a šířky datových polí jako původní UFS, takže určitý stupeň kompatibility pro čtení zůstává napříč platformami. Kompatibilita mezi implementacemi jako celkem je přinejlepším špinavá.

Jak Solaris 7 , Sun Microsystems zahrnuty UFS protokolování, který přinesl filesystem do deníku k UFS, který je stále k dispozici v současných verzích Solaris a illumos. Solaris UFS má také rozšíření pro velké soubory a velké disky a další funkce.

V systémech Unix 4.4BSD a BSD z nich odvozených, jako jsou FreeBSD , NetBSD , OpenBSD a DragonFlyBSD , je implementace UFS1 a UFS2 rozdělena do dvou vrstev: horní vrstva, která poskytuje adresářovou strukturu a podporuje metadata (oprávnění, vlastnictví, atd.) ve struktuře inodů a nižších vrstvách, které poskytují datové kontejnery implementované jako inody. To bylo provedeno za účelem podpory jak tradičního systému souborů FFS, tak logového strukturovaného systému souborů LFS se sdíleným kódem pro běžné funkce. Horní vrstva se nazývá „UFS“ a spodní vrstvy se nazývají „FFS“ a „LFS“. V některých z těchto systémů je termín „FFS“ používán pro kombinaci spodní vrstvy FFS a horní vrstvy UFS a termín „LFS“ je používán pro kombinaci spodní vrstvy LFS a horní vrstvy UFS.

Kirk McKusick implementoval realokaci bloků, techniku, která mění pořadí bloků v systému souborů těsně před zápisem, aby se snížila fragmentace a řídilo stárnutí systému souborů. Implementoval také měkké aktualizace , mechanismus, který udržuje konzistenci systému souborů, aniž by omezoval výkon tak, jak to dělal tradiční režim synchronizace. To má vedlejší účinek ve snížení požadavku na kontrolu systému souborů po havárii nebo výpadku napájení. K překonání zbývajících problémů po selhání byl zaveden nástroj na pozadí fsck.

V UFS2 rozšířili Kirk McKusick a Poul-Henning Kamp vrstvy FreeBSD FFS a UFS o 64bitové ukazatele bloků (umožňující zvětšení svazků až na 8 zebajtů ), bloky proměnné velikosti (podobné rozsahům ), rozšířená pole příznaků, další razítka „narození“, rozšířená podpora atributů a seznamy ACL POSIX1.e. UFS2 se stal výchozí verzí UFS počínaje FreeBSD 5.0. FreeBSD také představil měkké aktualizace a schopnost vytvářet snímky systému souborů pro UFS1 i UFS2. Ty byly od té doby přeneseny do NetBSD, ale nakonec byly z NetBSD 6.0 odebrány soft aktualizace (nazývané měkké závislosti v NetBSD) ve prospěch méně složitého žurnálovacího systému souborového systému s názvem WAPBL (označovaného také jako protokolování), který byl přidán do FFS v NetBSD 5,0. OpenBSD podporuje měkké aktualizace od verze 2.9 a od verze 4.2 podporuje UFS2 (FFS2) (žádné ACL). OpenBSD nyní udělal z UFS2 výchozí verzi UFS a bude součástí verze 6.7. Od verze FreeBSD 7.0 podporuje UFS také žurnálování souborových systémů pomocí poskytovatele gjournal GEOM . FreeBSD 9.0 přidává podporu pro snadné žurnálování k měkkým aktualizacím (SU+J), což výrazně snižuje potřebu fsck na pozadí a NFSv4 ACL.

FreeBSD, NetBSD, OpenBSD a DragonFly BSD také obsahují systém Dirhash vyvinutý Ianem Dowse. Tento systém udržuje tabulku hash v paměti, aby urychlil vyhledávání adresářů. Dirhash zmírňuje řadu problémů s výkonem spojených s velkými adresáři v UFS.

Linux obsahuje implementaci UFS pro binární kompatibilitu na úrovni čtení s jinými Unixy, ale protože neexistuje standardní implementace pro rozšíření dodavatelů do UFS, Linux nemá plnou podporu pro zápis do UFS. Nativní souborový systém Linux ext2 byl inspirován UFS1, ale nepodporuje fragmenty a neexistují žádné plány na implementaci měkkých aktualizací. (V některých systémech odvozených od 4.4BSD může vrstva UFS používat vrstvu ext2 jako vrstvu kontejneru, stejně jako může používat FFS a LFS.)

NeXTStep , který byl odvozen z BSD, také používal verzi UFS. V Apple ‚s Mac OS X , byl k dispozici jako alternativa k HFS + , jejich proprietární souborový systém. Od Mac OS X Leopard však již nebylo možné nainstalovat Mac OS X na svazek ve formátu UFS. Kromě toho nelze upgradovat starší verze systému Mac OS X nainstalovaného na svazcích ve formátu UFS na Leopard; upgrade vyžaduje přeformátování spouštěcího svazku. U disků formátovaných jako UFS v systému Mac OS X existoval limit 4 GB. Od systému Mac OS X Lion byla podpora UFS zcela zrušena.

Viz také

Reference

Citace

Bibliografie

externí odkazy