ext4 - ext4

ext4
Vývojáři Mingming Cao, Andreas Dilger, Alex Zhuravlev (Tomáš), Dave Kleikamp, Theodore Ts'o , Eric Sandeen, Sam Naghshineh a další
Celé jméno Čtvrtý rozšířený souborový systém
Představený s Linuxem 2.6.28, 2.6.19
Identifikátor oddílu 0x83 : MBR / EBR .

EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 : GPT Windows BDP .
0FC63DAF-8483-4772-8E79-3D69D8477DE4 : Data souborového systému GPT Linux.
933AC7E1-2EB4-4F13-B844-0E14E2AEF915 : oddíl GPT / domov.

3B8F8425-20E0-4F3B-907F-1A25A76F98E8 : oddíl GPT / srv (data serveru).
Struktury
Obsah adresáře Propojený seznam , hashovaný B-strom
Přidělení souborů Rozsahy / bitmapa
Špatné bloky Stůl
Limity
Max. velikost svazku 1 EiB (pro velikost bloku 4 KiB)
Max. velikost souboru 16 TiB (pro velikost bloku 4 KiB)
Max. počet souborů 4 miliardy (specifikováno v době vytvoření souborového systému)
Max. délka názvu souboru 255 bajtů
Povolené znaky v názvech souborů Všechny bajty kromě NUL ('\ 0') a '/' a speciálních názvů souborů "." a „..“, která nejsou zakázána, ale jsou vždy používána pro zvláštní účel.
Funkce
Zaznamenaná data modifikace (mtime), úprava atributu (ctime), přístup (atime), odstranění (dtime), vytvoření (crtime)
Časové období 14. prosince 1901 - 10. května 2446
Rozlišení data Nanosekunda
Vidlice Ne
Atributy acl, bh, bsddf, commit = nrsec, data = deník, data = objednaná, data = zpětný zápis, delalloc, rozsahy, journal_dev, mballoc, minixdf, noacl, nobh, nodelalloc, noextents, nomballoc, nombcache, nouser_xattr, oldalloc , orlov , uživatel_xattr
Oprávnění systému souborů POSIX , POSIX ACL
Transparentní komprese Ne
Transparentní šifrování Ano
Deduplikace dat Ne
jiný
Podporované operační systémy

Ext4 deníku systém souborů nebo čtvrtý rozšířený souborový systém je žurnálování souborový systém pro Linux , vyvinutý jako nástupce ext3 .

ext4 byla původně řada zpětně kompatibilních rozšíření na ext3, mnoho z nich původně vyvinutých Cluster File Systems pro souborový systém Luster v letech 2003 až 2006, mělo rozšířit limity úložiště a přidat další vylepšení výkonu. Jiní vývojáři jádra Linuxu se však z důvodu stability postavili proti přijímání rozšíření na ext3 a navrhli rozdělit zdrojový kód ext3, přejmenovat jej na ext4 a provést tam veškerý vývoj, aniž by to ovlivnilo stávající uživatele ext3. Tento návrh byl přijat a dne 28. června 2006 Theodore Ts'o , správce ext3, oznámil nový plán vývoje pro ext4.

Ve verzi 2.6.19 linuxového jádra byla zahrnuta předběžná vývojová verze ext4. Dne 11. října 2008 byly opravy, které označují ext4 jako stabilní kód, sloučeny do úložišť zdrojového kódu Linux 2.6.28, což označuje konec vývojové fáze a doporučuje přijetí ext4. Kernel 2.6.28 obsahující souborový systém ext4 byl konečně vydán 25. prosince 2008. Dne 15. ledna 2010 společnost Google oznámila, že upgraduje svou infrastrukturu úložiště z ext2 na ext4. Dne 14. prosince 2010 Google také oznámil, že v systému Android 2.3 použije místo YAFFS ext4 .

Přijetí

ext4 je výchozí systém souborů pro mnoho distribucí Linuxu, včetně Debian a Ubuntu .

Funkce

Velký souborový systém
Souborový systém ext4 podporuje svazky o velikosti až 1 exbibyte (EiB) a jednotlivé soubory o velikosti až 16 tebibytů (TiB) se standardní velikostí bloku 4 KiB . Maximální limity velikosti souborů, adresářů a souborových systémů rostou alespoň úměrně s velikostí bloku souborového systému až do maximální velikosti bloku 64 KiB, která je k dispozici na procesorech ARM a PowerPC / Power ISA .
Rozsahy
Rozsahy nahrazují tradiční blokové mapovací schéma používané ext2 a ext3. Rozsahem je řada souvislých fyzických bloků, které zlepšují výkon velkých souborů a snižují fragmentaci. Jeden rozsah v ext4 může mapovat až 128  MiB souvislého prostoru s velikostí bloku 4 KiB. Přímo v inode mohou být uloženy čtyři rozsahy . Pokud soubor obsahuje více než čtyři oblasti, zbytek oblastí je indexován ve stromu .
Zpětná kompatibilita
ext4 je zpětně kompatibilní s ext3 a ext2 , což umožňuje připojit ext3 a ext2 jako ext4. Tím se mírně zlepší výkon, protože některé nové funkce implementace ext4 lze také použít s ext3 a ext2, jako je například nový algoritmus přidělení bloku, aniž by to ovlivnilo formát na disku.
ext3 je částečně dopředu kompatibilní s ext4. Prakticky se ext4 nelze připojit jako souborový systém ext3 po vybalení z krabice, pokud se některé nové funkce jsou zakázány při jejím vytváření, jako je ^extent , ^flex_bg , ^huge_file , ^uninit_bg , ^dir_nlink a ^extra_isize .
Trvalá předběžná alokace
ext4 může předem přidělit místo na disku souboru. Aby to bylo možné provést na většině souborových systémů, byly by do souboru po vytvoření zapsány nuly. V ext4 (a některých dalších souborových systémech, jako je XFS ) fallocate() , lze použít nové systémové volání v linuxovém jádře. Přidělený prostor by byl zaručený a pravděpodobně souvislý. Tato situace má aplikace pro streamování médií a databáze.
Zpožděné přidělení
ext4 používá výkonovou techniku ​​zvanou allocate-on-flush , známou také jako zpožděná alokace . To znamená, že ext4 zpožďuje alokaci bloku, dokud nejsou data vyprázdněna na disk; na rozdíl od toho některé souborové systémy přidělují bloky okamžitě, i když data jdou do mezipaměti pro zápis. Zpožděné přidělení zlepšuje výkon a snižuje fragmentaci efektivním přidělováním většího množství dat najednou.
Neomezený počet podadresářů
ext4 neomezuje počet podadresářů v jednom adresáři, s výjimkou omezení vlastní velikosti samotného adresáře. (V ext3 může mít adresář maximálně 32 000 podadresářů.) Aby bylo možné umožnit větší adresáře a trvalý výkon, ext4 v Linuxu 2.6.23 a novějších standardně zapíná indexy HTree (specializovaná verze B-stromu ) ve výchozím nastavení, což umožňuje adresářům až přibližně 10–12 milionů položek, které mají být uloženy v 2úrovňovém indexu HTree a 2 GB omezení velikosti adresáře pro velikost bloku 4 KiB, v závislosti na délce názvu souboru. V systému Linux 4.12 a novějších tato funkce umožňovala tříúrovňové HTree a velikosti adresářů přes 2 GB, což umožnilo přibližně 6 miliard položek v jednom adresáři. largedir
Kontrolní součty deníku
ext4 používá kontrolní součty v žurnálu ke zlepšení spolehlivosti, protože žurnál je jedním z nejpoužívanějších souborů na disku. Tato funkce má vedlejší výhodu: může bezpečně zabránit čekání I / O disku během žurnálování, což mírně zvyšuje výkon. Kontrolní součet deníku byl inspirován výzkumným článkem z University of Wisconsin s názvem IRON File Systems (konkrétně oddíl 6 s názvem „transakční kontrolní součty“) s úpravami v rámci implementace složených transakcí prováděných souborovým systémem IRON (původně navržený Samem Naghshineh na summitu RedHat).
Kontrolní součet metadat
Od vydání linuxového jádra 3.5 v roce 2012
Rychlejší kontrola souborového systému
V ext4 jsou nepřidělené skupiny bloků a oddíly tabulky inode označeny jako takové. Díky tomu je e2fsck může úplně přeskočit a výrazně zkracuje čas potřebný ke kontrole systému souborů. Linux 2.6.24 implementuje tuto funkci.
fsck časová závislost na počtu inodů ( ext3 vs. ext4)
Multiblokový alokátor
Když se ext3 připojí k souboru, zavolá alokátor bloků, jednou pro každý blok. V důsledku toho, pokud existuje více souběžných zapisovačů , mohou se soubory na disku snadno fragmentovat . Ext4 však používá zpožděnou alokaci, což jí umožňuje ukládat data do vyrovnávací paměti a přidělovat skupiny bloků. V důsledku toho může multiblokový alokátor lépe rozhodovat o souvislém přidělování souborů na disku. Multiblokový alokátor lze použít také při otevírání souborů v režimu O_DIRECT. Tato funkce nemá vliv na formát disku.
Vylepšená časová razítka
Jak se počítače obecně zrychlují a jak se Linux stále více používá pro kritické aplikace, granularita druhých časových značek se stává nedostatečnou. K vyřešení tohoto problému poskytuje ext4 časová razítka měřená v nanosekundách . Kromě toho se k nejvýznamnějším bitům sekundového pole časových známek přidají 2 bity pole rozšířeného časového razítka, aby se problém roku 2038 odložil o dalších 408 let.
ext4 také přidává podporu pro časová razítka doby vytvoření. Ale jak zdůrazňuje Theodore Ts'o , i když je snadné přidat do pole inode další pole s datem vytvoření (což technicky umožňuje podporu těchto časových značek v ext4), je obtížnější upravit nebo přidat nezbytná systémová volání , jako stat () (což by pravděpodobně vyžadovalo novou verzi) a různé knihovny, které na nich závisí (jako glibc ). Tyto změny budou vyžadovat koordinaci mnoha projektů. Proto je datum vytvoření uložené v ext4 aktuálně k dispozici pouze pro uživatelské programy v systému Linux prostřednictvím statx() rozhraní API.
Kvóty projektu
Podpora pro projektové kvóty byla přidána do linuxového jádra 4.4 dne 8. ledna 2016. Tato funkce umožňuje přiřadit limity diskových kvót konkrétnímu ID projektu. ID projektu souboru je 32bitové číslo uložené v každém souboru a je zděděno všemi soubory a podadresáři vytvořenými pod nadřazeným adresářem s přiřazeným ID projektu. To umožňuje přiřadit limity kvót konkrétním stromům podadresářů nezávisle na přístupových oprávněních k souborům, jako jsou kvóty uživatelů a projektů, které jsou závislé na UID a GID. I když je to podobné jako kvóta adresáře, hlavní rozdíl spočívá v tom, že stejné ID projektu lze přiřadit více adresářům nejvyšší úrovně a není striktně hierarchické.
Transparentní šifrování
Podpora transparentního šifrování byla do jádra Linuxu 4.1 přidána v červnu 2015.
Líná inicializace
Funkce lazyinit umožňuje vyčistit inode tabulky na pozadí a urychlit inicializaci při vytváření nového systému souborů ext4. Je k dispozici od roku 2010 v linuxovém jádře verze 2.6.37.
Napište bariéry
ext4 ve výchozím nastavení povoluje bariéry proti zápisu. Zajišťuje, aby byla metadata systému souborů správně zapsána a uspořádána na disk, i když mezipaměti pro zápis ztratí energii. To je spojeno s náklady na výkon, zejména u aplikací, které intenzivně používají fsync nebo vytvářejí a odstraňují mnoho malých souborů. U disků s mezipamětí pro zápis na baterii může deaktivace bariér (volba 'bariéra = 0') bezpečně zlepšit výkon.

Omezení

V roce 2008 uvedl hlavní vývojář souborových systémů ext3 a ext4 Theodore Ts'o , že ačkoli má ext4 vylepšené funkce, nejde o zásadní pokrok, využívá starou technologii a je mezerou. Ts'o věří, že Btrfs je tím lepším směrem, protože „nabízí vylepšení škálovatelnosti, spolehlivosti a snadnosti správy“. Btrfs má také „řadu stejných návrhových nápadů, jaké měl reiser3 / 4 “. Ext4 však nadále získával nové funkce, jako je šifrování souborů a kontrolní součty metadat.

Systém souborů ext4 nerespektuje atribut souboru „zabezpečené odstranění“ , který má po odstranění způsobit přepsání souborů. V roce 2011 byla navržena oprava implementující bezpečné mazání, ale nevyřešila problém citlivých dat končících v deníku souborového systému.

Zpožděné přidělení a potenciální ztráta dat

Protože zpožděná alokace mění chování, na které se programátoři spoléhají s ext3, představuje tato funkce další riziko ztráty dat v případech, kdy systém zhroutí nebo ztratí energii před zapsáním všech dat na disk. Z tohoto důvodu ext4 v jádře verze 2.6.30 a novější automaticky řeší tyto případy jako ext3.

Typickým scénářem, ve kterém k tomu může dojít, je program nahrazující obsah souboru bez vynucení zápisu na disk pomocí fsync . Existují dva běžné způsoby nahrazení obsahu souboru v systémech Unix:

  • fd=open("file", O_TRUNC); write(fd, data); close(fd);
V takovém případě je existující soubor v době otevření zkrácen (kvůli O_TRUNC příznaku), poté jsou zapsána nová data. Vzhledem k tomu, že zápis může nějakou dobu trvat, existuje možnost ztráty obsahu iu ext3, ale obvykle velmi malého. Protože však ext4 může zpozdit zápis dat souborů o dlouhou dobu, je tato příležitost mnohem větší.
Může nastat několik problémů:
  1. Pokud zápis neproběhne úspěšně (může to být způsobeno chybovými podmínkami v programu pro zápis nebo vnějšími podmínkami, jako je například plný disk), dojde ke ztrátě původní i nové verze souboru a soubor může být poškozen, protože byla napsána pouze jeho část.
  2. Pokud jiné soubory přistupují k souboru během jeho psaní, zobrazí se poškozená verze.
  3. Pokud mají ostatní procesy soubor otevřený a neočekávají změnu jeho obsahu, může dojít k jejich selhání. Jedním pozoruhodným příkladem je soubor sdílené knihovny, který je mapován do spuštěných programů.
Kvůli těmto problémům se často dává přednost tomuto idiomu před výše uvedeným:
  • fd=open("file.new"); write(fd, data); close(fd); rename("file.new", "file");
Je vytvořen nový dočasný soubor („file.new“), který zpočátku obsahuje nový obsah. Pak se nový soubor přejmenuje na starý. Nahrazení souborů rename() voláním je podle standardů POSIX zaručeně atomické - tj. Buď starý soubor zůstane, nebo je přepsán novým. Protože výchozí "objednaný" režim žurnálování ext3 zaručuje, že data souboru budou zapsána na disk před metadaty, zaručuje tato technika, že na disku přetrvává buď starý, nebo nový obsah souboru. Zpožděná alokace ext4 narušuje toto očekávání, protože zápis souboru může být odložen o dlouhou dobu a přejmenování se obvykle provádí dříve, než se nový obsah souboru dostane na disk.

Častější používání fsync() ke snížení rizika pro ext4 by mohlo vést k penalizaci výkonu na souborových systémech ext3 připojených s data=ordered příznakem (výchozí nastavení u většiny distribucí Linuxu). Vzhledem k tomu, že oba souborové systémy budou nějakou dobu používány, to vývojářům aplikací koncových uživatelů komplikuje záležitosti. V reakci na to ext4 v linuxových jádrech 2.6.30 a novějších detekuje výskyt těchto běžných případů a vynutí okamžité alokaci souborů. Za malou cenu výkonu to poskytuje sémantiku podobnou objednanému režimu ext3 a zvyšuje pravděpodobnost, že kterákoli verze souboru havárii přežije. Toto nové chování je ve výchozím nastavení povoleno, ale lze ho deaktivovat pomocí možnosti připojení „noauto_da_alloc“.

Nové opravy se staly součástí jádra hlavní řady 2.6.30, ale různé distribuce se rozhodly je backportovat na 2.6.28 nebo 2.6.29.

Tyto opravy zcela nezabrání potenciální ztrátě dat ani vůbec nepomohou s novými soubory. Jediným způsobem, jak být v bezpečí, je psát a používat software, který fsync() funguje, když to potřebuje. Problémy s výkonem lze minimalizovat omezením důležitých zápisů na disk, které se musí fsync() vyskytovat méně často.

Implementace

Zjednodušená struktura linuxového jádra: ext4 je implementován mezi virtuálním souborovým systémem linuxového jádra a generickou blokovou vrstvou.

Virtuální souborový systém Linuxu je subsystém nebo vrstva uvnitř jádra Linuxu. Je to výsledek velmi vážného pokusu o integraci více souborových systémů do uspořádané jediné struktury. Klíčovou myšlenkou, která sahá až do průkopnické práce zaměstnanců Sun Microsystems v roce 1986, je abstrahovat tu část souborového systému, která je společná pro všechny souborové systémy, a dát tento kód do samostatné vrstvy, která volá podkladový konkrétní soubor systémy pro skutečnou správu dat.

Všechna systémová volání související se soubory (nebo pseudo soubory) jsou směrována do virtuálního systému souborů systému Linux pro počáteční zpracování. Tyto výzvy, které pocházejí z uživatelských procesů, jsou standardní POSIX volání, jako například open , read , write , lseek atd

Kompatibilita s Windows a Macintosh

V současné době má ext4 plnou podporu pro operační systémy jiné než Linux.

Windows mají přístup k ext4 od Windows 10 Insider Preview Build 20211. Je to možné díky Windows Subsystem pro Linux (WSL), který byl představen s Windows 10 Anniversary Update (verze 1607) 2. srpna 2016. WSL je k dispozici pouze v 64bitových verzích Windows 10 od verze 1607. Je k dispozici také v systému Windows Server 2019. Velké změny architektury WSL přišly s vydáním WSL 2 12. června 2019. WSL 2 vyžaduje Windows 10 verze 1903 nebo vyšší, s verzí 18362 nebo vyšší, pro systémy x64 a verze 2004 nebo vyšší, s verzí 19041 nebo vyšší, pro systémy ARM64.

Paragon nabízí svůj komerční produkt Linux File Systems pro Windows, který umožňuje čtení a zápis pro ext2 / 3/4 na Windows 7 SP1 / 8 / 8.1 / 10 a Windows Server 2008 R2 SP1 / 2012/2016.

macOS má plnou schopnost čtení a zápisu ext2 / 3/4 prostřednictvím extFS pro Mac od společnosti Paragon Software, což je komerční produkt. Svobodný software, jako je ext4fuse, má podporu jen pro čtení s omezenou funkčností.

Viz také

Reference

externí odkazy