Souborový systém mobilního zařízení je způsob organizace, ukládání a pojmenovávání dat ve flash paměti. Podle Android Developers, 2026 mobilní operační systémy používají hierarchickou strukturu adresářů, kde každá aplikace běží v izolovaném sandboxu. Tato architektura zabraňuje neoprávněnému přístupu k datům a zajišťuje stabilní provoz systému při současném spouštění mnoha aplikací.
Hlavní body
Souborový systém je softwarová komponenta operačního systému, která řídí, jak jsou data zapisována, čtena a organizována na fyzickém médiu. Na mobilních zařízeních plní souborový systém kriticky důležité funkce: správu prostoru flash paměti, kontrolu přístupu k souborům na základě oprávnění, protokolování změn pro obnovu po selháních a optimalizaci zápisu s ohledem na vlastnosti NAND flash paměti.
Na rozdíl od desktopových operačních systémů jsou mobilní souborové systémy navrhovány s ohledem na omezený zdroj cyklů přepisování flash paměti. Buňky NAND vydrží omezený počet operací mazání — od 3 000 do 10 000 cyklů pro paměť TLC a MLC. Pro prodloužení životnosti úložiště používají souborové systémy mechanismy wear leveling (vyrovnávání opotřebení) a příkazy TRIM. F2FS, vyvinutý společností Samsung speciálně pro flash paměť, zohledňuje geometrii pole NAND a umisťuje data tak, aby minimalizoval fragmentaci a počet operací mazání bloků.
Moderní mobilní zařízení používají kombinaci několika souborových systémů. Vnitřní paměť (oddíl /data) je formátována v EXT4 nebo F2FS na Androidu a APFS na iOS. SD karty tradičně používají exFAT pro podporu souborů větších než 4 GB nebo FAT32 pro maximální kompatibilitu. Oddíl /system na Androidu je často připojen pouze pro čtení a používá EXT4 nebo EROFS (Enhanced Read-Only File System) — komprimovaný souborový systém vyvinutý společností Huawei pro zmenšení velikosti systémového oddílu.
Hierarchie adresářů Androidu je založena na struktuře Linux s kořenem v /. Každý oddíl má svůj vlastní souborový systém, přístupová práva a účel. Aplikace má přístup pouze k omezené sadě adresářů — ostatní jsou chráněna právy root.
| Cesta | Oddíl | Souborový systém | Přístup pro aplikaci |
|---|---|---|---|
| /data | Userdata | F2FS / EXT4 | Pouze vlastní sandbox |
| /system | System | EROFS / EXT4 | Pouze čtení (root) |
| /sdcard | External | exFAT / FAT32 | S povolením |
| /cache | Cache | EXT4 | Pouze root |
| /vendor | Vendor | EROFS / EXT4 | Pouze čtení (root) |
Oddíl /data je hlavní oddíl pro ukládání uživatelských dat, nainstalovaných aplikací a jejich nastavení. Každá aplikace získá vlastní adresář na cestě /data/data/<package_name>/. Uvnitř tohoto adresáře systém automaticky vytváří podadresáře: files/ pro soubory aplikace, cache/ pro dočasné soubory, databases/ pro databáze SQLite, shared_prefs/ pro SharedPreferences. Přístupová práva k tomuto adresáři se nastavují při instalaci aplikace a nelze je změnit bez přístupu root. Oddíl /data je formátován v F2FS na většině moderních zařízení, což poskytuje až o 40% vyšší rychlost náhodného zápisu ve srovnání s EXT4.
Oddíl /system obsahuje operační systém, systémové aplikace a knihovny. Tento oddíl je připojen pouze pro čtení, aby se zabránilo náhodné nebo škodlivé změně systémových souborů. Na zařízeních s Android 10+ a Project Treble je oddíl /system dynamický a lze jej aktualizovat pomocí OTA balíčků bez nutnosti úplného přeflashování. Pro aplikace je oddíl /system nepřístupný — pokus o zápis vyvolá výjimku SecurityException. Aplikace však mohou číst některé soubory z /system, například systémová písma a konfigurační soubory, pokud mají příslušná oprávnění.
Připojovací bod /sdcard je symbolický odkaz na oddíl emulovaného nebo fyzického externího úložiště. Na zařízeních bez SD karty /sdcard ukazuje na pododdíl uvnitř /data, který je vyhrazen pro sdílený přístup. Tento oddíl je viditelný uživateli při připojení zařízení k počítači pomocí protokolu MTP. Aplikace získávají přístup k /sdcard prostřednictvím oprávnění READ_EXTERNAL_STORAGE a WRITE_EXTERNAL_STORAGE a od Androidu 10 — prostřednictvím Scoped Storage pomocí MediaStore API. Velikost /sdcard obvykle tvoří 60–80% celkového objemu flash paměti zařízení a zbytek je vyhrazen pro oddíl /data.
Na iOS je souborový systém organizován prostřednictvím Sandbox kontejnerů aplikací. Každá aplikace získá izolovaný adresář, jehož přístup je omezen na úrovni jádra XNU. Uživatelský oddíl používá souborový systém APFS (Apple File System), představený v iOS 10.3. APFS podporuje snímky, klonování souborů a šifrování na úrovni souborů, což jej činí optimálním pro mobilní zařízení.
Sandbox kontejner iOS obsahuje čtyři hlavní adresáře: Documents, Library, tmp a SystemData. Každý adresář má vlastní politiku zálohování, dobu uchovávání dat a úroveň přístupu. Documents je automaticky zahrnut do záloh iCloud a iTunes. Library obsahuje podadresáře Caches (nezálohuje se), Preferences (zálohuje se) a Application Support (zálohuje se). Adresář tmp je určen pro dočasné soubory — iOS je může smazat při nedostatku místa a není zahrnut do zálohy. SystemData je používán samotným systémem a není pro aplikaci přístupný prostřednictvím standardních API.
let fm = FileManager.default
let documents = fm.urls(
for: .documentDirectory,
in: .userDomainMask
).first!
let caches = fm.urls(
for: .cachesDirectory,
in: .userDomainMask
).first!
let appSupport = fm.urls(
for: .applicationSupportDirectory,
in: .userDomainMask
).first!
Každý adresář Sandbox kontejneru má vlastní třídu ochrany (protection class). iOS podporuje čtyři třídy: Complete Protection (soubor je nepřístupný při zamknutém zařízení), Protected Unless Open (již otevřené soubory jsou přístupné při zamknutí), Protected Until First User Authentication (soubory jsou přístupné po prvním odemknutí) a No Protection (soubory jsou vždy přístupné po spuštění zařízení). Ve výchozím nastavení všechny soubory v Documents a Library získávají třídu Complete Protection, což zaručuje maximální ochranu uživatelských dat. Při vytváření souboru lze explicitně nastavit jinou třídu ochrany, pokud aplikace na pozadí musí mít přístup k datům při zamknutém zařízení.
Správa přístupu k souborům na mobilních zařízeních je klíčový rozdíl mezi Androidem a iOS. Android používá klasický model přístupových práv Linux (čtení, zápis, spuštění) s rozšířeními pro izolaci aplikací. iOS uplatňuje přísnější model Sandbox, kde každá aplikace běží v izolovaném kontejneru a bez speciálních mechanismů nemá přístup k souborům jiných aplikací.
Na Androidu je každá aplikace spouštěna s samostatným UID (User ID). Všechny soubory vytvořené aplikací v jejím sandboxu patří tomuto UID a nejsou viditelné pro jiné aplikace. Pro přístup ke sdíleným adresářům (externí úložiště) musí aplikace požádat o oprávnění READ_EXTERNAL_STORAGE a WRITE_EXTERNAL_STORAGE. Od Androidu 11 musí být oprávnění vyžadována za běhu a aplikace s targetSdkVersion 30+ musí pro přístup k souborům jiných aplikací používat SAF. Porušení modelu oprávnění vede k SecurityException, která je zpracována standardním blokem try-catch. Google Play automaticky kontroluje soulad aplikace s politikou oprávnění před publikováním.
if (ContextCompat.checkSelfPermission(
context,
Manifest.permission.READ_EXTERNAL_STORAGE
) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(
activity,
arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
REQUEST_CODE
)
}
iOS Sandbox je implementován na úrovni jádra XNU a neumožňuje aplikaci opustit svůj kontejner. I když aplikace získá přístup k URI externího souboru prostřednictvím Document Picker, operační systém vytvoří dočasnou kopii v kontejneru aplikace, místo aby poskytl přímý přístup k originálu. Pro sdílení souborů mezi aplikacemi iOS používá mechanismy Share Sheet a UIActivityViewController, které kopírují soubor z kontejneru jedné aplikace do kontejneru druhé. Pro bezpečné ukládání přihlašovacích údajů (tokeny, hesla, klíče) iOS poskytuje Keychain — šifrované úložiště přístupné systému na úrovni jádra. Keychain není součástí Sandbox kontejneru a je spravován samostatným démonem securityd, což poskytuje dodatečnou úroveň ochrany i v případě kompromitace aplikace.
Výběr souborového systému přímo ovlivňuje výkon a spolehlivost ukládání dat. Každý souborový systém má svou vlastní architekturu, optimalizace a omezení. Pro vývojáře je užitečné porozumět těmto rozdílům, aby mohl předvídat chování aplikace na různých zařízeních.
Při vývoji aplikací berte v úvahu, že různé souborové systémy mají různá omezení délky názvu souboru (255 bajtů pro EXT4 a F2FS, 255 znaků Unicode pro APFS), maximální velikost souboru a podporu speciálních znaků. Například APFS povoluje znaky Unicode v názvech souborů, včetně emotikonů, zatímco EXT4 je omezen na ASCII. Pokud aplikace vytváří soubory s názvy v různých jazycích, testujte provoz na všech cílových zařízeních — název souboru správně vytvořený na APFS může být na EXT4 zkrácen.
Spolehlivá práce se souborovým systémem mobilního zařízení vyžaduje dodržování několika klíčových pravidel. Ta jsou založena na analýze typických chyb vývojářů a doporučeních oficiální dokumentace.
context.filesDir na Androidu, NSSearchPathForDirectoriesInDomains na iOS. Pevné cesty se mění mezi verzemi operačního systému a zařízenímiFile.getUsableSpace() na Androidu a URLResourceValues.volumeAvailableCapacityKey na iOS. Upozorněte uživatele, pokud je volného místa nedostatekisExcludedFromBackup. Na Androidu preferujte cacheDir pro dočasné souboryZvláštní pozornost věnujte mezipalformním rozdílům. Cesty k souborům na Androidu se vytvářejí lomítkem (/data/data/.../files/), na iOS — pomocí schématu URL (file:///var/mobile/.../Documents/). Pokud vaše aplikace používá multiplatformní framework (Flutter, React Native, Kotlin Multiplatform), sjednoťte souborové operace prostřednictvím platformních adaptérů. Například Flutter poskytuje balíček path_provider, který vrací správnou cestu k Documents nebo filesDir na obou platformách bez psaní kódu závislého na platformě. Nikdy nespojujte cesty řetězcovými operacemi — používejte File.join() nebo URL.appendingPathComponent(), které správně zpracovávají oddělovače na různých platformách.
Často kladené otázky
Na moderních zařízeních s Androidem (11+) se pro oddíl /data používá F2FS. Na starších zařízeních — EXT4. Oddíl /system používá EROFS nebo EXT4. SD karty jsou formátovány v exFAT nebo FAT32 v závislosti na kapacitě.
APFS podporuje snímky, klonování souborů, šifrování na úrovni souborů a kontrolní součty. EXT4 má žurnálování a širší kompatibilitu. APFS je optimalizován pro SSD, EXT4 je univerzální souborový systém.
Použijte FileManager.default.urls(for: .documentDirectory, in: .userDomainMask). Metoda vrací pole URL, první prvek je hlavní adresář Documents Sandbox kontejneru aplikace.
Scoped Storage je model přístupu zavedený v Android 10, který omezuje přímý přístup k souborovému systému. Aplikace bez oprávnění mohou číst pouze své vlastní soubory. Pro přístup ke sdíleným mediálním souborům se používá MediaStore API.
exFAT je preferován pro SD karty s kapacitou nad 32 GB, protože podporuje soubory větší než 4 GB. FAT32 poskytuje maximální kompatibilitu se staršími zařízeními, ale omezuje velikost souboru na 4 GB.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také