ext4, ext3 a ext2 srozumitelně.
Co jsou linuxové souborové systémy, jak rozkládají soubory po disku, co chrání žurnál, na kterých funkcích a limitech dnes záleží a jak otevřít disk ext4 na Macu nebo na PC s Windows.
Naposledy ověřeno
Co jsou ext2, ext3 a ext4
ext2, ext3 a ext4 jsou druhý, třetí a čtvrtý rozšířený souborový systém (extended file system) – formáty, které Linux používá pro vlastní disky už přes třicet let. Souborový systém určuje, jak jsou na disku rozložené soubory, složky, názvy, oprávnění a data, aby je každý počítač, který formát zná, zase našel.
Dnes potkáš hlavně ext4. Formátují s ním disky Debian, Ubuntu i Raspberry Pi OS, je obvyklou volbou pro datový disk linuxového serveru a Google na něj v roce 2010 převedl telefony s Androidem. USB disk nebo SD karta připravená na Linuxu je skoro vždycky ext4.
Ty tři nejsou tři různé formáty, ale jedna rodina. Každá generace převzala rozložení disku té předchozí a přidala k němu, a proto dnešní linuxová jádra čtou i zapisují všechny tři jediným ovladačem ext4.
Stručná historie
- 1992
ext, rozšířený souborový systém
Rémy Card ho píše pro Linux 0.96c jako náhradu souborového systému Minix, se kterým Linux začínal a jehož limity na velikost disku a délku názvů už nestačily.
- 1993
ext2
Přepracování z ledna 1993 pro Linux 0.99 s nápady z Fast File System systému BSD: disk rozdělený do skupin bloků, oddělené časy přístupu, změny a úpravy. Zbytek desetiletí zůstává standardem Linuxu.
- 2001
ext3 přidává žurnál
ext3 Stephena Tweedieho se dostává do hlavního jádra s Linuxem 2.4.15 v listopadu 2001. Rozložení disku je stejné jako u ext2, takže z disku ext2 se stane ext3 přidáním žurnálu – jenže po pádu už není potřeba dlouhá kontrola celého disku.
- 2006
Začíná práce na ext4
Theodore Ts’o ohlašuje plán 28. června 2006 a staví na rozšířeních vyvinutých pro clusterový souborový systém Lustre. Vývojová verze ext4dev se objevuje v Linuxu 2.6.19.
- 2008
ext4 je prohlášen za stabilní
Linux 2.6.28, vydaný 25. prosince 2008, přináší extenty, 64bitová čísla bloků, odložené přidělování místa a časy s přesností na nanosekundy.
- 2013–2021
Kontrolní součty, šifrování, velikost písmen
Pozdější jádra přidávají inline data (3.8), kontrolní součty metadat (3.18), šifrování (4.1), složky nerozlišující velikost písmen (5.2), verity (5.4), rychlé commity (5.10) a orphan file (5.15).
Jak ext4 rozkládá disk
Bloky. ext4 přiděluje místo po blocích, obvykle po 4 KiB; velikost se volí při formátování a může být od 1 KiB do 64 KiB. I jednobajtový soubor zabere celý blok, pokud disk nepoužívá inline data.
Skupiny bloků. Disk je rozdělený do skupin bloků – při 4KiB blocích po 32 768 blocích, tedy 128 MiB. Každá skupina má dvě bitmapy, jednu pro obsazené bloky a jednu pro inody, a svou část tabulky inodů. Když data souboru leží blízko jeho inodu, hlava disku nemusí cestovat. Funkce flex_bg ukládá bitmapy a tabulky inodů několika skupin pohromadě, takže velký soubor může přes hranice skupin běžet v jednom kuse.
Superblok. První věc na disku po 1 KiB volného místa: jak je souborový systém velký, jakou má velikost bloku, které funkce používá a jestli byl čistě odpojený. Kopie leží v několika skupinách bloků, takže poškozený superblok jde obnovit ze zálohy.
Inody. Každý soubor a každá složka má jeden inode, standardně o 256 bajtech. Drží vlastníka, oprávnění, časy, velikost a to, kde leží data – všechno kromě názvu. Počet inodů se určí při formátování, takže disk plný drobných souborů může inody vyčerpat, i když má ještě volné místo.
Složky. Složka je zvláštní soubor, který přiřazuje názvům čísla inodů. Název může mít až 255 bajtů. Malé složky jsou prostý seznam, velké dostanou index, hašovaný strom (dir_index, „htree“), takže najít jeden název mezi sto tisíci znamená přečíst pár bloků, ne celou složku.
Extenty místo map bloků. ext2 a ext3 zapisují každý blok souboru zvlášť: dvanáct přímých ukazatelů v inodu, pak bloky plné ukazatelů, ukazatele na ně a ještě jednou ukazatele na ty. ext4 zapisuje úseky. Extent říká „tolik bloků od tohoto místa“, až 32 768 bloků (128 MiB při 4KiB blocích) v jednom záznamu. Čtyři extenty se vejdou přímo do inodu; delší a rozdrobenější soubor dostane strom extentů až o pěti úrovních. Velký souvislý soubor tak popíše pár záznamů místo tisíců.
Malé soubory můžou bydlet přímo v inodu. S funkcí inline_data se až 60 bajtů souboru uloží do samotného inodu a něco víc do jeho místa pro rozšířené atributy, aniž by zabral jediný blok.
Žurnál a co chrání
Změna souborového systému nikdy není jeden zápis. Vytvoření souboru sáhne na bitmapu, inode, složku a počítadlo v popisu skupiny. Když mezi dvěma z těch zápisů vypadne proud, zůstane disk napůl změněný – a ext2 to mohl zjistit jen kontrolou celého disku přes e2fsck, což na velkém disku trvalo dlouho.
ext3 a ext4 vedou žurnál: vyhrazené místo na disku, obvykle inode 8, kam se změny zapíšou dřív, než se provedou. Změna jde ve třech krocích. Nejdřív se nové bloky zapíšou do žurnálu. Pak záznam commit označí transakci za úplnou. Teprve potom se bloky zapíšou na svá skutečná místa – to je checkpoint. Když kdykoli vypadne proud, další připojení žurnál přehraje: transakce, které došly ke commitu, se provedou znovu, a co commit nemá, se zahodí. Souborový systém je za pár sekund zase konzistentní.
| Režim | Co jde přes žurnál | Po pádu |
|---|---|---|
data=ordered (výchozí) | Jen metadata, ale data souboru se zapíšou dřív, než se potvrdí metadata, která na ně ukazují. | Struktura je v pořádku; soubor, který se zrovna zapisoval, může obsahovat starší data. |
data=journal | Metadata i data souborů. | Nejbezpečnější a nejpomalejší: data, která došla ke commitu, tam jsou. |
data=writeback | Jen metadata, bez pořadí pro data. | Struktura je v pořádku, ale nedávno změněný soubor může ukazovat starý obsah. |
Žurnál není záloha. Drží strukturu souborového systému pohromadě a zaručí, co bylo potvrzené; nevrátí změnu, která byla zrovna na cestě, a neochrání před umírajícím diskem. ext4 umí zapisovat i rychlé commity (Linux 5.10): malé záznamy jen se změněnými metadaty mezi plnými commity, aby časté volání fsync bylo levnější.
Karta vytažená z Raspberry Pi za běhu je přesně tenhle případ. Její žurnál ještě drží potvrzené transakce, které nedošly na svá místa, a superblok hlásí „needs recovery“. Linux ho při dalším připojení přehraje; software, který kartu čte jinde, ho musí přehrát taky, jinak ukáže soubory tak, jak byly před těmi transakcemi.
ext2 vs ext3 vs ext4
| ext2 | ext3 | ext4 | |
|---|---|---|---|
| V Linuxu od | 1993 (0.99) | 2001 (2.4.15) | 2008 (2.6.28) |
| Žurnál | Ne | Ano | Ano, s rychlými commity od Linuxu 5.10 |
| Jak se zapisují bloky souboru | Mapy bloků | Mapy bloků | Extenty |
| Největší soubor | 2 TiB | 2 TiB | 16 TiB |
| Největší souborový systém | 16 TiB | 16 TiB | v praxi 1 EiB (64 bitů) |
| Časy | Sekundy, do roku 2038 (128bajtové inody) | Sekundy, do roku 2038 (128bajtové inody) | Nanosekundy, do roku 2446 |
| Indexované velké složky | Ne | Ano (dir_index) | Ano, tři úrovně s large_dir |
| Kontrolní součty metadat | Ne | Ne | Ano (metadata_csum) |
V praxi: na cokoli nového ext4. ext3 nemá na čerstvém disku důvod existovat a ext2 přežívá tam, kde žurnál nikdo nechce – na malém zaváděcím oddílu nebo na flash médiu, které se má zapisovat co nejméně. Disk ext3 jde převést na ext4 na místě, ale soubory, které už na něm byly, si mapy bloků nechají, dokud se nepřepíšou.
Funkce, které potkáš na skutečných discích
Disk ext nenese číslo verze, ale příznaky funkcí v superbloku a každý patří do jednoho ze tří druhů. Kompatibilní funkci může software, který ji nezná, přehlédnout. Kompatibilní jen pro čtení znamená, že takový software smí disk číst, ale ne na něj zapisovat. Nekompatibilní znamená, že na disk nesmí sáhnout vůbec. Díky tomu pravidlu starší nástroj novější disk odmítne, místo aby ho poškodil.
| Funkce | Co dělá | V Linuxu od |
|---|---|---|
extent | Soubory mapované extenty místo map bloků. | 2.6.28 |
64bit | Čísla bloků širší než 32 bitů, pro souborové systémy nad 16 TiB. | 2.6.28 |
flex_bg | Metadata několika skupin bloků pohromadě. | 2.6.28 |
metadata_csum | Kontrolní součet CRC32C u všech metadat, aby se poškození poznalo. | 3.18 |
metadata_csum_seed | Základ kontrolních součtů uložený v superbloku, aby šlo měnit UUID. | 4.4 |
inline_data | Drobné soubory uložené přímo v inodu. | 3.8 |
encrypt | Šifrování obsahu a názvů souborů po složkách. | 4.1 |
casefold | Složky, které v názvech nerozlišují velká a malá písmena. | 5.2 |
verity | Soubory jen pro čtení, jejichž obsah se ověřuje proti hašovacímu stromu. | 5.4 |
fast_commit | Malé záznamy žurnálu mezi plnými commity. | 5.10 |
orphan_file | Rychlejší evidence souborů smazaných, když jsou ještě otevřené. | 5.15 |
Kde je potkáš: dnešní mke2fs zapíná metadata_csum a 64bit automaticky a e2fsprogs 1.47 přidal orphan_file a metadata_csum_seed, které některé distribuce zase vypínají, aby disk přečetly i starší zavaděče. Obraz Raspberry Pi OS vzniká bez 64bit. Steam Deck formátuje microSD karty s casefold a Android používá encrypt.
Které funkce disk používá, zjistíš na Linuxu z jeho superbloku příkazem sudo dumpe2fs -h /dev/sdX1 na řádku „Filesystem features“.
Limity
| Velikost bloku | Skupina bloků | Největší soubor | Největší souborový systém (32 bitů) | Největší souborový systém (64 bitů) |
|---|---|---|---|---|
| 1 KiB | 8 MiB | 4 TiB | 4 TiB | 16 ZiB |
| 2 KiB | 32 MiB | 8 TiB | 8 TiB | 32 ZiB |
| 4 KiB (obvyklá) | 128 MiB | 16 TiB | 16 TiB | 64 ZiB |
| 64 KiB | 32 GiB | 256 TiB | 256 TiB | 1 YiB |
Čísla pro 64 bitů udávají, co formát dokáže adresovat; formát extentů a nástroje omezují skutečné souborové systémy zhruba na 1 EiB. Další limity, na které narazíš častěji:
- Název souboru nebo složky: 255 bajtů – u písem, která potřebují víc bajtů na znak, méně znaků.
- Pevné odkazy na jeden soubor: 65 000, takže v jedné složce může být nejvýš 64 998 podsložek.
- Časy: přesnost na nanosekundy, platné do května 2446 s 256bajtovými inody; 128bajtové inody končí v lednu 2038.
- Inody: pevně dané při formátování, jeden na soubor nebo složku, nejvýš zhruba čtyři miliardy.
Kontrola a oprava disku ext4
Kontrola a oprava souborových systémů ext je práce pro e2fsck z balíku e2fsprogs na Linuxu. Pracuje s diskem, který není připojený; spustit ho na připojeném souborovém systému ho může poškodit.
sudo dumpe2fs -h /dev/sdX1 # superblok: funkce, stav, poslední kontrola sudo e2fsck -fn /dev/sdX1 # úplná kontrola jen pro čtení: nahlásí, nic nemění sudo e2fsck -f /dev/sdX1 # úplná kontrola s opravami, před každou se zeptá sudo tune2fs -l /dev/sdX1 # tentýž přehled superbloku sudo mkfs.ext4 -L DATA /dev/sdX1 # nový souborový systém ext4 (smaže oddíl)
Místo /dev/sdX1 dosaď příslušný oddíl – vypíše je lsblk. Po nečistém vypnutí obvykle není co dělat: další připojení přehraje žurnál. Úplná kontrola má smysl, když Linux zapsal do superbloku chybu, když nesedí kontrolní součty nebo když byl disk v zařízení, které opakovaně padalo.
ext4 a jiné souborové systémy
| Souborový systém | Ochrana při pádu | Doma na | macOS | Windows |
|---|---|---|---|---|
| ext4 | Žurnál | Linux, Android | Ne | Ne |
| Btrfs | Copy-on-write, kontrolní součty i u dat | Linux (výchozí ve Fedoře) | Ne | Ne |
| XFS | Žurnál | Linuxové servery | Ne | Ne |
| APFS | Copy-on-write | Macy, iPhony | Ano | Ne |
| NTFS | Žurnál | Windows | Jen čtení | Ano |
| exFAT | Žádná | USB disky, SD karty, fotoaparáty | Ano | Ano |
Pro disk, který putuje mezi Linuxem, Macem a Windows bez instalace čehokoli, je společnou řečí exFAT – za cenu linuxových oprávnění, vlastníků, symbolických odkazů a jakékoli ochrany, když kabel vypadne uprostřed zápisu. ext4 si tohle všechno drží a na Macu i ve Windows potřebuje další software.
Jak číst ext4 na Macu nebo ve Windows
macOS nečte žádný ze souborových systémů ext. Po připojení linuxového disku ohlásí „Disk, který jste vložili, nebyl tímto počítačem čitelný“ a nabídne Inicializovat, Ignorovat a Vysunout. Inicializace disk smaže; vyber Ignorovat nebo Vysunout.
Od macOS 15.4 umožňuje Applův FSKit, aby souborový systém běžel jako běžné rozšíření aplikace mimo jádro, stejně jako novější souborové systémy samotného Applu. Je to cesta bez rozšíření jádra a bez snižování bezpečnostních nastavení. Další cesty jsou rozšíření jádra, vrstva v uživatelském prostoru jako FUSE, nebo linuxový virtuální počítač, kterému se disk předá.
Ve Windows 11 umí WSL 2 linuxový disk připojit: wsl --mount \\.\PHYSICALDRIVE2 --partition 1 --type ext4 v terminálu správce, načež se soubory objeví v Průzkumníku pod \\wsl$\ a ve složce /mnt/wsl distribuce. Funguje to jen s disky připojenými přímo k počítači, ne s USB disky a čtečkami SD karet; ty se musí do WSL nejdřív předat přes USB/IP.
Extent je náš vlastní souborový systém přes FSKit pro ext2, ext3 a ext4 na macOS 27. Linuxový disk se objeví ve Finderu jako každý jiný; čtení je zdarma a zápis na ext4 jde přes žurnál disku, stejně jako na Linuxu. Kartu vytaženou z Pi bez vypnutí čte s žurnálem přehraným v paměti.
Časté otázky
Je ext4 lepší než ext3?
Pro nový disk ano. Zapisuje soubory extenty místo map bloků, zvládne soubory do 16 TiB a mnohem větší souborové systémy, drží časy s přesností na nanosekundy i po roce 2038, kontroluje metadata kontrolními součty a přiděluje místo ve větších, méně rozdrobených úsecích. Disky ext3 Linux stejně čte ovladačem ext4.
Přečte Mac ext4?
Sám ne: macOS nečte žádný systém ext a linuxový disk nabídne inicializovat, tedy smazat. Potřebuje rozšíření souborového systému; na macOS 27 připojí Extent ext2, ext3 i ext4 do Finderu přes Applův FSKit.
Přečtou Windows ext4?
Sám Průzkumník ne. Ve Windows 11 připojí WSL 2 přímo připojený linuxový disk příkazem wsl --mount a jeho soubory pak jdou otevřít v Průzkumníku pod \\wsl$\. USB disky a čtečky SD karet se musí do WSL nejdřív předat přes USB/IP.
Má být USB disk ext4, nebo exFAT?
exFAT, když má fungovat na jakémkoli počítači bez dalšího softwaru. ext4, když se používá hlavně s Linuxem nebo Raspberry Pi, nebo když záleží na oprávněních, symbolických odkazech a žurnálu – ten udrží souborový systém konzistentní, i když disk vytáhneš uprostřed zápisu.
Co se stane, když disk ext4 vytáhnu bez vysunutí?
Žurnál udrží souborový systém konzistentní. Změny, které došly ke commitu, se při dalším připojení přehrají; změny, které byly zrovna na cestě, se ztratí. Do té doby superblok hlásí, že disk potřebuje zotavení.
Jak zjistím, které funkce můj disk ext4 používá?
Na Linuxu příkazem sudo dumpe2fs -h /dev/sdX1 nebo sudo tune2fs -l /dev/sdX1 na řádku „Filesystem features“. Na Macu ukáže Extent ty hlavní – žurnál, extenty, 64 bitů, kontrolní součty – v detailu disku.
Jde ext3 převést na ext4?
Ano, na místě přes tune2fs a kontrolu e2fsck, bez formátování. Soubory, které už na disku jsou, si nechají mapy bloků; extenty používají jen soubory zapsané potom. Napřed si disk zazálohuj.
Jak velký soubor ext4 unese?
16 TiB s obvyklými 4KiB bloky, až 256 TiB s 64KiB bloky. Největší souborový systém má s funkcí 64bit zhruba 1 EiB.
Linuxové disky na Macu, ke čtení i zápisu.
Extent připojí ext2, ext3 a ext4 do Finderu na macOS 27. Čtení je zdarma, zápis na ext4 je jednorázový nákup.
Zdroje
Fakta na této stránce jsou ověřená v těchto dokumentech (anglicky).