ext4
ext4 (fourth extended file system) | |
Fejlesztő | Theodore Ts'o et al. |
Partícióazonosító | 0x83 |
Struktúra | |
Könyvtárszerkezet | H-fa, táblázat |
Fájlszerkezet | bitkép (szabad hely), táblázat (metaadatok) |
Hibásszektor-szerkezet | táblázat |
Korlátok | |
Maximális fájlméret | a fájlrendszer mérete |
Maximális fájlszám | 64 000 |
Fájlnév maximális hossza | 255 B |
Maximális kötetméret | 1 EiB |
Tiltott karakterek a fájlnevekben | \0 (NULL) és „/” |
Képességek | |
Dátumhatárok | 1901. december 14. – 2514. április 25. |
Dátumfelbontás | 1 ns |
Támogatott operációs rendszerek | Linux |
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]- 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:
- 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.
- Ha más folyamatok férnek a fájlhoz annak írása közben, sérült változatot látnak.
- 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 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]- ↑ 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.)
- ↑ Torvalds, Linus: extents and 48bit ext3. Linux kernel mailing list, 2006. június 9.
- ↑ Ts'o, Theodore: Proposal and plan for ext2/3 future development work. Linux kernel mailing list, 2006. június 28.
- ↑ 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.)
- ↑ 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.)
- ↑ Leemhuis, Thorsten. „Higher and further: The innovations of Linux 2.6.28”, Heise Online, 2008. december 23.
- ↑ Paul, Ryan: Google upgrading to Ext4, hires former Linux Foundation CTO. Ars Technica , 2010. január 15.
- ↑ „Android 2.3 Gingerbread to use Ext4 file system”, The H Open, 2010. december 14.
- ↑ FileSystem in debian, 2019. szeptember 14.
- ↑ ext4 - High Level Design. kernel.org. (Hozzáférés: 2023. január 8.)
- ↑ 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].
- ↑ Mount of ext4 (created without extents) as ext3 fails on RH6.2. www.linuxquestions.org . (Hozzáférés: 2018. április 7.)
- ↑ Ext4 - Linux Kernel Newbies. kernelnewbies.org
- ↑ New ext4 features - Ext4. ext4.wiki.kernel.org
- ↑ „IRON File Systems”, Kiadó: CS Dept, University of Wisconsin.
- ↑ Ext4 Metadata Checksums - Ext4. ext4.wiki.kernel.org
- ↑ Linux_3.5 - Linux Kernel Newbies. kernelnewbies.org
- ↑ ext4: Fix handling of extended tv_sec. Linux-stable kernel tree. (Hozzáférés: 2017. február 14.)
- ↑ Ts'o, Theodore: Re: creation time stamps for ext4 ?, 2006. október 5.
- ↑ Edge, Jake: Extending statx(), 2017. március 31.
- ↑ Li, Xi: Ext4 encryption, 2016. január 12.
- ↑ Ts'o, Theodore: Ext4 encryption, 2015. április 8.
- ↑ Ext4 Filesystem - Thomas-Krenn-Wiki. www.thomas-krenn.com
- ↑ kernel/git/torvalds/linux.git - Linux kernel source tree. git.kernel.org
- ↑ Ext4 - ArchWiki. wiki.archlinux.org
- ↑ Paul, Ryan: Panelists ponder the kernel at Linux Collaboration Summit. Ars Technica , 2009. április 14. (Hozzáférés: 2009. augusztus 22.)
- ↑ Theodore Ts'o (2008-08-01), "Re: reiser4 for 2.6.27-rc1"
- ↑ Corbet, Jonathan: Securely deleting files from ext4 filesystems, 2011. október 11.
- ↑ a b ext4 documentation in Linux kernel source, 2009. március 28.
- ↑ Ubuntu bug #317781 Long discussion between Ubuntu developers and Theodore Ts'o on potential data loss
- ↑ Thoughts by Ted blog entry, 12 March 2009 A blog posting of Theodore Ts'o on the subject
- ↑ Kleiman
- ↑ Brandon LeBlanc: Announcing Windows 10 Insider Preview Build 20211. Windows Blogs , 2020. szeptember 10. (Hozzáférés: 2021. május 25.)
- ↑ Pierre Boulay: Access Linux filesystems in Windows and WSL 2. Windows Command Line , 2020. szeptember 10. (Hozzáférés: 2021. május 25.)
- ↑ Get started mounting a Linux disk in WSL 2. Microsoft Docs . (Hozzáférés: 2021. május 25.)
- ↑ 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.)
- ↑ Windows Subsystem for Linux Installation Guide for Windows 10. Windows Docs . (Hozzáférés: 2021. május 25.)
- ↑ Linux File Systems for Windows. Paragon Software . (Hozzáférés: 2021. május 25.)
- ↑ 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]- Az ext4 dokumentációja a Linux kódjában
- Theodore Ts'o gondolatai az ext4-ről, 2006. június 29.
- „ext4 online defragmentation” Archiválva 2019. december 30-i dátummal a Wayback Machine-ben. (a 2007-es ottawai Linux Symposium anyaga)
- „The new ext4 filesystem: current status and future plans” (a 2007-es ottawai Linux Symposium anyaga)
- Kernel Log: Ext4 completes development phase as interim step to btrfs, 2008. október 17.
- "Ext4 block and inode allocator improvements" Archiválva 2010. március 31-i dátummal a Wayback Machine-ben. (a 2008-as ottawai Linux Symposium anyaga)
- "Ext4: The Next Generation of Ext2/3 Filesystem"
- Ext4 (and Ext2/Ext3) Wiki
- Ext4 wiki a kernelnewbies.org oldalon
- Az ext4 és más fájlrendszerek natív Windows-portja CROSSMETA
- Ext2read: Windows-alkalmazás ext2–4-fájlok olvasására/másolására extent- és LVM2-támogatással.
- Ext2Fsd Nyílt forrású ext2–4 író/olvasó szoftver Windowshoz. Az ext4 a 0.50 verziótól támogatott.
- Ext4fuse nyílt forrású olvasható ext4-szoftver FUSE-hoz. (Mac OS X 10.5-től támogatja, MacFuse-ot használ)