Το σύστημα αρχείων μιας κινητής συσκευής είναι ο τρόπος οργάνωσης, αποθήκευσης και ονομασίας δεδομένων στη μνήμη flash. Σύμφωνα με το Android Developers, 2026, τα κινητά λειτουργικά συστήματα χρησιμοποιούν ιεραρχική δομή καταλόγων, όπου κάθε εφαρμογή λειτουργεί σε ένα απομονωμένο sandbox. Αυτή η αρχιτεκτονική αποτρέπει τη μη εξουσιοδοτημένη πρόσβαση σε δεδομένα και εξασφαλίζει σταθερή λειτουργία του συστήματος κατά την ταυτόχρονη εκτέλεση πολλαπλών εφαρμογών.
Κύρια σημεία
Σύστημα αρχείων είναι ένα στοιχείο λογισμικού του λειτουργικού συστήματος που διαχειρίζεται τον τρόπο εγγραφής, ανάγνωσης και οργάνωσης δεδομένων στο φυσικό μέσο. Σε κινητές συσκευές, το σύστημα αρχείων εκτελεί κρίσιμες λειτουργίες: διαχείριση χώρου μνήμης flash, έλεγχο πρόσβασης σε αρχεία βάσει αδειών, καταγραφή αλλαγών για ανάκτηση μετά από βλάβες και βελτιστοποίηση εγγραφής λαμβάνοντας υπόψη τα χαρακτηριστικά της μνήμης NAND flash.
Σε αντίθεση με τα λειτουργικά συστήματα επιτραπέζιων υπολογιστών, τα κινητά συστήματα αρχείων σχεδιάζονται λαμβάνοντας υπόψη τον περιορισμένο πόρο κύκλων επανεγγραφής της μνήμης flash. Τα κελιά NAND αντέχουν περιορισμένο αριθμό λειτουργιών διαγραφής — από 3.000 έως 10.000 κύκλους για μνήμη TLC και MLC αντίστοιχα. Για να παραταθεί η διάρκεια ζωής της αποθήκευσης, τα συστήματα αρχείων εφαρμόζουν μηχανισμούς wear leveling (εξισορρόπησης φθοράς) και εντολές TRIM. Το F2FS, που αναπτύχθηκε από τη Samsung ειδικά για μνήμη flash, λαμβάνει υπόψη τη γεωμετρία της διάταξης NAND και τοποθετεί τα δεδομένα έτσι ώστε να ελαχιστοποιείται ο κατακερματισμός και ο αριθμός λειτουργιών διαγραφής μπλοκ.
Οι σύγχρονες κινητές συσκευές χρησιμοποιούν συνδυασμό πολλαπλών συστημάτων αρχείων. Η εσωτερική μνήμη (διαμέρισμα /data) διαμορφώνεται σε EXT4 ή F2FS σε Android και APFS σε iOS. Οι κάρτες SD παραδοσιακά χρησιμοποιούν exFAT για υποστήριξη αρχείων μεγαλύτερων από 4 GB ή FAT32 για μέγιστη συμβατότητα. Το διαμέρισμα /system σε Android συχνά προσαρτάται μόνο για ανάγνωση και χρησιμοποιεί EXT4 ή EROFS (Enhanced Read-Only File System) — ένα συμπιεσμένο σύστημα αρχείων που αναπτύχθηκε από τη Huawei για τη μείωση του μεγέθους του διαμερίσματος συστήματος.
Ιεραρχία καταλόγων Android βασίζεται στη δομή Linux με ρίζα στο /. Κάθε διαμέρισμα έχει το δικό του σύστημα αρχείων, δικαιώματα πρόσβασης και σκοπό. Μια εφαρμογή μπορεί να έχει πρόσβαση μόνο σε ένα περιορισμένο σύνολο καταλόγων — τα υπόλοιπα προστατεύονται από δικαιώματα root.
| Διαδρομή | Διαμέρισμα | Σύστημα αρχείων | Πρόσβαση για εφαρμογή |
|---|---|---|---|
| /data | Userdata | F2FS / EXT4 | Μόνο δικό της sandbox |
| /system | System | EROFS / EXT4 | Μόνο ανάγνωση (root) |
| /sdcard | External | exFAT / FAT32 | Με άδεια |
| /cache | Cache | EXT4 | Μόνο root |
| /vendor | Vendor | EROFS / EXT4 | Μόνο ανάγνωση (root) |
Το διαμέρισμα /data είναι το κύριο διαμέρισμα για αποθήκευση δεδομένων χρήστη, εγκατεστημένων εφαρμογών και ρυθμίσεών τους. Κάθε εφαρμογή λαμβάνει τον δικό της κατάλογο στη διαδρομή /data/data/<package_name>/. Μέσα σε αυτόν τον κατάλογο, το σύστημα δημιουργεί αυτόματα υποκαταλόγους: files/ για αρχεία εφαρμογής, cache/ για προσωρινά αρχεία, databases/ για βάσεις δεδομένων SQLite, shared_prefs/ για SharedPreferences. Τα δικαιώματα πρόσβασης σε αυτόν τον κατάλογο ορίζονται κατά την εγκατάσταση της εφαρμογής και δεν μπορούν να αλλάξουν χωρίς πρόσβαση root. Το διαμέρισμα /data διαμορφώνεται σε F2FS στις περισσότερες σύγχρονες συσκευές, παρέχοντας έως και 40% υψηλότερη ταχύτητα τυχαίας εγγραφής σε σύγκριση με το EXT4.
Το διαμέρισμα /system περιέχει το λειτουργικό σύστημα, εφαρμογές συστήματος και βιβλιοθήκες. Αυτό το διαμέρισμα προσαρτάται μόνο για ανάγνωση για να αποτραπεί η τυχαία ή κακόβουλη τροποποίηση αρχείων συστήματος. Σε συσκευές με Android 10+ και Project Treble, το διαμέρισμα /system είναι δυναμικό και μπορεί να ενημερωθεί μέσω πακέτων OTA χωρίς πλήρη επαναφορά. Για εφαρμογές, το διαμέρισμα /system είναι μη προσβάσιμο — μια προσπάθεια εγγραφής θα προκαλέσει εξαίρεση SecurityException. Ωστόσο, οι εφαρμογές μπορούν να διαβάσουν ορισμένα αρχεία από το /system, όπως γραμματοσειρές συστήματος και αρχεία διαμόρφωσης, εάν έχουν τα κατάλληλα δικαιώματα.
Το σημείο προσάρτησης /sdcard είναι ένας συμβολικός σύνδεσμος προς το διαμέρισμα εξομοιωμένης ή φυσικής εξωτερικής αποθήκευσης. Σε συσκευές χωρίς κάρτα SD, το /sdcard δείχνει σε ένα υποδιαμέρισμα εντός του /data που έχει δεσμευτεί για κοινή πρόσβαση. Αυτό το διαμέρισμα είναι ορατό στον χρήστη όταν η συσκευή συνδέεται στον υπολογιστή μέσω πρωτοκόλλου MTP. Οι εφαρμογές αποκτούν πρόσβαση στο /sdcard μέσω των αδειών READ_EXTERNAL_STORAGE και WRITE_EXTERNAL_STORAGE, και από Android 10 — μέσω Scoped Storage με χρήση του MediaStore API. Το μέγεθος του /sdcard είναι συνήθως 60–80% του συνολικού όγκου μνήμης flash της συσκευής, και το υπόλοιπο δεσμεύεται για το διαμέρισμα /data.
Στο iOS, το σύστημα αρχείων οργανώνεται μέσω Sandbox containers εφαρμογών. Κάθε εφαρμογή λαμβάνει έναν απομονωμένο κατάλογο, του οποίου η πρόσβαση περιορίζεται σε επίπεδο πυρήνα XNU. Το διαμέρισμα χρήστη χρησιμοποιεί το σύστημα αρχείων APFS (Apple File System), που παρουσιάστηκε στο iOS 10.3. Το APFS υποστηρίζει στιγμιότυπα, κλωνοποίηση αρχείων και κρυπτογράφηση σε επίπεδο αρχείου, καθιστώντας το βέλτιστο για κινητές συσκευές.
Το Sandbox container iOS περιλαμβάνει τέσσερις κύριους καταλόγους: Documents, Library, tmp και SystemData. Κάθε κατάλογος έχει τη δική του πολιτική δημιουργίας αντιγράφων ασφαλείας, περίοδο διατήρησης δεδομένων και επίπεδο πρόσβασης. Το Documents περιλαμβάνεται αυτόματα στα αντίγραφα ασφαλείας iCloud και iTunes. Το Library περιέχει υποκαταλόγους Caches (δεν δημιουργείται αντίγραφο ασφαλείας), Preferences (δημιουργείται αντίγραφο ασφαλείας) και Application Support (δημιουργείται αντίγραφο ασφαλείας). Ο κατάλογος tmp προορίζεται για προσωρινά αρχεία — το iOS μπορεί να τα διαγράψει σε περίπτωση έλλειψης χώρου και δεν περιλαμβάνεται στα αντίγραφα ασφαλείας. Το SystemData χρησιμοποιείται από το ίδιο το σύστημα και δεν είναι προσβάσιμο από την εφαρμογή μέσω τυπικών 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!
Κάθε κατάλογος του Sandbox container έχει τη δική του κλάση προστασίας (protection class). Το iOS υποστηρίζει τέσσερις κλάσεις: Complete Protection (το αρχείο δεν είναι προσβάσιμο όταν η συσκευή είναι κλειδωμένη), Protected Unless Open (ήδη ανοιχτά αρχεία είναι προσβάσιμα κατά το κλείδωμα), Protected Until First User Authentication (τα αρχεία είναι προσβάσιμα μετά το πρώτο ξεκλείδωμα) και No Protection (τα αρχεία είναι πάντα προσβάσιμα μετά την εκκίνηση της συσκευής). Από προεπιλογή, όλα τα αρχεία στα Documents και Library λαμβάνουν την κλάση Complete Protection, που εγγυάται μέγιστη προστασία των δεδομένων χρήστη. Κατά τη δημιουργία αρχείου, μπορεί να οριστεί ρητά διαφορετική κλάση προστασίας εάν μια εφαρμογή παρασκηνίου πρέπει να έχει πρόσβαση στα δεδομένα όταν η συσκευή είναι κλειδωμένη.
Διαχείριση πρόσβασης σε αρχεία σε κινητές συσκευές είναι μια βασική διαφορά μεταξύ Android και iOS. Το Android χρησιμοποιεί το κλασικό μοντέλο δικαιωμάτων πρόσβασης Linux (ανάγνωση, εγγραφή, εκτέλεση) με επεκτάσεις για απομόνωση εφαρμογών. Το iOS εφαρμόζει ένα αυστηρότερο μοντέλο Sandbox, όπου κάθε εφαρμογή λειτουργεί σε ένα απομονωμένο container και δεν έχει πρόσβαση σε αρχεία άλλων εφαρμογών χωρίς ειδικούς μηχανισμούς.
Σε Android, κάθε εφαρμογή εκτελείται με ξεχωριστό UID (User ID). Όλα τα αρχεία που δημιουργεί η εφαρμογή στο sandbox της ανήκουν σε αυτό το UID και δεν είναι ορατά σε άλλες εφαρμογές. Για πρόσβαση σε κοινούς καταλόγους (εξωτερική αποθήκευση), η εφαρμογή πρέπει να ζητήσει τις άδειες READ_EXTERNAL_STORAGE και WRITE_EXTERNAL_STORAGE. Από Android 11, οι άδειες πρέπει να ζητούνται κατά την εκτέλεση, και η εφαρμογή με targetSdkVersion 30+ για πρόσβαση σε αρχεία άλλων εφαρμογών πρέπει να χρησιμοποιεί SAF. Η παραβίαση του μοντέλου αδειών οδηγεί σε SecurityException, η οποία διαχειρίζεται από το τυπικό μπλοκ try-catch. Το Google Play ελέγχει αυτόματα τη συμμόρφωση της εφαρμογής με την πολιτική αδειών πριν από τη δημοσίευση.
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 υλοποιείται σε επίπεδο πυρήνα XNU και δεν επιτρέπει στην εφαρμογή να βγει έξω από το container της. Ακόμα κι αν η εφαρμογή αποκτήσει πρόσβαση στο URI ενός εξωτερικού αρχείου μέσω Document Picker, το λειτουργικό σύστημα δημιουργεί ένα προσωρινό αντίγραφο στο container της εφαρμογής, αντί να παρέχει άμεση πρόσβαση στο πρωτότυπο. Για ανταλλαγή αρχείων μεταξύ εφαρμογών, το iOS χρησιμοποιεί τους μηχανισμούς Share Sheet και UIActivityViewController, οι οποίοι αντιγράφουν το αρχείο από το container μιας εφαρμογής στο container μιας άλλης. Για ασφαλή αποθήκευση διαπιστευτηρίων (token, κωδικοί πρόσβασης, κλειδιά), το iOS παρέχει το Keychain — ένα κρυπτογραφημένο αποθετήριο προσβάσιμο στο σύστημα σε επίπεδο πυρήνα. Το Keychain δεν είναι μέρος του Sandbox container και διαχειρίζεται από έναν ξεχωριστό δαίμονα securityd, παρέχοντας ένα επιπλέον επίπεδο προστασίας ακόμη και σε περίπτωση παραβίασης της εφαρμογής.
Η επιλογή συστήματος αρχείων επηρεάζει άμεσα την απόδοση και αξιοπιστία αποθήκευσης δεδομένων. Κάθε σύστημα αρχείων έχει τη δική του αρχιτεκτονική, βελτιστοποιήσεις και περιορισμούς. Είναι χρήσιμο για τον προγραμματιστή να κατανοεί αυτές τις διαφορές για να προβλέπει τη συμπεριφορά της εφαρμογής σε διαφορετικές συσκευές.
Κατά την ανάπτυξη εφαρμογών, λάβετε υπόψη ότι διαφορετικά συστήματα αρχείων έχουν διαφορετικούς περιορισμούς μήκους ονόματος αρχείου (255 byte για EXT4 και F2FS, 255 χαρακτήρες Unicode για APFS), μέγιστο μέγεθος αρχείου και υποστήριξη ειδικών χαρακτήρων. Για παράδειγμα, το APFS επιτρέπει χαρακτήρες Unicode σε ονόματα αρχείων, συμπεριλαμβανομένων emoji, ενώ το EXT4 περιορίζεται σε ASCII. Εάν η εφαρμογή δημιουργεί αρχεία με ονόματα σε διαφορετικές γλώσσες, δοκιμάστε τη λειτουργία σε όλες τις συσκευές-στόχους — ένα όνομα αρχείου που δημιουργήθηκε σωστά σε APFS μπορεί να κοπεί σε EXT4.
Αξιόπιστη εργασία με το σύστημα αρχείων κινητής συσκευής απαιτεί τήρηση αρκετών βασικών κανόνων. Βασίζονται στην ανάλυση τυπικών λαθών προγραμματιστών και στις συστάσεις της επίσημης τεκμηρίωσης.
context.filesDir σε Android, NSSearchPathForDirectoriesInDomains σε iOS. Οι σκληρές διαδρομές αλλάζουν μεταξύ εκδόσεων λειτουργικού συστήματος και συσκευώνFile.getUsableSpace() σε Android και URLResourceValues.volumeAvailableCapacityKey σε iOS. Προειδοποιήστε τον χρήστη εάν ο ελεύθερος χώρος δεν επαρκείisExcludedFromBackup. Σε Android, προτιμήστε το cacheDir για προσωρινά αρχείαΔώστε ιδιαίτερη προσοχή στις διαπλατφορμικές διαφορές. Οι διαδρομές αρχείων σε Android δημιουργούνται με κάθετο (/data/data/.../files/), σε iOS — μέσω σχήματος URL (file:///var/mobile/.../Documents/). Εάν η εφαρμογή σας χρησιμοποιεί πολυπλατφορμικό πλαίσιο (Flutter, React Native, Kotlin Multiplatform), ενοποιήστε τις λειτουργίες αρχείων μέσω προσαρμογέων πλατφόρμας. Για παράδειγμα, το Flutter παρέχει το πακέτο path_provider, το οποίο επιστρέφει τη σωστή διαδρομή προς Documents ή filesDir και στις δύο πλατφόρμες χωρίς τη σύνταξη κώδικα εξαρτώμενου από πλατφόρμα. Ποτέ μην συνενώνετε διαδρομές με λειτουργίες συμβολοσειρών — χρησιμοποιήστε File.join() ή URL.appendingPathComponent(), τα οποία χειρίζονται σωστά τους διαχωριστές σε διαφορετικές πλατφόρμες.
Συχνές Ερωτήσεις
Σε σύγχρονες συσκευές Android (11+) για το διαμέρισμα /data χρησιμοποιείται F2FS. Σε παλαιότερες συσκευές — EXT4. Το διαμέρισμα /system χρησιμοποιεί EROFS ή EXT4. Οι κάρτες SD διαμορφώνονται σε exFAT ή FAT32 ανάλογα με τη χωρητικότητα.
APFS υποστηρίζει στιγμιότυπα, κλωνοποίηση αρχείων, κρυπτογράφηση σε επίπεδο αρχείου και αθροίσματα ελέγχου. Το EXT4 έχει καταγραφή και ευρύτερη συμβατότητα. Το APFS είναι βελτιστοποιημένο για SSD, το EXT4 είναι ένα καθολικό σύστημα αρχείων.
Χρησιμοποιήστε FileManager.default.urls(for: .documentDirectory, in: .userDomainMask). Η μέθοδος επιστρέφει μια συστοιχία URL, το πρώτο στοιχείο είναι ο κύριος κατάλογος Documents του Sandbox container της εφαρμογής.
Scoped Storage είναι ένα μοντέλο πρόσβασης που εισήχθη στο Android 10 και περιορίζει την άμεση πρόσβαση στο σύστημα αρχείων. Οι εφαρμογές χωρίς άδεια μπορούν να διαβάζουν μόνο τα δικά τους αρχεία. Για πρόσβαση σε κοινά αρχεία πολυμέσων χρησιμοποιείται το MediaStore API.
exFAT προτιμάται για κάρτες SD χωρητικότητας άνω των 32 GB, καθώς υποστηρίζει αρχεία μεγαλύτερα από 4 GB. Το FAT32 παρέχει μέγιστη συμβατότητα με παλαιότερες συσκευές, αλλά περιορίζει το μέγεθος αρχείου σε 4 GB.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης