Mobil cihazın fayl sistemi — fləş yaddaşda məlumatların təşkili, saxlanması və adlandırılması üsuludur. Android Developers, 2026-ya görə, mobil əməliyyat sistemləri iyerarxik kataloq quruluşundan istifadə edir, burada hər bir tətbiq təcrid olunmuş sandbox-da işləyir. Bu arxitektura məlumatlara icazəsiz girişin qarşısını alır və çoxsaylı tətbiqlərin eyni vaxtda işə salınması zamanı sistemin sabit işini təmin edir.
Əsas məqamlar
Fayl sistemi — əməliyyat sisteminin məlumatların fiziki daşıyıcıda necə yazılmasını, oxunmasını və təşkil olunmasını idarə edən proqram komponentidir. Mobil cihazlarda fayl sistemi kritik funksiyaları yerinə yetirir: fləş yaddaş sahəsinin idarə edilməsi, icazələr əsasında fayllara giriş nəzarəti, nasazlıqlardan sonra bərpa üçün dəyişikliklərin jurnallaşdırılması və NAND fləş yaddaşın xüsusiyyətlərini nəzərə alaraq yazmanın optimallaşdırılması.
İş masası əməliyyat sistemlərindən fərqli olaraq, mobil fayl sistemləri fləş yaddaşın məhdud yazma dövrü resursu nəzərə alınmaqla layihələndirilir. NAND hüceyrələri məhdud sayda silmə əməliyyatına dözür — TLC və MLC yaddaş üçün müvafiq olaraq 3 000-dən 10 000 dövrə qədər. Saxlayıcının ömrünü uzatmaq üçün fayl sistemləri wear leveling (aşınmanın bərabərləşdirilməsi) mexanizmlərini və TRIM əmrlərini tətbiq edir. Samsung tərəfindən xüsusi olaraq fləş yaddaş üçün hazırlanmış F2FS, NAND massivinin həndəsəsini nəzərə alır və məlumatları elə yerləşdirir ki, fraqmentasiya və blokların silinmə əməliyyatlarının sayı minimuma ensin.
Müasir mobil cihazlar bir neçə fayl sisteminin kombinasiyasından istifadə edir. Daxili yaddaş (/data bölməsi) Android-də EXT4 və ya F2FS, iOS-da isə APFS ilə formatlanır. SD kartlar ənənəvi olaraq 4 GB-dan böyük faylları dəstəkləmək üçün exFAT və ya maksimum uyğunluq üçün FAT32 istifadə edir. Android-də /system bölməsi çox vaxt yalnız oxumaq üçün bağlanır və EXT4 və ya EROFS (Enhanced Read-Only File System) — sistem bölməsinin ölçüsünü azaltmaq üçün Huawei tərəfindən hazırlanmış sıxılmış fayl sistemindən istifadə edir.
Kataloq iyerarxiyası Android, kökü / olan Linux quruluşuna əsaslanır. Hər bölmənin öz fayl sistemi, giriş hüquqları və təyinatı var. Tətbiq yalnız məhdud kataloqlar dəstinə giriş əldə edə bilər — qalanları root hüquqları ilə qorunur.
| Yol | Bölmə | Fayl sistemi | Tətbiq üçün giriş |
|---|---|---|---|
| /data | Userdata | F2FS / EXT4 | Yalnız öz sandbox |
| /system | System | EROFS / EXT4 | Yalnız oxuma (root) |
| /sdcard | External | exFAT / FAT32 | İcazə ilə |
| /cache | Cache | EXT4 | Yalnız root |
| /vendor | Vendor | EROFS / EXT4 | Yalnız oxuma (root) |
/data bölməsi — istifadəçi məlumatlarının, quraşdırılmış tətbiqlərin və onların parametrlərinin saxlanması üçün əsas bölmədir. Hər tətbiq /data/data/<package_name>/ yolunda öz kataloqunu alır. Bu kataloqun daxilində sistem avtomatik olaraq alt kataloqlar yaradır: tətbiq faylları üçün files/, müvəqqəti fayllar üçün cache/, SQLite verilənlər bazaları üçün databases/, SharedPreferences üçün shared_prefs/. Bu kataloqa giriş hüquqları tətbiqin quraşdırılması zamanı təyin edilir və root girişi olmadan dəyişdirilə bilməz. /data bölməsi müasir cihazların əksəriyyətində F2FS ilə formatlanır ki, bu da EXT4 ilə müqayisədə təsadüfi yazma sürətini 40% -dək artırır.
/system bölməsi əməliyyat sistemi, sistem tətbiqləri və kitabxanaları ehtiva edir. Bu bölmə sistem fayllarının təsadüfi və ya zərərli dəyişdirilməsinin qarşısını almaq üçün yalnız oxumaq üçün bağlanır. Android 10+ və Project Treble olan cihazlarda /system bölməsi dinamikdir və tam proşivka olmadan OTA paketləri vasitəsilə yenilənə bilər. Tətbiqlər üçün /system bölməsi əlçatmazdır — yazma cəhdi SecurityException istisnasına səbəb olacaq. Bununla belə, tətbiqlər /system-dən bəzi faylları, məsələn, sistem şriftlərini və konfiqurasiya fayllarını, müvafiq icazələri varsa, oxuya bilər.
/sdcard bağlama nöqtəsi — emulyasiya edilmiş və ya fiziki xarici yaddaş bölməsinə simvolik keçiddir. SD kartı olmayan cihazlarda /sdcard ümumi giriş üçün ayrılmış /data daxilindəki alt bölməyə işarə edir. Bu bölmə cihaz MTP protokolu vasitəsilə kompüterə qoşulduqda istifadəçiyə görünür. Tətbiqlər /sdcard-a READ_EXTERNAL_STORAGE və WRITE_EXTERNAL_STORAGE icazələri, Android 10-dan başlayaraq isə MediaStore API ilə Scoped Storage vasitəsilə giriş əldə edir. /sdcard ölçüsü adətən cihazın fləş yaddaşının ümumi həcminin 60–80%-ni təşkil edir, qalan hissəsi isə /data bölməsi üçün ayrılır.
iOS-da fayl sistemi tətbiqlərin Sandbox konteynerləri vasitəsilə təşkil olunur. Hər tətbiq girişi XNU nüvə səviyyəsində məhdudlaşdırılmış təcrid olunmuş kataloq alır. İstifadəçi bölməsi iOS 10.3-də təqdim edilmiş APFS (Apple File System) fayl sistemindən istifadə edir. APFS snapshot-ları, fayl klonlamanı və fayl səviyyəsində şifrələməni dəstəkləyir ki, bu da onu mobil cihazlar üçün optimal edir.
iOS Sandbox konteyneri dörd əsas kataloqu ehtiva edir: Documents, Library, tmp və SystemData. Hər kataloqun öz ehtiyat surəti siyasəti, məlumatların saxlanma müddəti və giriş səviyyəsi var. Documents avtomatik olaraq iCloud və iTunes ehtiyat surətinə daxil edilir. Library alt kataloqları ehtiva edir: Caches (ehtiyat surəti çıxarılmır), Preferences (ehtiyat surəti çıxarılır) və Application Support (ehtiyat surəti çıxarılır). tmp kataloqu müvəqqəti fayllar üçün nəzərdə tutulub — iOS yer çatışmazlığı olduqda onları silə bilər; ehtiyat surətə daxil edilmir. SystemData sistemin özü tərəfindən istifadə olunur və standart API vasitəsilə tətbiq üçün əlçatmazdır.
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 konteynerinin hər kataloqunun öz qoruma identifikatoru (protection class) var. iOS dörd sinfi dəstəkləyir: Complete Protection (cihaz bloklananda fayl əlçatmazdır), Protected Unless Open (artıq açılmış fayllar bloklama zamanı əlçatandır), Protected Until First User Authentication (fayllar ilk açmadan sonra əlçatandır) və No Protection (fayllar cihaz yükləndikdən sonra həmişə əlçatandır). Defolt olaraq Documents və Library-dəki bütün fayllar Complete Protection sinfini alır ki, bu da istifadəçi məlumatlarının maksimum qorunmasını təmin edir. Fayl yaradılarkən, fon tətbiqi bloklanmış cihazda məlumatlara giriş əldə etməlidirsə, fərqli qoruma sinfi açıq şəkildə təyin edilə bilər.
Mobil cihazlarda fayllara girişin idarə edilməsi Android və iOS arasında əsas fərqdir. Android tətbiqlərin təcrid edilməsi üçün genişləndirmələrlə klassik Linux giriş hüququ modelindən (oxu, yazma, icra) istifadə edir. iOS daha sərt Sandbox modelini tətbiq edir, burada hər tətbiq təcrid olunmuş konteynerdə işləyir və xüsusi mexanizmlər olmadan digər tətbiqlərin fayllarına girişi yoxdur.
Android-də hər tətbiq ayrıca UID (User ID) ilə işə salınır. Tətbiqin öz sandbox-unda yaratdığı bütün fayllar bu UID-yə məxsusdur və digər tətbiqlər üçün görünməzdir. Ümumi kataloqlara (xarici yaddaş) giriş üçün tətbiq READ_EXTERNAL_STORAGE və WRITE_EXTERNAL_STORAGE icazələrini tələb etməlidir. Android 11-dən başlayaraq, icazələr icra zamanı tələb edilməlidir və targetSdkVersion 30+ olan tətbiq digər tətbiqlərin fayllarına giriş üçün SAF istifadə etməlidir. İcazə modelinin pozulması standart try-catch bloku ilə işlənən SecurityException-a səbəb olur. Google Play dərc olunmazdan əvvəl tətbiqin icazə siyasətinə uyğunluğunu avtomatik yoxlayır.
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 nüvə səviyyəsində tətbiq olunub və tətbiqin öz konteynerindən kənara çıxmasına imkan vermir. Tətbiq Document Picker vasitəsilə xarici faylın URI-sinə giriş əldə etsə belə, əməliyyat sistemi orijinala birbaşa giriş təmin etmək əvəzinə tətbiqin konteynerində müvəqqəti surət yaradır. Tətbiqlər arasında fayl mübadiləsi üçün iOS faylı bir tətbiqin konteynerindən digərinin konteyerinə surətləyən Share Sheet və UIActivityViewController mexanizmlərindən istifadə edir. Etibar məlumatlarının (tokenlər, şifrələr, açarlar) təhlükəsiz saxlanması üçün iOS Keychain-i — nüvə səviyyəsində sistem üçün əlçatan olan şifrələnmiş anbarı təqdim edir. Keychain Sandbox konteynerinin hissəsi deyil və ayrıca securityd demonu tərəfindən idarə olunur ki, bu da tətbiqin təhlükəsizliyi pozulsa belə əlavə qoruma səviyyəsini təmin edir.
Fayl sisteminin seçimi məlumatların saxlanmasının performansına və etibarlılığına birbaşa təsir edir. Hər fayl sisteminin öz arxitekturası, optimallaşdırmaları və məhdudiyyətləri var. Tərtibatçı üçün bu fərqləri başa düşmək faydalıdır ki, tətbiqin müxtəlif cihazlarda davranışını proqnozlaşdırsın.
Tətbiqlərin hazırlanması zamanı nəzərə alın ki, müxtəlif fayl sistemlərinin fayl adı uzunluğu məhdudiyyətləri (EXT4 və F2FS üçün 255 bayt, APFS üçün 255 Unicode simvol), maksimal fayl ölçüsü və xüsusi simvolların dəstəyi fərqlidir. Məsələn, APFS fayl adlarında emoji daxil olmaqla Unicode simvollarına icazə verir, EXT4 isə ASCII ilə məhdudlaşır. Tətbiq müxtəlif dillərdə adları olan fayllar yaradırsa, bütün hədəf cihazlarda işi sınayın — APFS-də düzgün yaradılmış fayl adı EXT4-də kəsilə bilər.
Mobil cihazın fayl sistemi ilə etibarlı iş bir neçə əsas qaydaya riayət etməyi tələb edir. Onlar tərtibatçıların tipik səhvlərinin təhlilinə və rəsmi sənədlərin tövsiyələrinə əsaslanır.
context.filesDir, iOS-da NSSearchPathForDirectoriesInDomains. Sərt yollar ƏS versiyaları və cihazlar arasında dəyişirFile.getUsableSpace() və iOS-da URLResourceValues.volumeAvailableCapacityKey istifadə edin. Boş yer kifayət deyilsə, istifadəçini xəbərdar edinisExcludedFromBackup ilə istisna edin. Android-də müvəqqəti fayllar üçün cacheDir-ə üstünlük verinXüsusi diqqət yetirin platformalararası fərqlərə. Android-də fayl yolları düz slash ilə qurulur (/data/data/.../files/), iOS-da — URL sxemi ilə (file:///var/mobile/.../Documents/). Tətbiqiniz çoxplatformalı çərçivədən (Flutter, React Native, Kotlin Multiplatform) istifadə edirsə, fayl əməliyyatlarını platforma adapterləri vasitəsilə birləşdirin. Məsələn, Flutter platformadan asılı kod yazmadan hər iki platformada Documents və ya filesDir-ə düzgün yolu qaytaran path_provider paketini təqdim edir. Yolları heç vaxt sətir əməliyyatları ilə birləşdirməyin — müxtəlif platformalarda ayırıcıları düzgün idarə edən File.join() və ya URL.appendingPathComponent() istifadə edin.
Tez-tez verilən suallar
Müasir Android cihazlarında (11+) /data bölməsi üçün F2FS istifadə olunur. Köhnə cihazlarda — EXT4. /system bölməsi EROFS və ya EXT4 istifadə edir. SD kartlar tutumdan asılı olaraq exFAT və ya FAT32 ilə formatlanır.
APFS snapshot-ları, fayl klonlamanı, fayl səviyyəsində şifrələməni və yoxlama cəmlərini dəstəkləyir. EXT4 jurnallaşdırmaya və daha geniş uyğunluğa malikdir. APFS SSD üçün optimallaşdırılıb, EXT4 universal fayl sistemidir.
FileManager.default.urls(for: .documentDirectory, in: .userDomainMask) istifadə edin. Metod URL ünvanları massivini qaytarır, birinci element tətbiqin Sandbox konteynerinin əsas Documents kataloqudur.
Scoped Storage — Android 10-da təqdim edilmiş, fayl sisteminə birbaşa girişi məhdudlaşdıran giriş modelidir. Tətbiqlər icazəsiz yalnız öz fayllarını oxuya bilər. Ümumi media fayllarına giriş üçün MediaStore API istifadə olunur.
exFAT 32 GB-dan çox tutumlu SD kartlar üçün üstünlük təşkil edir, çünki 4 GB-dan böyük faylları dəstəkləyir. FAT32 köhnə cihazlarla maksimum uyğunluğu təmin edir, lakin fayl ölçüsünü 4 GB ilə məhdudlaşdırır.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun