ext4

A Wikipédiából, a szabad enciklopédiából
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 (fourth extended file system) naplózó fájlrendszer Linuxhoz, az ext3 utóda.

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]