ext4

naplózó fájlrendszer Linuxhoz


Az ext4 (fourth extended file system) naplózó fájlrendszer Linuxhoz, az ext3 utóda.

ext4 (fourth extended file system)
FejlesztőTheodore Ts'o et al.
Partícióazonosító0x83
Struktúra
KönyvtárszerkezetH-fa, táblázat
Fájlszerkezetbitkép (szabad hely), táblázat (metaadatok)
Hibásszektor-szerkezettáblázat
Korlátok
Maximális fájlméreta fájlrendszer mérete
Maximális fájlszám64 000
Fájlnév maximális hossza255 B
Maximális kötetméret1 EiB
Tiltott karakterek a fájlnevekben\0 (NULL) és „/”
Képességek
Dátumhatárok1901. december 14. – 2514. április 25.
Dátumfelbontás1 ns
Támogatott operációs rendszerekLinux

Az ext4 eredetileg az ext3 visszafelé kompatibilis bővítéseinek sora volt, melyek nagy részét a Cluster File Systems készítette a Lustre fájlrendszerhez 2003–2006 közt a tárhelyhatárok növelésére és más teljesítményjavításokhoz.[1] Azonban más Linux-mag-fejlesztők stabilitási okokból nem fogadták el a kiterjesztéseket,[2] és javasolták az ext3-kód leágazását, annak ext4-re való átnevezését és az ott történő fejlesztéseket a meglévő ext3-használók érintése nélkül. Ezt elfogadták, és 2006. június 28-án Theodore Ts'o, az ext3 karbantartója bejelentette az ext4 tervét.[3]

Az ext4 előzetes verzióját tartalmazta a Linux 2.6.19.[4] 2008. október 11-én az ext4-et stabilnak jelölő változtatások kerültek a Linux 2.6.28 repozitóriumokba,[5] az ext4 fejlesztése befejeződött, bevezetése ajánlott lett. E verzió 2008. december 25-én jelent meg.[6] 2010. január 15-én a Google közölte, hogy tárhely-infrastruktúráját ext2-ről ext4-re frissíti.[7] 2010. december 14-én azt is közölte, hogy az Android 2.3 YAFFS helyett ext4-et használ.[8]

Használat szerkesztés

Az ext4 számos Linux-disztribúció, például a Debian és az Ubuntu alapértelmezett fájlrendszere.[9]

Jellemzők szerkesztés

 
Az fsck időfüggése inode-számtól (ext3 és ext4 összehasonlítása)
  • Nagy fájlrendszer: az ext4 elvileg 64 ZiB-os köteteket és 16 TiB-os fájlokat is képes támogatni 4 KiB-os blokkmérettel, 64 KiB-os csoportokkal pedig akár 1 YiB-os köteteket is támogathat, de a formátum korlátai miatt 1 EiB a gyakorlati felső határ.[10] A maximális fájl-, könyvtár- és fájlrendszerméret legalább a fájlrendszerblokkmérettel arányosan nő az ARM és PowerPC/Power ISA CPU-kon elérhető 64 KiB-os blokkméretig.
  • Extentek: Az ext2 és 3 által használt blokkhozzárendelések helyett az ext4-ben extentek vannak. Ezek összefüggő fizikai blokkokból álló tartományok, javítva a teljesítményt nagy fájloknál, és csökkentve a töredezettséget. Egy extent az ext4-ben legfeljebb 128 MiB lehet 4 KiB blokkmérettel.[1] Az inode közvetlenül 4 extentet tárolhat. Ha ennél többől áll egy fájl, a többi indexelése faszerkezetben történik.[11]
  • Visszafelé kompatibilitás:
    • Az ext4 kompatibilis az ext3-mal és az ext2-vel, lehetővé téve az ext3- és ext2-kötetek ext4-kénti csatlakoztatását. Ez kissé javítja a teljesítményt, mivel az ext4 egyes új funkciói használhatók ext3-mal és 2-vel, mint például az új blokkhozzárendelő algoritmus, formátumváltoztatás nélkül.
    • Az ext3 részben kompatibilis az ext4-gyel. Az ext4 nem csatlakozik ext3-ként rögtön, kivéve egyes funkciók (például ^extent, ^flex_bg, ^huge_file, ^uninit_bg, ^dir_nlink és az ^extra_isize) létrehozáskori letiltásával.[12]
  • Állandó előallokáció: Az ext4 előre hozzárendelhet egy fájlhoz tárhelyet. Ehhez a fájlhoz 0-k írandók a létrehozáskor. Az ext4-ben és egyes más fájlrendszerekben, például az XFS-ben a fallocate() használható. A terület-hozzárendelés biztos, a terület valószínűleg folytonos lesz. Ez adatfolyamoknál és adatbázisokban használatos.
  • Késleltetett terület-hozzárendelés: Az ext4 ürítéskori hozzárendeléssel (más néven késleltetett hozzárendelés) is rendelkezik. Ez azt jelenti, hogy az adat meghajtóra helyezéséig az ext4 késlelteti a hozzárendelést, ezzel szemben egyes fájlrendszerek azonnal hozzárendelnek blokkokat az adatokhoz, akkor is, ha írógyorsítótárba kerül az adat. Ez javítja a teljesítményt és csökkenti a töredezettséget több adat egyidejű hozzárendeelésével.
  • Korlátlan számú almappa: az ext4 nem korlátozza egy mappa almappáinak számát a mappa mérethatárain túl (ext3-ban egy mappában legfeljebb 32 000 almappa lehetett).[13] A nagyobb mappák melletti változatlan teljesítményhez az ext4 a Linux 2.6.23-tól H-fát (a B-fa speciális változata) használ, lehetővé téve 10-12 millió bejegyzéses mappák 2 szintű H-fában tárolását és 2 GB-os mappamérethatárt 4 KiB-os blokkok esetén, fájlnévtől függően. A Linux 4.12-ben megjelent a largedir funkcióval a 3 szintű H-fa és 2 GB feletti mappaméret, 6 milliárd bejegyzést lehetővé téve egy mappában.
  • Napló-ellenőrzőösszegek: Az ext4 ellenőrző összegeket használ[14] a naplóban a megbízhatóság javítására, hiszen ez az egyik leggyakrabban használt fájl. Ez ezenkívül elkerüli az I/O-várakozást naplózáskor, javítva a teljesítményt. A napló-ellenőrzőösszeget a Wisconsini Egyetemben megjelent IRON File Systems című cikk ihlette[15] (ezen belül a 6. szakasz, melynek címe „Transaction checksums”), a megvalósításban az IRON fájlrendszertől kissé eltérve (melyet eredetileg Sam Naghshineh javasolt a RedHat-találkozón).
  • Metaadat-ellenőrzőösszegek (a Linux 3.5 (2012) óta)[16][17]
  • Gyorsabb fájlrendszer-ellenőrzés: az ext4-ben az üres blokkcsoportok és szakaszok ekként vannak jelölve, lehetővé téve az e2fsck-nak ezek kihagyását és a fájlrendszer-ellenőrzéshez szükséges idő csökkenését. Ez a Linux 2.6.24-ben jelent meg.
  • Több blokk hozzárendelése: Ha az ext3-ban egy fájl megnő, a blokkhozzárendelést blokkonként hívja meg, így ha több egyidejű írás is van, a fájlok könnyen töredezhetnek. Az ext4 azonban késleltetett hozzárendelést használ, lehetővé téve az adatpufferelést és blokkcsoportok hozzárendelését. Így jobban dönthet a hozzárendelő a fájlok folytonos hozzárendelése kapcsán. Ez használható ezenkívül O_DIRECT módban nyitott fájlokkal, és nem változtatja meg a meghajtó formátumát.
  • Jobb időbélyegzők:
    • A gyorsabb számítógépek és a Linux egyre fontosabb alkalmazásai miatt a másodpercalapú időbélyegzők nem elegendőek, ezt az ext4 nanoszekundum-alapú időbélyegzővel oldja meg. Ezenkívül 2 bit került hozzá a másodpercek legértékesebb bitjéhez a 2038-as probléma elkerülésére további 408 évre.[18]
    • Az ext4 ezenkívül a létrehozási idő bélyegzőit is támogatja. Azonban ahogy Theodore Ts'o említette, bár könnyű hozzáadni létrehozásdátum-mezőt az inode-hoz (lehetővé téve ezek támogatását ext4-ben), nehezebb a megfelelő rendszerhívások (például a stat) és az ezeken alapuló könyvtárak (például a glibc) hozzáadását vagy módosítását. Ezek számos projekt koordinálását igénylik.[19] Így az ext4 által tárolt létrehozási idő csak statx API-val rendelkező programokon érhető el Linuxon.[20]
  • Projektkvóták: A Linux 4.4-ben (2016. január 8.) jelent meg a projektkvóták támogatása. Ez lehetővé teszi tárhelykvóták adott projektazonosítóhoz rendelését. Egy fájl projektazonosítója a fájlon tárolt 32 bites szám, melyet minden adott projektazonosítóval rendelkező szülőkönyvtár fájljai és alkönyvtárai örökölnek. Ez lehetővé teszi kvóták adott könyvtárfához rendelését függetlenül a fájlhozzáférési engedélyektől, például beállíthatók UID-en és GID-en alapuló kvóták. Bár ez hasonlít a könyvtárkvótákra, a különbség az, hogy azonos projektazonosítója lehet több felső szintű könyvtárnak, így az nem szigorúan hierarchikus.[21]
  • Átlátszó titkosítás: megjelent a Linux 4.1-ben (2015. június).[22]
  • „Lusta” inicializáció: a lazyinit lehetővé teszi az inode-táblák háttérben való tisztítását, felgyorsítva új fájlrendszer létrehozásakor. az inicializációt.[23] A Linux 2.6.37-ben (2010) jelent meg.[24]
  • Íráshatárok: ezek biztosítják a fájlrendszeri metaadatok megfelelő írását és rendszerezését. Ez teljesítménybeli költséget okoz, különösen fsyncet sokat használó, illetve sok kis fájlt létrehozó és törlő alkalmazások esetén. Akkumulátoros írógyorsítótár esetén a határok letiltása („barrier=0”) biztonságosan javíthatja a teljesítményt.[25]

Korlátok szerkesztés

2008-ban az ext3 és ext4 fő fejlesztője, Theodore Ts'o kijelentette, hogy bár az ext4-nek számos jobb funkciója van, nem jelentős újítás: régi technológiát használ, és időleges megoldás. Szerinte a Btrfs jobb, mivel „jobban méretezhető, megbízhatóbb, és könnyebben kezelhető”.[26] A Btrfs-ben ezenkívül „számos hasonló ötlet van a reiser3/4-hez”.[27] Azonban az ext4 új funkciókat kapott, például titkosítást és metaadat-ellenőrzőösszegeket.

Az ext4 nem használja a „biztonságos törlés” attribútumot, mely törléskor a fájlok felülírását okozta volna. Egy ilyet tartalmazó változtatást javasoltak 2011-ben, de nem oldotta meg az érzékeny adatok naplóba kerülését.[28]

Késleltetett hozzárendelés és lehetséges adatvesztés szerkesztés

Mivel a késeltetett hozzárendelés megváltoztatja az ext3-hoz képest a viselkedést, e funkció további lehetséges adatvesztést okozhat, amennyiben a rendszer összeomlik vagy leáll az összes adat kiírása előtt. Így az ext4 a 2.6.30 verziótól ez eseteket az ext3-hoz hasonlóan kezeli.

Általában ez egy fájl tartalmát a módosítások kiírásának fsynckel való kényszerítése nélkül módosító program esetén fordul elő. Két gyakori módja van egy fájl módosításának Unix-alapú rendszeren:[29]

fd=open("file", O_TRUNC); write(fd, data); close(fd);

Ez esetben egy létező fájl nyitáskor megszűnik (az O_TRUNC paraméter miatt), majd új adatok kiírása történik. Mivel az írás eltarthat némi ideig, lehetséges ext3-mal is az adatvesztés, de ez ritka. Azonban mivel az ext4 képes hosszú ideig késleltetni a kiírást, ez gyakoribb lehet ekkor.
Számos probléma történhet:
  1. Ha az írás nem sikerül (például az íróprogram hibái vagy külső körülmények, például teli meghajtó miatt), mindkét fájlverzió elvész, és a fájl sérülhet, mivel csak egy részét írta ki a program.
  2. Ha más folyamatok férnek a fájlhoz annak írása közben, sérült változatot látnak.
  3. Ha más folyamatokban nyitva van a fájl, és nem várják annak megváltozását, ezek összeomolhatnak. Példa erre egy megosztott könyvtári fájl, mely futó programokba van leképezve.

Emiatt gyakran az alábbit használják inkább:

fd=open("file.new"); write(fd, data); close(fd); rename("file.new", "file");

Új ideiglenes fájl jön létre file.new néven az új tartalmakkal, majd annak az átnevezése történik meg a régi névre. A rename() révén történő felülírás atomiságát a POSIX szabványok biztosítják – vagyis vagy megmarad a régi fájl, vagy felülírja az új. Az ext3 alapértelmezett „rendezett” naplózása biztosítja, hogy a fájladatok a metaadatok előtt íratnak ki, biztosítva, hogy a régi és az új fájlok valamelyike megmarad. Az ext4 késleltetett hozzárendelése ezen elvárást nem teljesíti: a fájlírás hosszan késleltethető, és az átnevezés az új fájl tartalmainak kiírása előtt történik.

Az fsync() kockázatcsökkentésért való gyakoribb használata a legtöbb Linux-disztribúción alapértelmezett data=ordered paraméterrel csatlakoztatott ext3 fájlrendszereken teljesítménycsökkenést okozhat. Mivel mindkét fájlrendszer használatban lesz bizonyos időre, ez bonyolítja a fejlesztők feladatait. Az ext4 a Linux 2.6.30-tól észleli e gyakori eseteket, és kényszeríti a fájlok azonnali hozzárendelését. Ez az ext3 rendezett módjához hasonló szemantikát biztosít, és növeli az esélyét, hogy az egyik fájlváltozat túléli az összeomlást. Ez az új viselkedés az alapértelmezett, de letiltható a „noauto_da_alloc” beállítással.[29]

E változtatások a fő mag 2.6.30 verziójában vannak jelen, de egyes disztribúciók 2.6.28-on és 2.6.29-en is működőképessé tették.[30]

Ezek nem gátolják meg teljesen az adatvesztést, vagy segítenek az új fájlokkal. Az egyetlen biztonságos mód olyan szoftverek írása és használata, mely szükség esetén fsyncet használ. A teljesítményproblémák a fsyncet igénylő írási műveletek számának korlátozásával oldhatók meg.[31]

Megvalósítás szerkesztés

 
A Linux-mag egyszerűsített szerkezete: az ext4 a virtuális fájlrendszer és a blokkréteg közt van

A Linux-mag virtuális fájlrendszere a Linux-magon belüli alrendszer, több fájlrendszer egy szerkezetbe való integrálására tett kísérlet eredménye. A Sun Microsystems alkalmazottainak 1986-ban végzett munkájára visszavezethető ötlet[32] a minden fájlrendszerben közös rész kiemelése és önálló rétegbe helyezése, mely a fájlrendszereket hívja az adat tényleges kezeléséhez.

Minden fájlhoz vagy álfájlhoz tartozó rendszerhívás a Linux rendszermag virtuális fájlrendszeréhez kerül feldolgozásra. Ezek szabványos POSIX-hívások, például open, read, write, lseek stb.

Kompatibilitás Windowszal és macOS-szel szerkesztés

Jelenleg az ext4 teljes körűen támogatott Linuxon kívül is.

A Windows az ext4-hez a Windows 10 Build 20211 óta tud hozzáférni.[33][34][35] A 2016. augusztus 2-án a Windows 10 1607-es verziójában bevezetett Windows Subsystem for Linux (WSL) révén lehetséges ez. WSL is available only in 64-bit versions of Windows 10 from version 1607. Ezenkívül elérhető a Windows Server 2019-ben is. A WSL-architektúrában a WSL 2 2019. június 12-i kiadásával történt nagy változás.[36] A WSL 2 legalább Windows 10 Version 1903-at igényel (build 18362) x64-es, illetve legalább Version 2004-et (build 19041-től) ARM64-rendszerekre.[37]

A Paragon Linux File Systems for Windows nevű terméke[38] lehetővé teszi az ext2/3/4 írását-olvasását Windows 7 SP1-en, 8-on, 8.1-en, 10-en, Windows Server 2008 R2 SP1-en, 2012-n és 2016-on.

A macOS teljes ext2–4-írási/olvasási képességgel rendelkezik a kereskedelmi extFS for Mackel.[39] A szabad szoftverek, például az ext4fuse csak olvasást támogatnak korlátozott mértékben.

Jegyzetek szerkesztés

  1. a b The new ext4 filesystem: current status and future plans. Proceedings of the Linux Symposium. Red Hat, 2007. [2010. július 6-i dátummal az eredetiből archiválva]. (Hozzáférés: 2008. január 15.)
  2. Torvalds, Linus: extents and 48bit ext3. Linux kernel mailing list, 2006. június 9.
  3. Ts'o, Theodore: Proposal and plan for ext2/3 future development work. Linux kernel mailing list, 2006. június 28.
  4. Leemhuis, Thorsten. „Higher and further: The innovations of Linux 2.6.28 (page 2)”, Heise Online, 2008. december 23.. [2009. január 3-i dátummal az eredetiből archiválva] (Hozzáférés: 2010. január 9.) 
  5. ext4: Rename ext4dev to ext4. Linus' kernel tree. [2012. május 29-i dátummal az eredetiből archiválva]. (Hozzáférés: 2008. október 20.)
  6. Leemhuis, Thorsten. „Higher and further: The innovations of Linux 2.6.28”, Heise Online, 2008. december 23. 
  7. Paul, Ryan: Google upgrading to Ext4, hires former Linux Foundation CTO. Ars Technica , 2010. január 15.
  8. Android 2.3 Gingerbread to use Ext4 file system”, The H Open, 2010. december 14. 
  9. FileSystem in debian, 2019. szeptember 14.
  10. ext4 - High Level Design. kernel.org. (Hozzáférés: 2023. január 8.)
  11. Hal Pomeranz: Understanding EXT4 (Part 3): Extent Trees. SANS Digital Forensics and Incident Response Blog, 2011. március 28. [2019. augusztus 18-i dátummal az eredetiből archiválva].
  12. Mount of ext4 (created without extents) as ext3 fails on RH6.2. www.linuxquestions.org . (Hozzáférés: 2018. április 7.)
  13. Ext4 - Linux Kernel Newbies. kernelnewbies.org
  14. New ext4 features - Ext4. ext4.wiki.kernel.org
  15. IRON File Systems”, Kiadó: CS Dept, University of Wisconsin.  
  16. Ext4 Metadata Checksums - Ext4. ext4.wiki.kernel.org
  17. Linux_3.5 - Linux Kernel Newbies. kernelnewbies.org
  18. ext4: Fix handling of extended tv_sec. Linux-stable kernel tree. (Hozzáférés: 2017. február 14.)
  19. Ts'o, Theodore: Re: creation time stamps for ext4 ?, 2006. október 5.
  20. Edge, Jake: Extending statx(), 2017. március 31.
  21. Li, Xi: Ext4 encryption, 2016. január 12.
  22. Ts'o, Theodore: Ext4 encryption, 2015. április 8.
  23. Ext4 Filesystem - Thomas-Krenn-Wiki. www.thomas-krenn.com
  24. kernel/git/torvalds/linux.git - Linux kernel source tree. git.kernel.org
  25. Ext4 - ArchWiki. wiki.archlinux.org
  26. Paul, Ryan: Panelists ponder the kernel at Linux Collaboration Summit. Ars Technica , 2009. április 14. (Hozzáférés: 2009. augusztus 22.)
  27. Theodore Ts'o (2008-08-01), "Re: reiser4 for 2.6.27-rc1"
  28. Corbet, Jonathan: Securely deleting files from ext4 filesystems, 2011. október 11.
  29. a b ext4 documentation in Linux kernel source, 2009. március 28.
  30. Ubuntu bug #317781 Long discussion between Ubuntu developers and Theodore Ts'o on potential data loss
  31. Thoughts by Ted blog entry, 12 March 2009 A blog posting of Theodore Ts'o on the subject
  32. Kleiman
  33. Brandon LeBlanc: Announcing Windows 10 Insider Preview Build 20211. Windows Blogs , 2020. szeptember 10. (Hozzáférés: 2021. május 25.)
  34. Pierre Boulay: Access Linux filesystems in Windows and WSL 2. Windows Command Line , 2020. szeptember 10. (Hozzáférés: 2021. május 25.)
  35. Get started mounting a Linux disk in WSL 2. Microsoft Docs . (Hozzáférés: 2021. május 25.)
  36. Craig Loewen: WSL 2 is now available in Windows Insiders. Windows Command Line , 2019. június 12. (Hozzáférés: 2021. május 25.)
  37. Windows Subsystem for Linux Installation Guide for Windows 10. Windows Docs . (Hozzáférés: 2021. május 25.)
  38. Linux File Systems for Windows. Paragon Software . (Hozzáférés: 2021. május 25.)
  39. extFS for Mac. Paragon Software . (Hozzáférés: 2021. május 25.)

Fordítás szerkesztés

Ez a szócikk részben vagy egészben az ext4 című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.

Kapcsolódó szócikkek szerkesztés

További információk szerkesztés