Android हमेशा से बाहरी स्टोरेज की ऐक्सेसरी (जैसे, एसडी कार्ड) के साथ काम करता है. हालांकि, इन ऐक्सेसरी का इस्तेमाल सिर्फ़ फ़ाइलों को सेव करने के लिए किया जा सकता है. ऐसा इसलिए है, क्योंकि ये ऐक्सेसरी लंबे समय तक काम नहीं करती हैं और सामान्य बाहरी स्टोरेज में डेटा की सुरक्षा की सुविधा कम होती है. Android 6.0 में, बाहरी स्टोरेज मीडिया को डिवाइस के अंदरूनी स्टोरेज की तरह इस्तेमाल करने की सुविधा पेश की गई थी.
बाहरी स्टोरेज मीडिया को इस्तेमाल करने पर, उसे फ़ॉर्मैट और एन्क्रिप्ट किया जाता है, ताकि वह एक बार में सिर्फ़ एक Android डिवाइस के साथ काम कर सके. मीडिया, जिस Android डिवाइस पर सेट अप किया गया है उससे पूरी तरह से जुड़ा होता है. इसलिए, यह सभी उपयोगकर्ताओं के लिए ऐप्लिकेशन और निजी डेटा, दोनों को सुरक्षित तरीके से सेव कर सकता है.
जब उपयोगकर्ता, स्टोरेज के लिए इस्तेमाल किए जा सकने वाली जगह में नया स्टोरेज मीडिया (जैसे, एसडी कार्ड) डालते हैं, तो Android उनसे पूछता है कि वे मीडिया का इस्तेमाल कैसे करना चाहते हैं. वे मीडिया को फ़ॉर्मैट और एन्क्रिप्ट करने का विकल्प चुन सकते हैं. इसके अलावा, वे फ़ाइल को स्टोर करने के लिए, उसे पहले जैसा ही इस्तेमाल करना जारी रख सकते हैं. अगर वे इसे अपनाने का विकल्प चुनते हैं, तो प्लैटफ़ॉर्म, शेयर किए गए मुख्य स्टोरेज के कॉन्टेंट (आम तौर पर /sdcard
पर माउंट किए गए) को नए मीडिया पर माइग्रेट करने का विकल्प देता है. इससे, डिवाइस के स्टोरेज में जगह खाली हो जाती है. आम तौर पर, स्टोरेज के लिए MBR का इस्तेमाल किया जाता है. इस वजह से, स्टोरेज की सीमा 2 टीबी तक होती है. हालांकि, अडॉप्टेबल स्टोरेज में GPT का इस्तेमाल किया जाता है. इसलिए, इसमें फ़ाइल स्टोरेज की सीमा ~9ZB तक होती है.
ऐप्लिकेशन को सिर्फ़ तब स्टोरेज मीडिया पर रखा जा सकता है, जब डेवलपर ने android:installLocation
एट्रिब्यूट की मदद से, इसकी जानकारी दी हो.
इस्तेमाल किए जा सकने वाले ऐप्लिकेशन के नए इंस्टॉल, सबसे ज़्यादा खाली जगह वाले स्टोरेज डिवाइस पर अपने-आप सेव हो जाते हैं. साथ ही, उपयोगकर्ता सेटिंग ऐप्लिकेशन में जाकर, इस्तेमाल किए जा सकने वाले ऐप्लिकेशन को स्टोरेज डिवाइसों के बीच ट्रांसफ़र कर सकते हैं. इस्तेमाल किए जा सकने वाले मीडिया पर ट्रांसफ़र किए गए ऐप्लिकेशन, मीडिया को बाहर निकालने के बाद भी याद रखे जाते हैं. मीडिया को फिर से डालने पर, वे ऐप्लिकेशन वापस आ जाते हैं.
सुरक्षा
यह प्लैटफ़ॉर्म, एन्क्रिप्ट (सुरक्षित) करने की कुंजियों को रैंडम तरीके से जनरेट करता है. साथ ही, उन्हें Android डिवाइस के इंटरनल स्टोरेज में सेव करता है. इससे, डिवाइस के स्टोरेज में मौजूद मीडिया की तरह ही, बाहरी स्टोरेज में मौजूद मीडिया भी सुरक्षित हो जाता है. कुंजियां, इस्तेमाल किए गए डिवाइसों से जुड़ी होती हैं. ये कुंजियां, इस्तेमाल किए गए पार्टीशन के GUID के आधार पर तय होती हैं.
अगर डिवाइस को अपने इंटरनल स्टोरेज पर फ़ाइल-आधारित एन्क्रिप्शन (एफ़बीई) का इस्तेमाल करने के लिए कॉन्फ़िगर किया गया है, तो अडॉप्ट किए जा सकने वाले स्टोरेज में एफ़बीई और मेटाडेटा एन्क्रिप्शन, दोनों का इस्तेमाल किया जाता है. ऐसा न होने पर, डिवाइस में जोड़ा गया स्टोरेज, पूरी डिस्क को एन्क्रिप्ट करने (एफ़डीई) की सुविधा का इस्तेमाल करता है.
इस्तेमाल किए जा रहे डिवाइस का डिस्क लेआउट, इंटरनल डेटा सेक्शन से काफ़ी मिलता-जुलता है. इसमें SELinux लेबल वगैरह शामिल हैं. अगर Android डिवाइस पर एक से ज़्यादा उपयोगकर्ताओं के लिए सुविधा काम करती है, तो इस्तेमाल किए जा रहे स्टोरेज डिवाइस पर भी एक से ज़्यादा उपयोगकर्ताओं के लिए सुविधा काम करती है. साथ ही, इंटरनल स्टोरेज की तरह ही अलग-अलग उपयोगकर्ताओं के लिए डेटा को अलग-अलग सेक्शन में रखा जाता है.
एडॉप्ट किए गए स्टोरेज डिवाइस का कॉन्टेंट, उस Android डिवाइस से जुड़ा होता है जिसने उसे एडॉप्ट किया है. इसलिए, एन्क्रिप्शन कुंजियों को पैरंट डिवाइस से निकाला नहीं जा सकता. इस वजह से, स्टोरेज डिवाइस को कहीं और माउंट नहीं किया जा सकता.
अगर आपका डिवाइस एफ़बीई का इस्तेमाल करता है, तो एडॉप्टेबल स्टोरेज पर एफ़बीई और मेटाडेटा एन्क्रिप्शन को कॉन्फ़िगर करने का तरीका जानने के लिए, एफ़बीई के दस्तावेज़ और मेटाडेटा एन्क्रिप्शन के दस्तावेज़ देखें.
परफ़ॉर्मेंस और स्थिरता
बाहरी स्टोरेज मीडिया को सिर्फ़ ऐसी जगहों पर इस्तेमाल करना चाहिए जहां वह सुरक्षित रहे. जैसे, बैटरी डिब्बे के अंदर मौजूद स्लॉट या सुरक्षा कवर के पीछे. इससे, गलती से डेटा मिटने या खराब होने से बचा जा सकता है. खास तौर पर, फ़ोन या टैबलेट से कनेक्ट किए गए यूएसबी डिवाइसों को कभी भी अपनाने के लिए नहीं चुना जाना चाहिए. टीवी स्टाइल वाले डिवाइस से कनेक्ट की गई बाहरी यूएसबी ड्राइव को एक सामान्य अपवाद माना जाएगा, क्योंकि आम तौर पर टीवी को किसी स्थिर जगह पर इंस्टॉल किया जाता है.
जब कोई उपयोगकर्ता नया स्टोरेज डिवाइस इस्तेमाल करता है, तो प्लैटफ़ॉर्म एक बेंचमार्क चलाता है और उसकी परफ़ॉर्मेंस की तुलना डिवाइस के स्टोरेज से करता है. अगर इस्तेमाल किया गया डिवाइस, डिवाइस के स्टोरेज की तुलना में काफ़ी धीमा है, तो प्लैटफ़ॉर्म उपयोगकर्ता को चेतावनी देता है कि हो सकता है कि उसे खराब अनुभव मिले. यह मानदंड, लोकप्रिय Android ऐप्लिकेशन के असल I/O व्यवहार से लिया गया है. फ़िलहाल, AOSP के लागू होने पर, उपयोगकर्ताओं को सिर्फ़ एक थ्रेशोल्ड के बाद चेतावनी दी जाएगी. हालांकि, डिवाइस बनाने वाली कंपनियां इस थ्रेशोल्ड को और भी बेहतर बना सकती हैं. जैसे, कार्ड बहुत धीमा होने पर, उसे पूरी तरह से अस्वीकार करना.
जिन डिवाइसों को शामिल किया गया है उन्हें ऐसे फ़ाइल सिस्टम के साथ फ़ॉर्मैट किया जाना चाहिए जो POSIX अनुमतियों और ext4
या f2fs
जैसे एक्सटेंडेड एट्रिब्यूट के साथ काम करता हो. बेहतर परफ़ॉर्मेंस के लिए, हमारा सुझाव है कि फ़्लैश-आधारित स्टोरेज डिवाइसों के लिए f2fs
फ़ाइल सिस्टम का इस्तेमाल करें.
समय-समय पर, डिवाइस के इस्तेमाल में न होने पर रखरखाव करते समय, प्लैटफ़ॉर्म डिवाइस के स्टोरेज में मौजूद मीडिया के लिए ठीक वैसे ही FI_TRIM
जारी करता है जैसे कि वह डिवाइस के स्टोरेज में मौजूद मीडिया के लिए करता है.
मौजूदा एसडी कार्ड स्पेसिफ़िकेशन में DISCARD
कमांड काम नहीं करता. हालांकि, इसके बजाय कर्नेल ERASE
कमांड का इस्तेमाल करता है. एसडी कार्ड फ़र्मवेयर, ऑप्टिमाइज़ेशन के लिए इसका इस्तेमाल कर सकता है.
टेस्ट करना
यह जांचने के लिए कि अडॉप्ट किए जा सकने वाले स्टोरेज की सुविधा काम कर रही है या नहीं, यह सीटीएस टेस्ट चलाएं:
cts-tradefed run commandAndExit cts-dev \ -m CtsAppSecurityHostTestCases \ -t android.appsecurity.cts.AdoptableHostTest
अगर किसी डिवाइस में यूएसबी स्लॉट नहीं है या यूएसबी कनेक्टर का इस्तेमाल, चालू adb कनेक्शन के लिए किया जा रहा है, तो यूएसबी ड्राइव और एसडी कार्ड के काम करने के तरीके की पुष्टि करने के लिए, इनका इस्तेमाल करें:
adb shell sm set-virtual-disk true