xfanta

Karta z Raspberry Pi ve Finderu: jak vznikl Extent

Extent připojí linuxový disk na Macu jako každý jiný. Čtení je zdarma, zápis jde přes žurnál, stejně jako na Linuxu.

Michal Fanta5 min čteníTaké dostupné vEN
Karta z Raspberry Pi ve Finderu: jak vznikl Extent

Chtěl jsem si přečíst kartu z Raspberry Pi. Strčil jsem ji do Macu a ten oznámil, že disk nedokáže přečíst: „Disk, který jste vložili, není tímto počítačem čitelný.“ Malý oddíl s bootem se připojil, ten velký se systémem a mými soubory ne. Mac ext4 prostě neumí.

A tak vznikl Extent. Linuxový disk, ať je to karta z Pi, USB disk z linuxového počítače nebo obraz disku, připojí do Finderu jako každý jiný. Číst můžete zdarma, zápis na ext4 odemyká jednorázový nákup.

Okno Extentu s osmi připojenými linuxovými disky: u každého formát, zaplnění a jestli na něj jde zapisovat.

Přehled připojených disků

macOS 27 pustil souborové systémy mimo jádro

Cizí souborové systémy na Macu dřív žily hlavně v rozšířeních jádra, a ta Apple čím dál víc omezuje. V macOS je teď FSKit, rámec pro souborové systémy, které běží jako běžný program, mimo jádro. Extent na něm stojí. Proto vyžaduje macOS 27: používá rozhraní, které přinesla až tahle verze. A běží jen na Macích s Apple silicon.

Jednu věc za vás ale žádná aplikace neudělá. Rozšíření souborového systému musíte jednou zapnout sami, v Nastavení systému › Obecné › Položky při přihlášení a rozšíření › Rozšíření systému souborů. Extent vás tam pošle tlačítkem. Pak už se disky připojují samy, jakmile je zapojíte.

Zajímavé je, kudy tečou data. Extent macOS jen řekne, kde soubor na disku leží, třeba „bloky 8200 až 8450“. Obsah souboru pak jádro čte a zapisuje přímo, rozšířením vůbec neprotéká.

Animace: linuxová karta se připojí do Macu a objeví se ve Finderu; Extent macOS jen řekne, kde soubor leží, a data tečou rovnou z disku; každá změna jde přes žurnál a po vytrženém kabelu se disk srovná.

Jak proudí vlastní data

Čtení je snadná část, zápis je ta, na které to stojí

Přečíst ext4 je hlavně hodně práce: superblok, skupiny bloků, stromy extentů, indexované adresáře, kontrolní součty. Zapisovat je jiná liga. Stačí jedna chyba a disk, který roky fungoval v Linuxu, se po návratu do Pi nepřipojí.

ext4 se proti tomu chrání žurnálem. Je to vyhrazené místo na disku, kam se nejdřív zapíše záměr, co se chystá. Pak přijde potvrzení a teprve potom se změna přepíše na své místo. Když v půlce vypadne proud, Linux při dalším připojení potvrzené změny dohraje a nepotvrzené zahodí. Disk zůstane v pořádku.

Extent zapisuje stejně. Proto zatím zapisuje jen na ext4 s žurnálem a extenty, což je výchozí podoba ext4 v dnešních distribucích. ext2, ext3 a disky s funkcemi, které zatím zapsat neumí, připojí jen pro čtení. A zápis je vypnutý, dokud ho u konkrétního disku nezapnete.

Kartu, kterou jste z Pi vytáhli bez vypnutí, čeká nedohraný žurnál. Extent ho při čtení přehraje v paměti, takže vidíte soubory tak, jak je uvidí Linux. Na kartu přitom nic nezapíše.

Jak ext4 disk uspořádá, co přesně žurnál chrání a čím se liší ext2, ext3 a ext4, podrobně rozebírá průvodce ext4, ext3 a ext2 na webu Extentu.

Rozhodčím je Linux

Jak poznat, že zápis nic nerozbil? Neposuzuje to Extent, ale Linux.

Jádro Extentu jsem napsal podle dokumentace formátu ext4, ne podle zdrojového kódu Linuxu, a pravdu má vždycky Linux. Co Extent přečte, musí sedět s tím, co vidí linuxové nástroje. Co zapíše, musí projít kontrolou e2fsck bez jediné opravy a skutečné linuxové jádro to musí přečíst bajt po bajtu.

K tomu pádové testy. Automatická sada simuluje výpadek proudu v každém bodě zápisu, při každém běhu zhruba na 3 000 discích, a po každém „pádu“ disk zkontroluje. Během vývoje jimi prošlo přes 200 000 náhodných operací: vytváření, zápisy, přejmenování, mazání, pevné odkazy. Po každé simulované havárii zase e2fsck.

Vytržený kabel

Simulace je jedna věc, skutečný kabel druhá. Na USB flashce jsem nechal Extent zapisovat soubory, každý s pojistkou fsync, a uprostřed zápisu jsem kabel vytáhl. Za 22 sekund stihl zapsat 480 souborů, dohromady 142,9 MB, a kabel vypadl během 481.

Po zasunutí Extent přehrál žurnál. Všech 480 souborů bylo zpátky bajt po bajtu. Ten rozepsaný chyběl celý, nic napůl a nic cizího, a e2fsck nenašel žádnou chybu.

Je to jeden disk a jeden pokus, ne záruka pro každou flashku na světě. I dál proto platí, co u každého disku: vysunout, než ho vytáhnete, a mít zálohu.

Laboratoř z Raspberry Pi a šuplíku flashek

Na testování dostal Extent vlastní Raspberry Pi 4 s Raspberry Pi OS. Na něm jsem připravil pět USB flashek, každou s jiným rozložením. Moderní ext4, starší ext3, ext4 bez 64bitových adres, jak ho dělá obraz Raspberry Pi OS, disk po tvrdém vypnutí s nedohraným žurnálem a pár exotičtějších variant.

Flashky pak putovaly mezi Pi a Macem a zpátky, dokud Extent na Macu neviděl přesně to, co Linux. Na posledním kole to bylo osm svazků na čtyřech discích bez jediného rozdílu. Obrazy disků, které vyrobilo linuxové jádro, mezitím kontroluje i automatická sada, včetně adresáře se 100 000 soubory.

Na co si dát pozor

  • Extent potřebuje macOS 27 a Mac s Apple silicon.
  • Umí ext2, ext3 a ext4. Btrfs ani XFS nepřipojí, stejně jako svazky v LVM, softwarovém RAIDu nebo šifrované přes LUKS.
  • Zapisuje jen na ext4 s žurnálem a extenty. Kartu ze Steam Decku přečte, ale zapisovat na ni nebude: SteamOS ji formátuje s funkcí casefold, kterou Extent zatím zapsat neumí.
  • Disky neformátuje ani neopravuje. Když disk potřebuje kontrolu, Extent to řekne a dá vám ke zkopírování příkaz, který spustíte na Linuxu.
Detail disku, který Extent nepřipojil: popis poškození a postup ve třech krocích s příkazem e2fsck ke zkopírování.

Kde ho najdete

Extent je v Mac App Store. Čtení je zdarma a bez časového omezení, zápis na ext4 odemkne jednorázový nákup za 99 Kč, bez předplatného a bez účtu, včetně Rodinného sdílení. Nic o vašich discích Mac neopustí. Kdo zrovna nemá linuxový disk po ruce, může v okně aplikace vyzkoušet ukázkový disk.

👉 Extent v Mac App Store · extent.xfanta.com

Jestli ho vyzkoušíte, napište mi do komentářů nebo na apps@xfanta.com, jaký disk jste připojili a jestli se připojil. Hlavně když se nepřipojil: Extent v tu chvíli napíše proč a v menu Nápověda › Zkopírovat diagnostiku připraví podrobnosti, které mi můžete poslat.

Napsal
Michal Fanta

Designuji 3D modely v Onshape, tisknu na Prusa 3D tiskárnách a programuji weby a aplikace.

Komentáře

Zatím tu žádný komentář není. Napište první.

Jméno a komentář se zveřejní. E-mail ne, použiju ho jen k odpovědi. Chcete komentář smazat? Napište na apps@xfanta.com.

Sledujte, co tvořím

Nové aplikace, modely i články — vyberte si kanál, který už používáte.