Das Dateisystem eines Mobilgeräts ist eine Methode zur Organisation, Speicherung und Benennung von Daten auf dem Flash-Speicher. Laut Android Developers, 2026 verwenden mobile Betriebssysteme eine hierarchische Verzeichnisstruktur, in der jede Anwendung in einer isolierten Sandbox ausgeführt wird. Diese Architektur verhindert unbefugten Datenzugriff und gewährleistet einen stabilen Systembetrieb bei gleichzeitigem Ausführen mehrerer Anwendungen.
Wichtige Punkte
Das Dateisystem ist eine Softwarekomponente des Betriebssystems, die verwaltet, wie Daten auf physischen Medien geschrieben, gelesen und organisiert werden. Auf mobilen Geräten erfüllt das Dateisystem kritisch wichtige Funktionen: Verwaltung des Flash-Speicherplatzes, dateibasierte Zugriffskontrolle basierend auf Berechtigungen, Journaling von Änderungen zur Wiederherstellung nach Abstürzen und Schreiboptimierung unter Berücksichtigung der Besonderheiten von NAND-Flash-Speicher.
Im Gegensatz zu Desktop-Betriebssystemen werden mobile Dateisysteme unter Berücksichtigung der begrenzten Anzahl von Überschreibzyklen des Flash-Speichers entwickelt. NAND-Zellen halten nur eine begrenzte Anzahl von Löschvorgängen aus — 3.000 bis 10.000 Zyklen für TLC- bzw. MLC-Speicher. Um die Lebensdauer des Speichers zu verlängern, verwenden Dateisysteme Wear-Leveling-Mechanismen und TRIM-Befehle. F2FS, das von Samsung speziell für Flash-Speicher entwickelt wurde, berücksichtigt die Geometrie des NAND-Arrays und platziert Daten so, dass Fragmentierung und die Anzahl der Blocklöschvorgänge minimiert werden.
Moderne Mobilgeräte verwenden eine Kombination aus mehreren Dateisystemen. Der interne Speicher (die /data-Partition) wird auf Android als EXT4 oder F2FS und auf iOS als APFS formatiert. SD-Karten verwenden traditionell exFAT für Dateien größer als 4 GB oder FAT32 für maximale Kompatibilität. Die /system-Partition auf Android wird oft schreibgeschützt eingehängt und verwendet EXT4 oder EROFS (Enhanced Read-Only File System) — ein komprimiertes Dateisystem, das von Huawei entwickelt wurde, um die Größe der Systempartition zu reduzieren.
Die Verzeichnishierarchie von Android basiert auf der Linux-Struktur mit dem Stammverzeichnis /. Jede Partition hat ihr eigenes Dateisystem, Zugriffsrechte und ihren eigenen Zweck. Eine Anwendung kann nur auf eine begrenzte Anzahl von Verzeichnissen zugreifen — der Rest ist durch Root-Berechtigungen geschützt.
| Pfad | Partition | Dateisystem | App-Zugriff |
|---|---|---|---|
| /data | Userdata | F2FS / EXT4 | Nur eigene Sandbox |
| /system | System | EROFS / EXT4 | Schreibgeschützt (Root) |
| /sdcard | Extern | exFAT / FAT32 | Mit Erlaubnis |
| /cache | Cache | EXT4 | Nur Root |
| /vendor | Vendor | EROFS / EXT4 | Schreibgeschützt (Root) |
Die /data-Partition ist die Hauptpartition zum Speichern von Benutzerdaten, installierten Anwendungen und deren Einstellungen. Jede Anwendung erhält ihr eigenes Verzeichnis unter /data/data/<package_name>/. Innerhalb dieses Verzeichnisses erstellt das System automatisch Unterverzeichnisse: files/ für Anwendungsdateien, cache/ für temporäre Dateien, databases/ für SQLite-Datenbanken, shared_prefs/ für SharedPreferences. Die Zugriffsrechte auf dieses Verzeichnis werden bei der Installation der Anwendung festgelegt und können ohne Root-Zugriff nicht geändert werden. Die /data-Partition ist auf den meisten modernen Geräten als F2FS formatiert, was eine bis zu 40% höhere zufällige Schreibgeschwindigkeit im Vergleich zu EXT4 bietet.
Die /system-Partition enthält das Betriebssystem, Systemanwendungen und Bibliotheken. Diese Partition ist schreibgeschützt eingehängt, um unbeabsichtigte oder böswillige Änderungen an Systemdateien zu verhindern. Auf Geräten mit Android 10+ und Project Treble ist die /system-Partition dynamisch und kann über OTA-Pakete aktualisiert werden, ohne dass ein vollständiges Neuflashen erforderlich ist. Für Anwendungen ist die /system-Partition nicht zugänglich — ein Schreibversuch löst eine SecurityException aus. Anwendungen können jedoch einige Dateien aus /system lesen, wie Systemschriftarten und Konfigurationsdateien, wenn sie über die entsprechenden Berechtigungen verfügen.
Der /sdcard-Mountpunkt ist ein symbolischer Link auf die emulierte oder physische externe Speicherpartition. Auf Geräten ohne SD-Karte verweist /sdcard auf eine Unterpartition innerhalb von /data, die für gemeinsamen Zugriff vorgesehen ist. Diese Partition ist für den Benutzer sichtbar, wenn das Gerät über das MTP-Protokoll mit einem Computer verbunden ist. Anwendungen greifen auf /sdcard über die Berechtigungen READ_EXTERNAL_STORAGE und WRITE_EXTERNAL_STORAGE zu und ab Android 10 über Scoped Storage mit der MediaStore-API. Die Größe von /sdcard beträgt typischerweise 60–80% des gesamten Flash-Speichers, der Rest ist für die /data-Partition reserviert.
Unter iOS ist das Dateisystem über Sandbox-Container von Anwendungen organisiert. Jede Anwendung erhält ein isoliertes Verzeichnis, dessen Zugriff auf der Kernel-Ebene von XNU eingeschränkt ist. Die Benutzerpartition verwendet das APFS (Apple File System), das mit iOS 10.3 eingeführt wurde. APFS unterstützt Snapshots, Dateikloning und dateibasierte Verschlüsselung, was es optimal für mobile Geräte macht.
Ein iOS-Sandbox-Container enthält vier Hauptverzeichnisse: Documents, Library, tmp und SystemData. Jedes Verzeichnis hat seine eigene Backup-Richtlinie, Datenaufbewahrungsdauer und Zugriffsebene. Documents wird automatisch in iCloud- und iTunes-Backups einbezogen. Library enthält die Unterverzeichnisse Caches (nicht gesichert), Preferences (gesichert) und Application Support (gesichert). Das tmp-Verzeichnis ist für temporäre Dateien gedacht, die iOS bei Speichermangel löschen kann — es wird nicht in Backups einbezogen. SystemData wird vom System selbst genutzt und ist für Anwendungen über die Standard-APIs nicht zugänglich.
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!
Jedes Sandbox-Container-Verzeichnis hat seine eigene Schutzklasse. iOS unterstützt vier Klassen: Vollständiger Schutz (Datei bei gesperrtem Gerät nicht zugänglich), Geschützt außer bei geöffneten Dateien (bereits geöffnete Dateien sind bei Sperrung zugänglich), Geschützt bis zur ersten Benutzerauthentifizierung (Dateien nach dem ersten Entsperren zugänglich) und Kein Schutz (Dateien nach Gerätestart immer zugänglich). Standardmäßig erhalten alle Dateien in Documents und Library die Klasse Vollständiger Schutz, was maximalen Schutz der Benutzerdaten gewährleistet. Beim Erstellen einer Datei kann explizit eine andere Schutzklasse angegeben werden, wenn eine Hintergrundanwendung bei gesperrtem Gerät auf Daten zugreifen muss.
Die Zugriffskontrolle auf Dateien auf mobilen Geräten ist ein Hauptunterschied zwischen Android und iOS. Android verwendet das klassische Linux-Berechtigungsmodell (Lesen, Schreiben, Ausführen) mit Erweiterungen zur Anwendungsisolierung. iOS verwendet ein strengeres Sandbox-Modell, bei dem jede Anwendung in einem isolierten Container ausgeführt wird und ohne spezielle Mechanismen keinen Zugriff auf Dateien anderer Anwendungen hat.
Unter Android wird jede Anwendung unter einer separaten UID (Benutzer-ID) ausgeführt. Alle von einer Anwendung in ihrer Sandbox erstellten Dateien gehören zu dieser UID und sind für andere Anwendungen unsichtbar. Für den Zugriff auf gemeinsame Verzeichnisse (externer Speicher) muss die Anwendung die Berechtigungen READ_EXTERNAL_STORAGE und WRITE_EXTERNAL_STORAGE anfordern. Ab Android 11 müssen Berechtigungen zur Laufzeit angefordert werden, und eine Anwendung mit targetSdkVersion 30+ muss SAF verwenden, um auf Dateien anderer Anwendungen zuzugreifen. Ein Verstoß gegen das Berechtigungsmodell führt zu einer SecurityException, die mit einem standardmäßigen try-catch-Block behandelt wird. Google Play überprüft automatisch die Einhaltung der Berechtigungsrichtlinien durch die Anwendung vor der Veröffentlichung.
if (ContextCompat.checkSelfPermission(
context,
Manifest.permission.READ_EXTERNAL_STORAGE
) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(
activity,
arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
REQUEST_CODE
)
}
Die iOS-Sandbox ist auf der XNU-Kernel-Ebene implementiert und erlaubt der Anwendung nicht, ihren Container zu verlassen. Selbst wenn eine Anwendung über den Document Picker Zugriff auf einen externen Datei-URI erhält, erstellt das Betriebssystem eine temporäre Kopie im Container der Anwendung, anstatt direkten Zugriff auf das Original zu gewähren. Zum Teilen von Dateien zwischen Anwendungen verwendet iOS die Mechanismen Share Sheet und UIActivityViewController, die eine Datei aus dem Container einer Anwendung in den einer anderen kopieren. Für die sichere Aufbewahrung von Anmeldeinformationen (Tokens, Passwörter, Schlüssel) bietet iOS die Keychain — einen verschlüsselten Speicher, der für das System auf Kernel-Ebene zugänglich ist. Die Keychain ist kein Teil des Sandbox-Containers und wird von einem separaten securityd-Daemon verwaltet, was selbst bei Kompromittierung der Anwendung eine zusätzliche Schutzebene bietet.
Die Wahl des Dateisystems wirkt sich direkt auf die Speicherleistung und -zuverlässigkeit aus. Jedes Dateisystem hat seine eigene Architektur, Optimierungen und Einschränkungen. Für einen Entwickler ist es hilfreich, diese Unterschiede zu verstehen, um das Verhalten der Anwendung auf verschiedenen Geräten vorherzusagen.
Bei der Entwicklung von Anwendungen beachten Sie, dass verschiedene Dateisysteme unterschiedliche Beschränkungen der Dateinamenlänge (255 Byte für EXT4 und F2FS, 255 Unicode-Zeichen für APFS), maximale Dateigröße und Unterstützung für Sonderzeichen haben. Beispielsweise erlaubt APFS Unicode-Zeichen in Dateinamen, einschließlich Emojis, während EXT4 auf ASCII beschränkt ist. Wenn Ihre Anwendung Dateien mit Namen in verschiedenen Sprachen erstellt, testen Sie auf allen Zielgeräten — ein auf APFS korrekt erstellter Dateiname kann auf EXT4 abgeschnitten werden.
Die zuverlässige Arbeit mit dem Dateisystem eines Mobilgeräts erfordert die Einhaltung mehrerer Schlüsselregeln. Sie basieren auf der Analyse typischer Entwicklerfehler und Empfehlungen der offiziellen Dokumentation.
context.filesDir auf Android, NSSearchPathForDirectoriesInDomains auf iOS. Fest codierte Pfade ändern sich zwischen OS-Versionen und GerätenFile.getUsableSpace() auf Android und URLResourceValues.volumeAvailableCapacityKey auf iOS. Warnen Sie den Benutzer, wenn nicht genügend freier Speicherplatz vorhanden istisExcludedFromBackup vom Backup aus. Bevorzugen Sie auf Android cacheDir für temporäre DateienAchten Sie besonders auf plattformübergreifende Unterschiede. Dateipfade auf Android verwenden Schrägstriche (/data/data/.../files/), auf iOS — URL-Schema (file:///var/mobile/.../Documents/). Wenn Ihre Anwendung ein plattformübergreifendes Framework (Flutter, React Native, Kotlin Multiplatform) verwendet, vereinheitlichen Sie Dateioperationen über Plattformadapter. Beispielsweise stellt Flutter das Paket path_provider bereit, das den korrekten Pfad zu Documents oder filesDir auf beiden Plattformen zurückgibt, ohne plattformspezifischen Code zu schreiben. Verketten Sie Pfade niemals mit String-Operationen — verwenden Sie File.join() oder URL.appendingPathComponent(), die Trennzeichen auf verschiedenen Plattformen korrekt behandeln.
Häufig gestellte Fragen
Auf modernen Android-Geräten (11+) wird für die /data-Partition F2FS verwendet. Auf älteren Geräten — EXT4. Die /system-Partition verwendet EROFS oder EXT4. SD-Karten werden je nach Kapazität als exFAT oder FAT32 formatiert.
APFS unterstützt Snapshots, Dateikloning, dateibasierte Verschlüsselung und Prüfsummen. EXT4 hat Journaling und eine breitere Kompatibilität. APFS ist für SSDs optimiert, während EXT4 ein universelles Dateisystem ist.
Verwenden Sie FileManager.default.urls(for: .documentDirectory, in: .userDomainMask). Die Methode gibt ein Array von URLs zurück, wobei das erste Element das Hauptverzeichnis Documents des Sandbox-Containers der Anwendung ist.
Scoped Storage ist ein mit Android 10 eingeführtes Zugriffsmodell, das den direkten Dateisystemzugriff einschränkt. Anwendungen können ohne Berechtigung nur ihre eigenen Dateien lesen. Für den Zugriff auf gemeinsame Mediendateien wird die MediaStore-API verwendet.
exFAT ist für SD-Karten größer als 32 GB vorzuziehen, da es Dateien größer als 4 GB unterstützt. FAT32 bietet maximale Kompatibilität mit älteren Geräten, schränkt die Dateigröße jedoch auf 4 GB ein.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch