
एंड्रॉइड पारंपरिक भंडारण वाले उपकरणों का समर्थन करता है, जिसे अपरिवर्तनीय POSIX अनुमति वर्गों और मोड के साथ केस-असंवेदनशील फाइल सिस्टम के रूप में परिभाषित किया गया है। पारंपरिक भंडारण की धारणा में नकली और पोर्टेबल भंडारण शामिल है। पोर्टेबल स्टोरेज को किसी भी बाहरी स्टोरेज के रूप में परिभाषित किया जाता है जिसे सिस्टम द्वारा अपनाया नहीं जाता है और इसलिए प्रारूपित और एन्क्रिप्टेड या किसी विशिष्ट डिवाइस से बंधे नहीं होते हैं। चूंकि पारंपरिक बाहरी भंडारण संग्रहीत डेटा के लिए न्यूनतम सुरक्षा प्रदान करता है, सिस्टम कोड को बाहरी भंडारण पर संवेदनशील डेटा संग्रहीत नहीं करना चाहिए। विशेष रूप से, कॉन्फ़िगरेशन और लॉग फ़ाइलों को केवल आंतरिक संग्रहण पर संग्रहीत किया जाना चाहिए जहां उन्हें प्रभावी ढंग से संरक्षित किया जा सकता है।
बहु-उपयोगकर्ता बाहरी भंडारण
Android 4.2 से प्रारंभ होकर, डिवाइस एकाधिक उपयोगकर्ताओं का समर्थन कर सकते हैं, और बाह्य संग्रहण को निम्नलिखित बाधाओं को पूरा करना होगा:
- प्रत्येक उपयोगकर्ता का अपना पृथक प्राथमिक बाह्य संग्रहण होना चाहिए, और अन्य उपयोगकर्ताओं के प्राथमिक बाह्य संग्रहण तक उसकी पहुंच नहीं होनी चाहिए।
-
/sdcard
पथ को उपयोगकर्ता के आधार पर सही उपयोगकर्ता-विशिष्ट प्राथमिक बाहरी संग्रहण को हल करना चाहिए, जिस तरह से एक प्रक्रिया चल रही है। -
Android/obb
निर्देशिका में बड़ी OBB फ़ाइलों के लिए संग्रहण एक अनुकूलन के रूप में एकाधिक उपयोगकर्ताओं के बीच साझा किया जा सकता है। - संश्लेषित अनुमतियों द्वारा अनुमत पैकेज-विशिष्ट निर्देशिकाओं को छोड़कर, द्वितीयक बाह्य संग्रहण ऐप्स द्वारा लिखने योग्य नहीं होना चाहिए।
इस सुविधा का डिफ़ॉल्ट प्लेटफ़ॉर्म कार्यान्वयन प्रत्येक Zygote-forked प्रक्रिया के लिए पृथक माउंट टेबल बनाने के लिए Linux कर्नेल नेमस्पेस का लाभ उठाता है, और फिर उस निजी नामस्थान में सही उपयोगकर्ता-विशिष्ट प्राथमिक बाहरी संग्रहण की पेशकश करने के लिए बाइंड माउंट का उपयोग करता है।
बूट के समय, सिस्टम EMULATED_STORAGE_SOURCE
पर एकल एम्युलेटेड बाह्य संग्रहण FUSE डेमॉन को माउंट करता है, जो ऐप्स से छिपा होता है। Zygote forks के बाद, यह FUSE डेमॉन के तहत उपयुक्त उपयोगकर्ता-विशिष्ट उपनिर्देशिका को EMULATED_STORAGE_TARGET
में बाँधता है ताकि बाहरी संग्रहण पथ ऐप के लिए सही ढंग से हल हो सकें। क्योंकि एक ऐप में अन्य उपयोगकर्ताओं के भंडारण के लिए सुलभ माउंट पॉइंट की कमी होती है, वे केवल उस उपयोगकर्ता के लिए स्टोरेज तक पहुंच सकते हैं जिसे इसे शुरू किया गया था।
यह कार्यान्वयन साझा सबट्री कर्नेल सुविधा का उपयोग डिफ़ॉल्ट रूट नेमस्पेस से ऐप नेमस्पेस में माउंट इवेंट को प्रचारित करने के लिए भी करता है, जो यह सुनिश्चित करता है कि एएसईसी कंटेनर और ओबीबी माउंटिंग जैसी सुविधाएं सही ढंग से काम करना जारी रखें। यह रूटफ़्स को साझा के रूप में माउंट करके करता है, और फिर प्रत्येक ज़ीगोट नेमस्पेस बनने के बाद इसे दास के रूप में हटा देता है।
एकाधिक बाह्य संग्रहण उपकरण
Android 4.4 में शुरू होकर, Context.getExternalFilesDirs()
, Context.getExternalCacheDirs()
, और Context.getObbDirs()
के माध्यम से डेवलपर्स के लिए कई बाहरी स्टोरेज डिवाइस सामने आए हैं।
WRITE_EXTERNAL_STORAGE
अनुमति को केवल डिवाइस पर प्राथमिक बाहरी संग्रहण तक लेखन पहुंच प्रदान करनी चाहिए। संश्लेषित अनुमतियों द्वारा अनुमत पैकेज-विशिष्ट निर्देशिकाओं को छोड़कर, ऐप्स को द्वितीयक बाह्य संग्रहण उपकरणों पर लिखने की अनुमति नहीं दी जानी चाहिए। इस तरह से लिखने को प्रतिबंधित करना यह सुनिश्चित करता है कि एप्लिकेशन अनइंस्टॉल होने पर सिस्टम फाइलों को साफ कर सकता है।
यूएसबी मीडिया समर्थन
एंड्रॉइड 6.0 पोर्टेबल स्टोरेज डिवाइस का समर्थन करता है जो केवल थोड़े समय के लिए डिवाइस से जुड़े होते हैं, जैसे यूएसबी फ्लैश ड्राइव। जब कोई उपयोगकर्ता एक नया पोर्टेबल डिवाइस सम्मिलित करता है, तो प्लेटफ़ॉर्म उन्हें उस डिवाइस की सामग्री की प्रतिलिपि बनाने या प्रबंधित करने के लिए एक सूचना दिखाता है।
एंड्रॉइड 6.0 में, कोई भी डिवाइस जिसे अपनाया नहीं जाता है उसे पोर्टेबल माना जाता है। चूंकि पोर्टेबल स्टोरेज केवल थोड़े समय के लिए जुड़ा होता है, इसलिए प्लेटफॉर्म मीडिया स्कैनिंग जैसे भारी संचालन से बचता है। पोर्टेबल स्टोरेज पर फाइलों के साथ इंटरैक्ट करने के लिए थर्ड-पार्टी ऐप्स को स्टोरेज एक्सेस फ्रेमवर्क से गुजरना होगा; गोपनीयता और सुरक्षा कारणों से प्रत्यक्ष पहुंच स्पष्ट रूप से अवरुद्ध है।