Extent pro macOS
Získat
Průvodce linuxovými disky

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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í.

Tři datové režimy žurnálu ext3 a ext4
RežimCo jde přes žurnálPo 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=journalMetadata i data souborů.Nejbezpečnější a nejpomalejší: data, která došla ke commitu, tam jsou.
data=writebackJen 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

Tři generace vedle sebe (4KiB bloky)
ext2ext3ext4
V Linuxu od1993 (0.99)2001 (2.4.15)2008 (2.6.28)
ŽurnálNeAnoAno, s rychlými commity od Linuxu 5.10
Jak se zapisují bloky souboruMapy blokůMapy blokůExtenty
Největší soubor2 TiB2 TiB16 TiB
Největší souborový systém16 TiB16 TiBv praxi 1 EiB (64 bitů)
ČasySekundy, do roku 2038 (128bajtové inody)Sekundy, do roku 2038 (128bajtové inody)Nanosekundy, do roku 2446
Indexované velké složkyNeAno (dir_index)Ano, tři úrovně s large_dir
Kontrolní součty metadatNeNeAno (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.

Běžné funkce ext4
FunkceCo děláV Linuxu od
extentSoubory 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_bgMetadata několika skupin bloků pohromadě.2.6.28
metadata_csumKontrolní součet CRC32C u všech metadat, aby se poškození poznalo.3.18
metadata_csum_seedZáklad kontrolních součtů uložený v superbloku, aby šlo měnit UUID.4.4
inline_dataDrobné soubory uložené přímo v inodu.3.8
encryptŠifrování obsahu a názvů souborů po složkách.4.1
casefoldSložky, které v názvech nerozlišují velká a malá písmena.5.2
veritySoubory jen pro čtení, jejichž obsah se ověřuje proti hašovacímu stromu.5.4
fast_commitMalé záznamy žurnálu mezi plnými commity.5.10
orphan_fileRychlejší 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

Limity ext4 podle velikosti bloku (dokumentace linuxového jádra)
Velikost blokuSkupina blokůNejvětší souborNejvětší souborový systém (32 bitů)Největší souborový systém (64 bitů)
1 KiB8 MiB4 TiB4 TiB16 ZiB
2 KiB32 MiB8 TiB8 TiB32 ZiB
4 KiB (obvyklá)128 MiB16 TiB16 TiB64 ZiB
64 KiB32 GiB256 TiB256 TiB1 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

Kde je který souborový systém doma a kdo ho přečte bez dalšího softwaru
Souborový systémOchrana při páduDoma namacOSWindows
ext4ŽurnálLinux, AndroidNeNe
BtrfsCopy-on-write, kontrolní součty i u datLinux (výchozí ve Fedoře)NeNe
XFSŽurnálLinuxové serveryNeNe
APFSCopy-on-writeMacy, iPhonyAnoNe
NTFSŽurnálWindowsJen čteníAno
exFATŽádnáUSB disky, SD karty, fotoaparátyAnoAno

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.

Jak funguje souborový systém přes FSKit v Extentu: rozšíření řekne macOS, kde soubor na disku leží, a data souboru tečou rovnou mezi diskem a macOS.

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).